Advertisement
artones

lr7ass

May 19th, 2021
345
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. $NOMOD51;Отключение библиотеки регистров стандартного 51-го контроллера
  2. $include (C8051F120.h) ;Подключение библиотеки регистров C8051F120
  3.    
  4. SW_SHD EQU 30h ; Объявление переменной SW_SHD
  5. LED BIT P1.6;Объявление переменной LED
  6. CSEG AT 0; Указывает место в памяти, где должна располагаться программа
  7. LJMP MAIN;  Переход на MAIN
  8. ; Peripheral specific initialization functions,
  9. ; Called from the Init_Device label
  10.  
  11. TABLE: movc a,@a+pc;  Чтение значений длительности импульсов
  12. ret;
  13. db 02h,04h,08h,10h,20h,40h,80h,0FFh;  Таблица значений длительности импульсов
  14.    
  15. Reset_Sources_Init:
  16. mov WDTCN, #0DEh Выключение сторожевого таймера
  17. mov WDTCN, #0ADh  
  18.  
  19. ret
  20.  
  21. Port_IO_Init:; Настройка порта P1.6 на push-pull выход
  22. mov SFRPAGE, #CONFIG_PAGE
  23. mov P1MDOUT, #040h
  24. mov XBR2, #040h
  25. ret
  26.  
  27. Init_Device:;Вызов настройки микроконтроллера
  28. lcall Reset_Sources_Init; Инициализация работы WDT
  29. lcall Port_IO_Init ;Инициализация порта P1.6
  30. ret
  31.  
  32. MAIN:
  33. CALL Init_Device; Вызов функции инициализации микроконтроллера
  34. CLR LED; Выключение светодиода
  35. mov A,P3; Чтение и сохранение исходного состояния кнопки
  36. anl A,#80h;
  37. mov SW_SHD, A;
  38.  
  39. PWM: mov r6,#08h; ; Указание на максимальную длительность импульса
  40.  
  41. Period:
  42. mov a, r6; Загрузка текущего указателя длительности импульса
  43. acall TABLE; Чтение текущей длительности импульса
  44. mov b,a;  Сохранение значения длительности импульса
  45. setb LED; Включение светодиода
  46.  
  47. Pulse:
  48. djnz acc, Pulse; ; Задержка на длительность импульса
  49. clr LED; Выключение диода
  50. mov a,b; Определяется величина паузы через вычитание (256-аккумулятор)  значения длительности импульса
  51. cpl a;
  52. inc a;
  53.  
  54. Pouse:
  55. djnz acc, Pouse Задержка на длительность паузы
  56.  
  57. TEST:
  58. mov A,P3  Проверка состояния кнопки
  59. ANL A,#80h
  60. cjne A, SW_SHD, SKIP;  Сравнение нового состояния кнопки со старым
  61. jmp PERIOD ; Переход на PERIOD, так как состояние кнопки не изменилось
  62. SKIP:
  63. mov SW_SHD, A; Сохранение нового состояния кнопки
  64. jnz PERIOD; Переход на PERIOD со старым значением скважности, так как произошло отпускание кнопки
  65. djnz R6,PERIOD; Переход на PERIOD с новым значением скважности, так как произошло нажатие кнопки
  66. ajmp PWM; Новый перебор всех значений длительности импульса или скважности
  67. end
  68.  
Advertisement
RAW Paste Data Copied
Advertisement