goto int_end ; перехід на закінчення оброблювача
; оброблювач переривання від таймера
tmr_int
bcf INTCON, T0IF ; очищення прапорця переповнення TMR0
call UрdаtеDіg ; відновлення стану індикатора
swapf dig0, W ; ініціалізація значення таймера
andlw 0xF0
movwf TMR0
movlw b'00001000' ; формування звукового сигналу
xorwf PORTA, F
int_end ; закінчення оброблювача переривання
swapf STATUS_TEMP, W ; відновлення значень
movwf STATUS ; регістрів W і STATUS
swapf W_TEMP, F
swapf W_TEMP, W
movlw .100
movwf TMR0
retfie ; повернення з переривання
; підпрограма відновлення стану індикатора
UрdаtеDіg
movlw dig0 ; підготовка вмісту поточного розряду
addwf segment, W
incf segment,1
movwf FSR
movf INDF, W
call bcd_table ; перетворення в 7-сегментний код
movw f PORTB ; вивід поточного розряду
return
; підпрограма перетворення двійкового значення в 7-сегментний код
bcd_table
andlw 0x0F
addwf PCL, F
retlw b'00000110' ; 1
retlw b'01100110' ; 4
retlw b'11111101' ; Б.
retlw b'11110111' ; A.
retlw b'10111001' ; С.
; підпрограма ініціалізації мікроконтролера
Init
bsf STATUS, RP0 ; вибір банку 1
movlw init_porta ; ініціалізація регістра TRISA
movwf TRISA^80h
movlw init_portb ; ініціалізація регістра TRISB
movwf TRISB^0x80
movlw init_option ; ініціалізація регістра OPTION
movwf OPTION_REG^80h
clrf STATUS ; вибір банку 0
clrf dig0 ; ініціалізація відображ. символу
clrf dig1
movlw 1
movwf dig2
movlw 2
movwf dig3
movlw 3
movwf dig4
movlw 4
movwf dig5
clrf segment
movlw init_intcon ; ініціалізація регістра INTCON, movwf INTCON ; ;дозвіл переривань
movwf INTCON
return
; основна програма
main
call Init ; ініціалізація мікроконтролера
movlw .92
movwf TMR0
m1 goto m1
end ; кінець програми
Висновок: За допомогою мікроконтролера PIC16F84A, можна формувати сигнали керування й індикації, формувати звукові та світлові сигнали.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.