打印

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

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

相关帖子

沙发
maychang| | 2007-5-9 11:59 | 只看该作者

汇编器有很多种,支持的伪指令有多有少,各不相同。既然REG伪指令出问题,检查一下你的汇编器是否支持这条伪指令。
这条伪指令既然与EQU功能相同,使用这条伪指令好像必要性不大。直接用EQU就挺好。
同样,检查是否支持MOD这个标志符。这个标志符好像也用处不大,没有听说过。

51单片机中有四组工作寄存器,名称都是R0-R7.。但同一时刻只能使用一组,由PSW中的两位指示当前工作寄存器组。
工作寄存器并没有什么特殊功能,但使用工作寄存器的指令短,所以快。一般情况,工作寄存器用于存放当前模块暂时使用而不必长时间保存供其它模块使用的数据。
一般是在进入中断程序后切换工作寄存器组,这样可以避免保护各工作寄存器的麻烦。不过需要注意,一定要将PSW寄存器入栈保护,退出中断时PSW还要出栈。

DA   A指令用于数制转换、ASCII码转换、十进制运算等。

使用特权

评论回复
板凳
conwh| | 2007-5-9 19:55 | 只看该作者

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

能够通用的尽量使用通用指令

使用特权

评论回复
地板
ayb_ice| | 2007-5-10 08:23 | 只看该作者

用bit...

使用特权

评论回复
5
qiangdao|  楼主 | 2007-5-11 18:16 | 只看该作者

谢谢大家咯

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

162

帖子

1

粉丝