Шаблоны
языка Си для
невероятного
микроконтроллера
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