RD口接LED灯,程序如下,在proteus上仿真时可以正常运行,LED会闪,下载到单片机上时LED灯就一直亮着了,好像是定时器没有产生溢出,请帮忙分析下,谢谢了。
;*******************************************
;在程序中调用定时器TMR0实现的延时程序完成点灯功能
;*******************************************
STATUS EQU 03H ;定义状态寄存器
PORTD EQU 08H ;定义端口D的数据寄存器地址
TRISD EQU 88H ;定义端口D的方向寄存器
RP1 EQU 06H ;定义状态寄存器中的页选位RP1
RP0 EQU 05H ;定义状态寄存器中的页选位RP0
TMR0 EQU 01H ;定义定时器/计数器0寄存器地址
PCL EQU 02H ;定义程序计数器低字节寄存器地址
POTION_REG EQU 81H ;定义选项寄存器地址
INTCON EQU 0BH
DATA1 EQU 6 ;定义TMR0寄存器初始值(250=256-6)
COUNT EQU 20H ;存放延时次数
;*****************主程序开始****************
ORG 00H
GOTO MAIN
;*******************************************
MAIN
NOP ;设置一条ICD必须的空操作
;*****************初始化********************
BSF STATUS, RP0 ;转到体1
BCF STATUS, RP1
MOVLW 07H ;设置选项分频寄存器内容
MOVWF POTION_REG ;分频值设为1:256
MOVLW 00H
MOVWF TRISD ;设置端口D为输出
BCF STATUS, RP0 ;转到体0
BCF STATUS, RP1
;***************初始化结束******************
START
MOVLW 0FFH ;将0FFH送到W
MOVWF PORTD ;点亮端口D上所有的灯
CALL DELAY ;延时1280ms
MOVLW 0FH ;将0FH送到W
MOVWF PORTD ;只点亮端口D低4位上所有的灯
CALL DELAY
MOVLW 0F0H ;将0F0H送到W
MOVWF PORTD ;只点亮端口D上的高4位所有的灯
CALL DELAY
MOVLW 00H
MOVWF PORTD ;灭端口D上的所有灯
CALL DELAY
GOTO START ;循环
;*****************延时程序开始***************
DELAY
MOVLW 14H ;设置循环延时64MS的次数为20次
MOVWF COUNT
LOOP1
BCF INTCON, 2 ;清除TMR0溢出标志位
MOVLW DATA1 ;TMR0赋初值
MOVWF TMR0 ;启动定时器
LOOP
BTFSS INTCON, 2 ;检测TMR0溢出标志位
GOTO LOOP ;没有溢出,继续检测
DECFSZ COUNT ;判断计数次数是否满20次
GOTO LOOP1 ;计数没结束,继续
RETURN ;返回主程序
;*************************延时程序结束*******************
;************************程序结束***********************
END
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
MOVLW 0xa0 ;
MOVWF INTCON ;全局中断允许,定时器中断使能
另外,为什么我的程序仿真就可以正常运行呢?搞不明白
一周热门 更多>