movlw init_porta ; ініціалізація регістра TRISB
movwf TRISA^0x80
movlw init_option ; ініціалізація регістра OPTION
movwf OPTION_REG^80h
clrf STATUS ; вибір банку 0
movlw 0x01
movwf PORTB
movlw .11
movwf VDEL
movlw init_intcon ; ініціалізація регістра INTCON, movwf INTCON ; ;дозвіл переривань
movwf INTCON
return
; основна програма
main
call Init ; ініціалізація мікроконтролера
movlw .34
movwf TMR0
m1 goto m1
end ; кінець програми
Алгоритм програми3:
- Ініціалізуємо контролер. Настроюємо PORTB на вивід, RA3 – на ввід, дозволяємо переривання від таймера. dig0=1, dig1=4, dig2=Б, dig3=Б. , dig4=A. , dig5=С.
- Для того щоб сформувати частоту 50Гц (Т=1052мкс). треба внести до таймеру початкове значення 50, преддільник з коефіцієнтом 16
- Очікуємо переривання від таймера.
- Перевіряємо чи було переривання від таймера. Якщо так, то переходимо на обробчик переривання.
- Читаєто, який сегмент виводити та код сегменту виводимо на PORTB. Виходимо з обробчика переривання та скидаємо прапор переповнення таймера.
- Переходимо на очікування переривання від таймера.
Текст програми3:
; підключення файлу з описом стандартних констант і значень
#include p16f84.inc
; формування конфігураційного слова
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
; опис комірок пам'яті даних
cblock 0x0C ; починаючи з адреси 0x0C
W_TEMP ; збереження W при виклику переривання
STATUS_TEMP ; збереження STATUS при перериванні
dig0 ; буфер на 6 розряди
dig1
dig2
dig3
dig4
dig5
segment ; номер відображуваного розряду
endc
; опис констант
init_porta equ b'00000000' ; RA2 на вводу,інші вивід
init_portb equ b'00000000' ; усі розряди на вивід
init_option equ b'00000100' ; TMR0 рахує CLKOUT/32
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
btfsc INTCON,T0IF ; переривання від таймера?
goto tmr_int ; перехід на оброблювач переривання
; при переповненні таймера
movlw b'00100000' ; дозвіл переривань тільки від таймера
movwf INTCON
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.