Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $NOMOD51;Отключение библиотеки регистров стандартного 51-го контроллера
- $include (C8051F120.h) ;Подключение библиотеки регистров C8051F120
- SW_SHD EQU 30h ; Объявление переменной SW_SHD
- LED BIT P1.6;Объявление переменной LED
- CSEG AT 0; Указывает место в памяти, где должна располагаться программа
- LJMP MAIN; Переход на MAIN
- ; Peripheral specific initialization functions,
- ; Called from the Init_Device label
- TABLE: movc a,@a+pc; Чтение значений длительности импульсов
- ret;
- db 02h,04h,08h,10h,20h,40h,80h,0FFh; Таблица значений длительности импульсов
- Reset_Sources_Init:
- mov WDTCN, #0DEh Выключение сторожевого таймера
- mov WDTCN, #0ADh
- ret
- Port_IO_Init:; Настройка порта P1.6 на push-pull выход
- mov SFRPAGE, #CONFIG_PAGE
- mov P1MDOUT, #040h
- mov XBR2, #040h
- ret
- Init_Device:;Вызов настройки микроконтроллера
- lcall Reset_Sources_Init; Инициализация работы WDT
- lcall Port_IO_Init ;Инициализация порта P1.6
- ret
- MAIN:
- CALL 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:
- djnz acc, Pulse; ; Задержка на длительность импульса
- clr LED; Выключение диода
- mov a,b; Определяется величина паузы через вычитание (256-аккумулятор) значения длительности импульса
- cpl a;
- inc a;
- Pouse:
- djnz acc, Pouse Задержка на длительность паузы
- TEST:
- mov A,P3 Проверка состояния кнопки
- ANL A,#80h
- cjne A, SW_SHD, SKIP; Сравнение нового состояния кнопки со старым
- jmp PERIOD ; Переход на PERIOD, так как состояние кнопки не изменилось
- SKIP:
- mov SW_SHD, A; Сохранение нового состояния кнопки
- jnz PERIOD; Переход на PERIOD со старым значением скважности, так как произошло отпускание кнопки
- djnz R6,PERIOD; Переход на PERIOD с новым значением скважности, так как произошло нажатие кнопки
- ajmp PWM; Новый перебор всех значений длительности импульса или скважности
- end
Advertisement
RAW Paste Data
Copied
Advertisement