完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
这是一个时钟中断程序,利用定时器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 运行在俩个回合(至五个回合不等)之后单片机没有响应 问题出在哪里? |
|
相关推荐
18个回答
|
|
|
P0.0最好接一个上拉,看这段程序不像会有交替循环播放的问题,即使出现,应该有一个3秒的停顿,看现象应该是跑飞了,不知道还有没有其他部分的程序会播放,有的话,查查那部分。也可以用KEIL做软件仿真,人工设置端口状态,跟踪程序看看跑到哪了,也只能帮你这么多了
最佳答案
|
|
|
|
|
|
你的程序应该好好整理一下,思路也整理一下,其中R3,R5,T1MS,TMI做了计算,但没有用到,EA最好是在所有初始化都结束后再开启。 MOV R4,#0,MOV R6,#0重新开始计时时,最好把定时器也初始化一下。
另外所谓的单片机不响应的状态也要明确一下,是什么反应都没有,还是维持一个状态不变,播放语言是否能正确运行,播放语言的时间建议设在2、3秒以上做测试用。不响应的状态如果在约300秒后会不会恢复正常 |
|
|
|
|
|
谢谢您的耐心帮助,是这样的,这个只是整体程序中的一小部分,其他的没问题,我只把故障模块单独拿出来测试的,初始化部分不用的寄存器没删。
播放语音模块应该是没问的,而且在刚开始两个循环里都有声音的,在其他程序里播放都是正常的。 好像是程序混乱了,因为每次测试的结果都不一样,有时候能正常运行五六个循环,有时候就两三个,之后就没任何响声了,多久都不响,在按下p3.4按钮后有时又能想两声又没反应了,而且有时候探测器的状态不稳定,是不是探测器的问题,在探测器前面没人的情况下,会出现p2.2和p2.0连续交替响起的情况,真的快疯掉了 |
|
|
|
|
|
以前从来没用到过人体探测器,经过测试好像这个探测器输出的不是一个连续的电平0或者1,所以我的思路是,在一段时间内捕获0信号,程序中设定的是10秒,在10秒内没有0输出就判定没有人。
|
|
|
|
|
|
这是等等模式,就是什么都不做,等着时间到了再继续执行下面的程序
MOV R4,#0 PW:CJNE R4,#10,PW R4等待模式 CLR TCST SETB P2.2 MOV R6,#0 LP:CJNE R6,#1,LP R6等等模式 CLR P2.2 AJMP LOP 这种模式运行非常稳定,可是程序整体效率太低了 下面是平行运行模式,就是所有程序运行的过程中每个循环检测时间状态,到时间就执行响应的指令,没到时间就继续其他指令,和中断的原理差不多,就算是软中断吧 MOV R4,#0 START CJNE R4,#10,LP2 ;R4平行检测模式,到10秒执行下面的没到时间执行LP2 CLR TCST SETB P2.2 MOV R4,#0 MOV R6,#0 LP:CJNE R6,#1,LP CLR P2.2 AJMP LOP LP2: …… …… AJMP START 可是这种模式好难实现,各种pug各种飞 |
|
|
|
|
|
定时器初始化,会影响其他秒计数寄存器的,谢谢
|
|
|
|
|
|
STRSP:
LP2:JB P0.0,OC CLR TCST SETB P2.2 MOV R6,#0 LP:CJNE R6,#1,LP CLR P2.2 AJMP LOP OC: SETB TCST SETB P2.3 MOV R6,#0 LP1:CJNE R6,#1,LP1 CLR P2.3 LOP: MOV R6,#0 LP3:CJNE R6,#3,LP3 NOP AJMP STRSP 我简化了程序,把感应器换成普通开关,出现新情况 输入1时循环正常, 隔一秒播放一次P2.3 输入0就程序错乱,出现 P2.2和P2.3快速交替循环播放 |
|
|
|
|
|
STRSP:
LP2:JB P0.0,OC CLR TCST SETB P2.2 MOV R6,#0 LP:CJNE R6,#1,LP CLR P2.2 AJMP LOP OC: SETB TCST SETB P2.3 MOV R6,#0 LP1:CJNE R6,#1,LP1 CLR P2.3 LOP: MOV R6,#0 LP3:CJNE R6,#3,LP3 NOP AJMP STRSP 我简化了程序,把感应器换成普通开关,出现新情况 输入1时循环正常, 隔一秒播放一次P2.3 输入0就程序错乱,出现 P2.2和P2.3快速交替循环播放 |
|
|
|
|
|
STRSP:
LP2:JB P0.0,OC CLR TCST SETB P2.2 MOV R6,#0 LP:CJNE R6,#1,LP CLR P2.2 AJMP LOP OC: SETB TCST SETB P2.3 MOV R6,#0 LP1:CJNE R6,#1,LP1 CLR P2.3 LOP: MOV R6,#0 LP3:CJNE R6,#3,LP3 NOP AJMP STRSP 我简化了程序,把感应器换成普通开关,出现新情况 输入1时循环正常, 隔一秒播放一次P2.3 输入0就程序错乱,出现 P2.2和P2.3快速交替循环播放 |
|
|
|
|
|
和板子一起的还有两个遥控模块,会不会是有干扰,不应该呀,我又没按遥控
|
|
|
|
|
|
|
|
|
|
|
|
p0.0是弱上拉准双向位,没有上拉,交替没有3秒
|
|
|
|
|
|
非常感谢
|
|
|
|
|
人中狼 发表于 2017-6-2 10:24 非常感谢 |
|
|
|
|
|
帮顶一下楼主加油
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
384 浏览 0 评论
398 浏览 0 评论
405 浏览 0 评论
780 浏览 0 评论
RT-Thread与英飞凌(infineon)合作得板子PSOC 6 板子学习
741 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16996 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-11 14:10 , Processed in 0.982292 second(s), Total 80, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
8879