include "p16f627a.inc
SDOH equ 0
SCK equ 1
BUZ equ 2
SDOL equ 3
GREEN equ 5
YELLOW equ 6
RED equ 7
PAUSE equ 0
DIAG equ 1
STOP equ 2
SETT equ 3
GO equ 4
cblock 20h
MINUTE:1, SECOND:1, JIFFY:1, NUMBER:1, NEW_SEC:1
DATA_OUT_L:1, DATA_OUT_H, COUNT:1, TEMP:1, TIME_OUT:1
Pause:1, _work:1, _status:1
endc
__config _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF & _LVP_OFF & _MCLRE_ON
org 2100h
; Область EEPROMde d’10’
; Значение по умолчанию — 10 минRESET org 0
; Вектор сбросаПреобразование двоичного кода в код 7-сегментного индикатора
Подпрограмма SVN_SEG
преобразует младший полубайт содержимого регистра W в соответствующий код 7-сегментного индикатора. Код подпрограммы полностью эквивалентен приведенному в Программе 6.6 (стр. 184).Вывод по SPI
Подпрограмма SPI_WRITE
похожа на свою тезку, реализованную в Программе 12.1 на стр. 371, но формирует два потока последовательных данных. Число, находящееся в регистре DATA_OUT_L, передается по линии RA3, тогда как число, находящееся в регистре DATA_OUT_H, — по линии RA0. Оба канала используют общий тактовый сигнал.Прежде чем перейти к кодированию процессов, составляющих программу, вкратце рассмотрим используемую конфигурацию микроконтроллера, задаваемую при его программировании, а также инициализационный код, выполняемый после сброса микроконтроллера (см. Программу 17.3).
include "p16f627a.inc
SDOH equ 0
SCK equ 1
BUZ equ 2
SDOL equ 3
GREEN equ 5
YELLOW equ 6
RED equ 7
PAUSE equ 0
DIAG equ 1
STOP equ 2
SETT equ 3
GO equ 4
cblock 20h
MINUTE:1, SECOND:1, JIFFY:1, NUMBER:1, NEW_SEC:1
DATA_OUT_L:1, DATA_OUT_H, COUNT:1, TEMP:1, TIME_OUT:1
Pause:1, _work:1, _status:1
endc
__config _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF & _LVP_OFF & _MCLRE_ON
org 2100h; Область EEPROM
de d’10’
; Значение по умолчанию — 10 минRESET org 0
; Вектор сбросаgoto MAIN
org 4
; Вектор прерыванияgoto ISR
MAIN bsf STATUS,RP0
; Переключаемся в 1-й банкmovlw b’11100000’
; RA4:0 — выходыmovwf TRISA
movlw Ь’11100000’
; RB7:5 — выходы; RB4:0 — входыmovwf TRISB
movlw b’00000101’
; Таймер 0: внутр. такт. сигнал,movwf OPTION_REG
; предделитель 1:64. Подтяжка вкл.bcf STATUS,RP0
; Возвращаемся в 0-й банкclrf Pause
; Обнуляем флаги паузыclrf NEW_SEC
; и секундыclrf TMR0
bcf INTCON,T0IF
bsf INTCON,T0IE
;Разрешаем прерывание от Таймера 0bsf INTCON,GIE
;Разрешаем все прерыванияbtfss PORTB,SETT
;Проверяем кнопку УСТ.call SET_TIME
;ЕСЛИ нажата, ТО устанавливаем интервалbtfss PORTB,DIAG
;Проверяем кнопку ДИАГ.call DIAGNOSTIC
;ЕСЛИ нажата, ТО выполняем самодиагностикуС помощью директивы __config
задается состояние конфигурационных ячеек в слове конфигурации кристалла. Сторожевой таймер отключен, генератор работает с внешним кварцевым резонатором, также задействован вход внешнего сбросаПри прошивке микроконтроллера в ячейку EEPROM с адресом h’00’ заносится число 10. Это означает, что интервал счета только что запрограммированного микроконтроллера составляет 10 мин. Данное значение впоследствии можно изменять посредством процедуры установки интервала.