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
Add Comment
Please, Sign In to add comment
Advertisement