ST套件上0-99秒计时,比较准的!
;这是我学习PIC完成的第一个程序烧在了ST套件上不错,0-99秒计时
;如果用MPLAB模拟,用stopwach计时非常准
;ST套件上0-99秒表程序,根据原0-99键控程序上改写的,初学练习
;****************************************************************
LIST P=16F84A,R=DEC ;MCU:16F84,默认数制为十进制
;-----------------------------------------------
__CONFIG B'11111111110001';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC
;没有代码保护
;看门狗关闭
;上电廷时器开启
;振荡器模式为XT
;---------------------
RTCC EQU 01H ;计数器
PC EQU 02H ;程序计数器
STATUS EQU 03H ;状态寄存器
PORTA EQU 05H
PORTB EQU 06H
INTCON EQU 0BH
OPTION_REG EQU 1H ;81H
TRISA EQU 5H
TRISB EQU 6H
;-----------------------STATUS
C EQU 0
Z EQU 2
RP0 EQU 5 ;寄存器体选
;-------------------------INTCON
T0IF EQU 2 ;定时器0溢出中断标志位
T0IE EQU 5 ;定时器0溢出中断允许/禁止
GIE EQU 7 ;总中断允许/禁止
;-------------------------
TABADD EQU 13H ;转换数码管地址
FLAGS EQU 14H ;显示位选标志位
DISPBUF_H EQU 15H ;显示器秒拾位
DISPBUF_L EQU 16H ;显示器秒个位
DIGIT EQU 1AH ;5ms计数器
W_TEMP EQU 1BH ;W现场保护寄存器
STATUS_TEMP EQU 1CH ;STATUS现场保护寄存器
;--------------------
ORG 0000H
GOTO MAIN
ORG 004H
TMR0SERV
MOVWF W_TEMP ;现场保护
SWAPF STATUS,W ;用SWAPF才不会影响标志位
MOVWF STATUS_TEMP ;将W和STATUS存入各保护寄存器
MOVLW 100 ;送定时器初值
MOVWF RTCC
BCF INTCON,T0IF ;清定时器0溢出中断标志位
MOVLW 0FFH
MOVWF PORTB ;先熄灭数码管以免闪烁
BSF PORTA,1
BSF P