Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $NOMOD51;отключает предварительное определение имен 8051 SFR;
- $include (C8051F120.h));Подключение библиотеки регистров C8051F12;
- LED BIT P1.6;Объявление переменной LED;
- Flag BIT 00h ;Объявление переменной Flag;
- CSEG AT 0;указание места в памяти для расположения программы;
- LJMP MAIN;
- ; Peripheral specific initialization functions,
- ; Called from the Init_Device label
- Reset_Sources_Init:
- mov WDTCN, #0DEh; ;Выключение WDT
- mov WDTCN, #0ADh
- ret
- Timer_Init:
- mov SFRPAGE, #TIMER01_PAGE ;
- mov TMOD, #01h; установка таймера в 16-ти разрядный
- ret
- Port_IO_Init:
- mov SFRPAGE, #CONFIG_PAGE; Настройка порта P1.6 на push-pull выход
- mov P1MDOUT, #040h
- mov XBR2, #040h
- ret
- Init_Device:; Настройка микроконтроллера ;
- lcall Reset_Sources_Init; ; Настройка микроконтроллера
- lcall Port_IO_Init
- lcall Timer_Init
- ret
- MAIN:
- lcall Init_Device;вызов настройки микроконтроллера;
- CLR LED;Переключение диода;
- PWM: mov r6,#08h; максимальная яркость;
- Period:
- mov a, r6;Загрузка текущей длительности импульса;
- acall TABLE; Чтение текущей длительности импульса;
- mov b,a;сохранение значения длительности импульса;
- setb LED;включение светодиода
- Pulse: mov r5, #00h; Увеличение длительности импульса в 256 раз;
- djnz r5,$;
- djnz acc, Pulse; Задержка
- clr LED; Выключение диода
- mov a,b; определяется величина паузы через вычитание (256-аккумулятор) значения длительности импульса
- cpl a;
- inc a;
- Pouse: mov r5, #00h; Увеличение длительности паузы в 256 раз;
- djnz r5,$;
- djnz acc, Pouse;Задержка
- djnz R6,Period;Нахождение длительности паузы
- sjmp PWM;Перезапуск ШИМ;
- TABLE: movc a,@a+pc;Чтение значений длительности импульсов;
- ret;
- db 02h,04h,08h,10h,20h,40h,80h,0FFh; Таблица значений длительности импульсов;
- end
Add Comment
Please, Sign In to add comment