Шаблоны языка Си для невероятного микроконтроллера AVR.

 

Числа с права от операторов называют маской меняются лишь биты

 reg |= -записать1 операция «ИЛИ»  0х0=0

   reg&= -для обнуления только 1х1=1

        операция побитовая   «И»

  reg^= инвертировать бит=1 «НЕ»

~ -инвертир биты

1.      битовые функции

while (!(TIFR&0x01)); или в СV (!(TIFR .0) проверка условия когда установится -1 в нулевом бите то оператор пойдет дальше выйдя из функции

 

reg^=1<<n-инвертировать бит 1 ,а в циклической функции бит 0 будет меняться периодически

в компиляторе CV PORTB.0^=1инвертировать бит 1 ,а в циклической функции бит 0 будет меняться периодически

 

reg|=0b00000100 или reg=reg | 0b00000100 установить бит2

reg|=1<<n-записать бит –номером-n в -1                                                                        

в компиляторе CV PORTB.0=1(только                                                                                            для выходных регистров)

 

 

Итак мы нашли что:  ACSR &=~(1<<3);

эквивалентно:ACSR = (ACSR & 1111 0111);

 

reg&=(~0b00000100) обнулить бит2

reg&=~(1<<n)-записать бит –номером-n в -0

в компиляторе CV PORTB.0=0

 

while(PINB&(1<<n)) если бит станет-0 то выход из фуц

в компиляторе CV

while(PINB.n)  если бит станет-0 то выход из фуц

 

 

while(~(PINB)&(1<<n))или while(!(PINB&(1<<n)))  если бит станет-1 то выход из фуц

в компиляторе CV

while(!(PINB.n) ) если бит станет-1 то выход из фуц

 

2. регистровые функции

                                                                                                                                                    

 

PORTB = (unsigned char) ~ (ADCW>>2)-преобразов.2х байтов регистр в однобайтов. предварительно сделав сдвиг в право старш. разряды на 2 позиции а в заключение все инвертировать

 

if ((выр1)&&((выр2)||(выр3))){сидим здесь если1 истина и хотя бы 2 или3 истина}

 

3. управляющие регистры

таймеры

TCCRO-0- выкл-,   1- вкл- с коэф. делен пред. Делителя по таблице

TCNTO- выставл. коэф. деления 0-256

TIFR=0X01; очистить флаг переполнения

volatile - ставьте если нужно предотвратить возможность повреждения содержимого переменной в прерывании, и не позволить компилятору попытаться выкинуть её при оптимизации кода. 
Советую ставить если не знаете точно нужно или нет !
  

пример:
volatile unsigned char x;очень рекомендую ставить на любых переменных так как в протеусе без нее невозможно просмотреть данные в некоторых регистрах

 asm("nop");вставка ассемблерной функции  для пропуска одного такта

// pwm_val - это число от 0 до 1023
// PWM на PD5 будет  OCR1A / 10.24  (в %) 

OCR1AH = (char)(pwm_val>>8);
OCR1AL = (char)pwm_val;

time_val = 0; // обнуляем переменную

// читаем SW1 - это 6 млад. бит порта_D
// и записываем в биты 5_0 
time_val
time_val = PIND & 0b00111111;


// читаем SW2 - это 6 младших бит порта_C
// и записываем в биты 11_6 
time_val
time_val = time_val + ((PINC & 0b00111111)<<6);

 

полезные цифры

1.считать сигнал выше 60% от напряжения питания -1

2.считать сигнал ниже 30% от напряжения питания -0

 

Питание от 4 до 5.5 вольт Для МК ATmaga с буквой L в названии диапазон питания 2.7 - 5.5 вольт - он шире

Значение в регистре PINx обновляется с задержкой примерно в 1.5 длительности тактового сигнала МК.

как выходы способные обеспечить ток до 20 мА (но общий ток на порт только до 80 мА, а ток всех портов до 200 мА в DIP корпусе и до 400 мА в квадратном)

 

R

 

мк

 
1.параметры резистора для подключенного светодиода рассчитанного на ток 15 ма =180 ом

2ма=1000 ом

2.параметр резистора при замыкании ножки на землю для тока 10ма=475 ом для 20ма=220ом

 

 

 

 

 

 

 

 

 

 

 

 

 

САЙТ ДЖЛЯ СКАЧИВАНИЯ КНИГ

 

 http://lord-n.narod.ru/walla.html#razdelMCU

 

ВАЖНАЯ ОПЕРАЦИЯ XOR

 

Логическое "исключающее или" - XOR - значит, что напротив 1  значение меняется!

байт А

1

1

0

0

0

0

0

1

байт В

0

1

1

0

1

1

0

1

A^B

1

0

1

0

1

1

0

0

 PORTC.0^=1;-в цикле программы 0-разряд меняет каждый раз свое значение на противоположное

Если частота переключений не высокая - до 2-3 КГц - то можно управлять "полевиками" MOSFET серии IRL ножкой МК через резистор 100 Ом - транзистор IRLZ44   IRL540 irl 530



Сайт управляется системой uCoz