这是一个时钟中断程序,利用定时器0,实现多个时钟计时功能,时钟值放在R3至R6,R3是记分钟,其他都是计秒
者4个软计时器要在主程序中多次调用,在等待模式运行情况良好,可是平行运行是很不稳定,各种运行异常。下面是代码,请高手帮忙看看。
端口说明:
P2.7=红外线人体感应器biss0001
P2.0~P2.4BY-8001语音模块
ORG 00000H
AJMP START
ORG 000BH
AJMP
tiME0
ORG 30H
AUXR DATA 8EH
P0M1 EQU 093H
P0M0 EQU 094H
P4 EQU 0C0H
P4M1 EQU 0B3H
P4M0 EQU 0B4H
P5 EQU 0C8H
P5M1 EQU 0C9H
P5M0 EQU 0CAH
T0MS EQU 30H ;毫秒计数器0
T1MS EQU 31H ;毫秒计数器1
TMI EQU 32H ;分秒计数器
MAT EQU 4FH ;总任务限时
TCST BIT 05H ;探测状态标志
START:
MOV AUXR,#7FH
MOV SP,#80H
MOV TMOD,#0F0H ;设置定时计数器为工作模式0,可重载16位计数器
MOV TH0, #3CH
MOV TL0,#0B0H ;定时器0 预置15536,一个计数周期50000uS=50mS.
CLR TF0
SETB EA ;中断总开关
SETB ET0 ;定时器0中断开关
SETB TR0 ;定时器0开始计时
MOV T0MS,#00H
MOV T1MS,#00H
MOV TMI,#0
MOV 41H,#00H
MOV R2,#00H ;
MOV R3,#00H ;分计数器R3
MOV R4,#00H ;秒计数器R4
MOV R5,#00H ;秒计数器R5
MOV R6,#00H ;秒计数器R6
MOV R7,#00H ;SecondNum3
JNB P3.4,STRSP ;push strat
AJMP START
STRSP:
LP2:JNB P2.7,OC
CJNE R4,#10,LP2 ;如果持续10秒没有0信号代表没有人
CLR TCST ;设置探测标志位0代表没人
SETB P2.2 ;播放语言来监视端口读取及计时器运行状态
MOV R4,#0
MOV R6,#0
LP:CJNE R6,#1,LP
CLR P2.2
AJMP LOP
OC: ;如果10秒内有0输入代表有人
SETB TCST ;设置探测标志为1代表有人
SETB P2.0 ;播放语言来监视端口读取及计时器运行状态
MOV R6,#0
LP1:CJNE R6,#1,LP1
CLR P2.0
LOP:
MOV R6,#0
LP3:CJNE R6,#1,LP3
NOP
AJMP STRSP
AJMP START
;*****************************************************************************************************
;************************定时中断程序*********************************************************
TIME0: ;
PUSH ACC
PUSH PSW
INC T0MS ;毫秒计数器0+1
INC T1MS ;毫秒计数器1+1
MOV A,T0MS ;
CJNE A,#20,SCD1 ;20*50ms=1S 整秒检测,不到1s回到主程序
MOV A,TMI
INC A
MOV TMI,A ;分秒计数器+1
INC R4 ;秒计数器R3+1
INC R5 ;秒计数器R5+1
INC R6 ;秒计数器R6+1
MOV T0MS,#0 ;毫秒计数器0清零
CJNE A,#60,SCD4 ;60秒=1分钟检测
INC R3 ;分计数器+1
SCD4:CJNE R4,#200,SCD3
MOV R4,#0 ;秒计数器R4清零
SCD3:CJNE R5,#200,SCD2
MOV R5,#0 ;秒计数器R5清零
SCD2:CJNE R6,#200,SCD1
MOV R6,#0 ;秒计数器R6清零
SCD1:
MOV A,T1MS
CJNE A,#255,NEX
MOV T1MS,#0
NEX:
MOV TH0, #3CH
MOV TL0,#0AFH ;定时器0 预置15535,一个计数周期50000uS=50mS.
POP PSW
POP ACC
RETI
END
运行在俩个回合(至五个回合不等)之后
单片机没有响应
问题出在哪里?
评分
查看全部评分
一周热门 更多>