Advertisement
artones

lr7ass

May 19th, 2021
1,971
0
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.  
  68. end
  69.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement