Микроконтроллеры



             

Управляемый ШИМ на основе микроконтроллера AT90S1200 - часть 3


      Программа посредством кнопок обеспечивает следующий набор функций:
           1. Включение любой из кнопок (“On/Off”,”+”,”-“ ).
           2. Выключение кнопкой On/Off.
           3. Изменение скважности ШИМа в сторону увеличения (“-”) и уменьшения (“+”).
           4. Автоповтор при удержании ”+” или ”-“.
      Светодиод является индикатором роботи ШИМа . Данная программа обеспечивает 5 уровней скважности ШИМ.

      Ниже приведена программа (без пояснений), которая обеспечивает 20 уровней скважности ШИМа (плавная регулировка).
     (В первой программе шаг изменения длительности был 33h = 51, т.е. 5 * 51 = 255, а во второй Ah = 10 . Изменение в блоках plus1: и minus1: * Прим. Sinbad )

.INCLUDE "1200def.inc" .ORG 000 rjmp reset .ORG 002 inc r27 sbrc r27,0 rjmp pause sbrs r27,0 rjmp impulse pause: cbi portb,3 out tcnt0,r28 rjmp exit_timer impulse: sbi portb,3 out tcnt0,r29 rjmp exit_timer exit_timer: reti reset: ldi r31,$18 out ddrb,r31 ldi r28,$c3 ldi r29,$3c ldi r31,$17 out portb,r31 ldi r31,$01 out tccr0,r31 ldi r31,$02 out timsk,r31 stop: cbi portb,4 ldi r27,$0 rjmp scan1 scan1: sbis pinb,0 rjmp start sbis pinb,1 rjmp start sbis pinb,2 rjmp start rjmp scan1 start: sbi portb,4 sbi portb,3 out tcnt0,r29 sei rcall pause_scan rjmp scan2 scan2: sbis pinb,0 rjmp off sbis pinb,1 rjmp plus sbis pinb,2 rjmp minus rjmp scan2 off: cli cbi portb,3 rcall pause_scan rjmp stop plus: ldi r26,$ff cpse r26,r28 rjmp plus1 rjmp scan2 minus: ldi r26,$f cpse r26,r28 rjmp minus1 rjmp scan2 plus1: ldi r26,$a add r28,r26 sub r29,r26 rcall pause_scan rjmp scan2 minus1: ldi r26,$a add r29,r26 sub r28,r26 rcall pause_scan rjmp scan2 pause_scan: ldi R25,2 D100_3: clr r24 D100_2: clr r23 D100_1: dec r23 brne D100_1 dec r24 brne D100_2 dec R25 brne D100_3 ret .EXIT

      Так как таймер тактируется непосредственно от тактового генератора то частота ШИМа на прямую зависит от частоты резонатора.



Содержание  Назад  Вперед