首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

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

2013-06-25 
关于51单片机的一个作业题同学选了个关于选修课,问我个作业题,当时告诉我是用汇编写的,原本以为学过没啥问

关于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:中完成了
主程序只需在最后提供一个空的死循环防止程序跑飞即可!

热点排行