;************************************************************************
;<<软件模拟简易车辆里程表>>
;时间:2006.3.5
;程序文件名:“TMR0_led2.asm”
;功能实现:TMR0当作定时器使用,外部脉冲通过T0CKI给单片机提供时钟源,每4个
; 脉冲为一个指令周期,使计数器加1溢出
;硬件连接:无
;***********************************************************************
;***********************************************************************
;定义单片机型号为PIC16F877A
;程序包含文件:P16F877A.INC
;定义配置字
;***********************************************************************
LIST P=16F877A ;定义本程序所使用的芯片为PIC16F877A
INCLUDE "P16F877A.INC" ;定义本程序包含该文件
__CONFIG 3F72H ;晶振配置HS,看门狗禁止,上电延时使能,
;掉电复位使能,低电压编程禁止,代码不保护
TMR0B EQU 0FFH ;定义TMR0初始值为255
;***********************************************************************
;复位矢量定义(对于16F877A)
;***********************************************************************
ORG 0000H ;复位矢量地址
GOTO MAIN ;程序跳转到MAIN主程序
;----------------------------------------------------------------------
;***********************************************************************
;主程序区
;***********************************************************************
ORG 0005H ;主程序从0005H开始
MAIN
NOP ;空循环
BSF STATUS,RP0 ;使当前体为体1
MOVLW 00H ;使RC口为输出
MOVWF TRISC
MOVLW 0FFH ;使RA4口为输入
MOVWF TRISA
MOVLW 30H ;由T0CKI外部引脚输入提供TMR0时钟源,上
MOVWF OPTION_REG ;升沿触发,分频比为1:2,分配给TMR0
BCF STATUS,RP0 ;使当前体为体0
CLRF PORTC ;PORTC口清0
LOOP BCF INTCON,T0IF ;TMR0溢出标志位清零
MOVLW TMR0B ;TMR0初始值为255
MOVWF TMR0
TEST BTFSS INTCON,T0IF ;判断TMR0溢出标志位是否为1,为1则跳到
GOTO TEST ;下一步,否的话继续循环检测
INCF PORTC,1 ;PORTC加1
GOTO LOOP
END ;汇编程序结束
;------------------------------------------------------------------------