读书人

关于51单片机的一个作业题解决办法

发布时间: 2013-06-25 23:45:42 作者: rapoo

关于51单片机的一个作业题
同学选了个关于选修课,问我个作业题,当时告诉我是用汇编写的,原本以为学过没啥问题的,但是一看差异太大,所以贴出来问问怎么搞的。


阅读程序,给每条指令加上注释,并总结出该程序段实现的功能。


P1_0BITP1.0
P1_7BITP1.7
ORG0000H
LJMPMAIN
ORG000BH
LJMPTIME0
ORG001BH
LJMPCOUNT1
MAIN: CLRP1_7
CLRP1_0
MOVTMOD,#61H
MOVTH0,#3CH
MOVTL0,#0B0H
MOVTH1,#0ECH
MOVTL1,#0ECH
MOVIP,#08H
SETBET0
SETBET1
SETBEA
SETBTR0
SETBTR1
DELAY: SJMPDELAY
TIME0: CPLP1_0
MOVTH0,#3CH
MOVTL0,#0B0H
RETI
COUNT1:CPLP1_7
RETI
END

[解决办法]
LZ还算是诚实,我给一个大概的,具体的还得请LZ的同学去细查书籍。


P1_0BITP1.0
P1_7BITP1.7;定义P10和P17口
ORG0000H ;起始地址0000,复位后,就会跳到这里执行
LJMPMAIN ;跳到MAIN标号,体系结构决定的,预留前三个字节指令的意义
ORG000BH ;定时器0中断
LJMPTIME0 ;中断服务函数
ORG001BH ;计数器1中断
LJMPCOUNT1 ;中断服务
MAIN: CLRP1_7
CLRP1_0 ;把IO上对应的这两位都清0
MOVTMOD,#61H
MOVTH0,#3CH
MOVTL0,#0B0H
MOVTH1,#0ECH
MOVTL1,#0ECH
MOVIP,#08H ;以这段为对定时器0和定时器1的配置,具体的计算,找书看看吧
SETBET0
SETBET1 ;使能两个中断
SETBEA ;开全局中断
SETBTR0
SETBTR1 ;启动两个定时器
DELAY: SJMPDELAY ;死循环


TIME0: CPLP1_0 ;定时中断触发后,P10脚取反
MOVTH0,#3CH
MOVTL0,#0B0H ;重置定时器
RETI ;中断返回
COUNT1:CPLP1_7 ;计数中断触发后.P17脚取反
RETI ;中断返回
END



大概可能就是两个LED什么的外设分别接到P10和P17脚

定时器控制P10的闪烁,定时到一次就亮或灭

计数器控制P17的闪烁,计数够一次就亮或灭
[解决办法]
引用:
DELAY: SJMP    DELAY                ;死循环

这句为什么是在自己单条指令一直循环,而不是包括一个代码段


因为这个死循环不需要包含任何代码段,就能够完成要求完成的功能。
这个程序要完成的功能如 版主 所说:
1.定时器控制P10的闪烁,定时到一次就亮或灭
2.计数器控制P17的闪烁,计数够一次就亮或灭
而这两个功能在两个定时器各自的中断处理代码段TIME0:和 COUNT1:中完成了
主程序只需在最后提供一个空的死循环防止程序跑飞即可!

读书人网 >单片机

热点推荐