我是菜鸟,程序编译出问题,望高手前辈们指点

[复制链接]
2296|4
 楼主| qiangdao 发表于 2007-5-9 11:27 | 显示全部楼层 |阅读模式
我才刚刚接触单片机,都是自学的。在实际中遇到很多问题,我知道只有站在巨人的肩上才能看得更远;我希望前辈给我这个雏鸟指点指点◎!<br />我用伟福6000的软件模拟器编译,<br />mode&nbsp;equ&nbsp;00h<br />count&nbsp;equ&nbsp;5000<br />times&nbsp;equ&nbsp;200<br />disp&nbsp;&nbsp;reg&nbsp;&nbsp;p1<br />(编译后说的是操作码错误,我不明白,我看书书上说reg指令于equ指令类似,只不过右边的是寄存器,输出或输入端口,储存器地址;如果指令正确的话那么编译以后也应该没有问题,可是编译后确说是操作码错误,望指教!)<br />led&nbsp;reg&nbsp;p0.7<br />(出现上面的问题后,我不用reg&nbsp;指令,直接用p0.7和p1)<br />org&nbsp;30h<br />jmp&nbsp;start<br />start:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;disp,#0ffh(改为:mov&nbsp;p1,#0ffh)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clp&nbsp;led(改为:mov&nbsp;p0.7,#0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;tmod,#mode<br />loop:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(加上:clr&nbsp;p0.7用来弥补下面因修改clp&nbsp;led&nbsp;后程序失去的功能,即当r3超过60后,改变p0.7的状态)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r1,#0h<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r3,#60<br />next:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r0,#times<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;a,r1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;da&nbsp;a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r1,a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;p1,a<br />again:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;th0,#(8192-count)/32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;thl,#(8192-count).mod.32<br />[&nbsp;在改完程序后再编译,程序乃还有问题,问题是说为定义标识符:mod&nbsp;;此处我也不明白望高手指教!]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setb&nbsp;tr0<br />wait:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jbc&nbsp;tf0,timeout<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp&nbsp;wait<br />timeout:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;tr0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;djnz&nbsp;r0,again<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;r1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;djnz&nbsp;r3,next<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpl&nbsp;led(改为setb&nbsp;p0.7)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp&nbsp;loop<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;<br />最后我想问问你们对于da指令的应用,什么时候需要切换到寄存器组?再单片机中寄存器组有那些,功能是都是什么!<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
maychang 发表于 2007-5-9 11:59 | 显示全部楼层

汇编器有很多种,支持的伪指令有多有少,各不相同。既然REG伪指令出问题,检查一下你的汇编器是否支持这条伪指令。<br />这条伪指令既然与EQU功能相同,使用这条伪指令好像必要性不大。直接用EQU就挺好。<br />同样,检查是否支持MOD这个标志符。这个标志符好像也用处不大,没有听说过。<br /><br />51单片机中有四组工作寄存器,名称都是R0-R7.。但同一时刻只能使用一组,由PSW中的两位指示当前工作寄存器组。<br />工作寄存器并没有什么特殊功能,但使用工作寄存器的指令短,所以快。一般情况,工作寄存器用于存放当前模块暂时使用而不必长时间保存供其它模块使用的数据。<br />一般是在进入中断程序后切换工作寄存器组,这样可以避免保护各工作寄存器的麻烦。不过需要注意,一定要将PSW寄存器入栈保护,退出中断时PSW还要出栈。<br /><br />DA&nbsp;&nbsp;&nbsp;A指令用于数制转换、ASCII码转换、十进制运算等。
conwh 发表于 2007-5-9 19:55 | 显示全部楼层

同上,在伪指令的MOD可能前面和后面没有"."

能够通用的尽量使用通用指令
ayb_ice 发表于 2007-5-10 08:23 | 显示全部楼层

用bit...

  
 楼主| qiangdao 发表于 2007-5-11 18:16 | 显示全部楼层

谢谢大家咯

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

162

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部