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;
- SW_SHD EQU 0h; объявление константой переменной SW_EQU;
- 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
- Port_IO_Init:
- mov SFRPAGE, #CONFIG_PAGE ;Настройка порта P1.6 на push-pull
- выход
- mov P3MDOUT, #080h
- mov P1MDOUT, #040h
- mov XBR2, #040h
- ret
- ; Initialization function for device,
- ; Call Init_Device from your main program
- Init_Device:;Настройка микроконтроллера;
- lcall Reset_Sources_Init
- lcall Port_IO_Init
- ret
- MAIN:
- lcall Init_Device;вызов настройки микроконтроллера;
- CLR LED;Переключение диода;
- mov A,P3;
- anl A,#80h;
- mov SW_SHD,A
- 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;Задержка;
- TEST:
- mov A,P3; Проверка на соответствие;
- ANL A,#80h
- cjne A, SW_SHD,SKIP;
- jmp PERIOD ;
- SKIP:
- mov SW_SHD, A;
- jnz PERIOD;
- djnz R6,PERIOD;Смена уровня ШИМ;
- ajmp 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