- Для того щоб сформувати частоту 0,6 Гц (Т=77640мкс). треба внести до таймеру початкове значення 4, преддільник з коефіцієнтом 16, та лічильник VDEL на 11.
- Очікуємо тереривання від таймера.
- Після того, як відбудеться переривання від таймера перевыряэмо чи була натиснута кнопка (RA3 = 1), якщо була натиснена змінюється значення RB4 на протележне.
Текст програми2:
; підключення файлу з описом стандартних констант і значень
#include p16f84.inc
; формування конфігураційного слова
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
; опис комірок пам'яті даних
cblock 0x0C ; починаючи з адреси 0x0C
W_TEMP ; збереження W при виклику переривання
VDEL
STATUS_TEMP ; збереження STATUS при перериванні
endc
; опис констант
init_porta equ b'00001000' ; RA0 на вводу,інші вивід
init_portb equ b'00000000' ; усі розряди на вивід
init_option equ b'00000011' ; TMR0 рахує CLKOUT/16
init_intcon equ b'10100000' ; переривання від TMR0
; початок програми
org 0 ; вектор скидання
bcf INTCON, GIE ; заборона всіх переривань
goto main ; перехід на початок основної програми
; оброблювач переривання
int_start
org 0x04 ; вектор переривання
movwf W_TEMP ; збереження W і STATUS
swapf STATUS, W
movwf STATUS_TEMP
decfsz VDEL,1
goto propusk
btfsc PORTA,3
goto propusk
btfsc INTCON,T0IF ; переривання від таймера?
goto tmr_int ; перехід на оброблювач переривання
; при переповненні таймера
propusk movlw b'00100000' ; дозвіл переривань тільки від таймера
movwf INTCON
goto int_end ; перехід на закінчення оброблювача
; оброблювач переривання від таймера
tmr_int
bcf INTCON, T0IF ; очищення прапорця переповнення TMR0
call IntFreq ; відновлення стану індикатора
int_end ; закінчення оброблювача переривання
swapf STATUS_TEMP, W ; відновлення значень
movwf STATUS ; регістрів W і STATUS
swapf W_TEMP, F
swapf W_TEMP, W
movlw .34
movwf TMR0
retfie ; повернення з переривання
; підпрограма відновлення стану індикатора
IntFreq
movlw 0x05
xorwf PORTB,1
movlw .11
movwf VDEL
movlw .34
movwf TMR0
return
; підпрограма ініціалізації мікроконтролера
Init
bsf STATUS, RP0 ; вибір банку 1
movlw init_portb ; ініціалізація регістра TRISB
movwf TRISB^0x80
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.