haobo324 发表于 2007-4-11 21:20:46

汇编程序编译出错

我的一个和上位机LV通讯的单片机的程序编译老是提示一个错误,请问是怎么回事?这个地方不应该错啊?就是倒数第二句红色的部分!调了很长时间,就是不行!帮忙看看》
ORG 0000H
LJMP START
ORG 001BH
INT:
mov   a, 31H
   jnz   Goon
   dec      30H
Goon:
   dec      31H
   mov   a, 30H
   orl   a, 31H
   jnz   Exit         ; 100us *10000记数器不为 0, 返回
   
   mov      30H, #27H
   mov      31H, #10H
   CLR      TR1          ;到1S停止定时
   CLR      TR0          ;到1S停止记数
   mov      R3, TL0            ; 将记数结果送R3
   MOV      TH0,#0
   MOV      TL0,#0
   mov      TH1, #9CH
   mov      TL1, #9CH
   SETB   TR1          ;重新开始记数
   SETB   TR0          ;重新开始定时
Exit:
   reti
tongxun:      
MOV SCON,#50H ;设置成串口1方式   :说明:下位机接收到AF后,进入发送状态,把R3中的数据发送出去
MOV TMOD,#20H ;波特率发生器T1工作在模式2上
MOV TH1,#0FDH ;波特率9600
MOV TL1,#0FDH
SETB TR1      ;启动定时器T1
            ;以上完成通讯初始化设置
L3:JNB RI,L3
    CLR RI
    MOV A,SBUF
    CJNE A,#0AFH,L3
      
L2:MOV A,r3 ;将16进制的字符64发送到串口
MOV SBUF,A    ;将AF通过串口发送出去
L1:JNB TI,L1
    CLR TI
acall DELAY10
AJMP START
RET
DELAY10:      ;10毫秒延时子程序
MOV R4,#0ffh
D2:
MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
RET


START:
mov tmod,#00100110;t1定时器模式2,t0计数器模式2,最大计数255
mov th0,#0
mov tl0,#0
mov th1,#9ch;100微秒定时,初值156
mov tl1,#9ch
mov ie,#10001000;EA=1,ET1=1,允许T1中断
MOV 30H,#27H;10000次计数共一秒
MOV 31H,#10H
SETB TR1
SETB TR0
DENGDAI:
   JB P1.1,DENGDAI
    AJMP TONGXUN
END

[ 本帖最后由 haobo324 于 2007-4-11 21:21 编辑 ]

cpubbs 发表于 2007-4-11 22:53:37

哦,原来是汇编,真的是无能为力了,汇编指令都忘光光了,如果是C就可以帮上点忙!真的抱歉,看有没有熟汇编的朋友看一下,谢谢!

calmdeng 发表于 2007-4-12 09:41:16

现在正在C51,汇编也差不多忘光了

飞雨天 发表于 2007-4-13 12:39:07

貌似jb是不能这么用的,它只能对某些特定的bit位进行判断,你要先把这个端口的值送入到那里,好像是c什么的,就是单片机里的位寄存器:L 很多年前的事情了,说的不一定对

就如32汇编下有个跳转判断是JCXZ,就是对cx寄存器判断的。。所以判断前你要用move指令把你的变量传送到cx里

xsir 发表于 2007-4-19 21:06:49

在判断P1.1的状态前即DENGDAI:JB P1.1,DENGDAI前要对P1口置位.mov p1,#0FFH.

xsir 发表于 2007-4-19 21:25:58

ORG 0000H
LJMP START
ORG 001BH
LJMP INT_0
ORG 0040H
START:
mov tmod,#00100110B;t1定时器模式2,t0计数器模式2,最大计数255
mov th0,#0
mov tl0,#0
mov th1,#9ch;100微秒定时,初值156
mov tl1,#9ch
mov ie,#10001000B;EA=1,ET1=1,允许T1中断
MOV 30H,#27H;10000次计数共一秒
MOV 31H,#10H
SETB TR1
SETB TR0
MOV P1,#0FFH
DENGDAI:
   JB P1.1,DENGDAI
tongxun:      
MOV SCON,#50H ;设置成串口1方式   :说明:下位机接收到AF后,进入发送状态,把R3中的数据发送出去
MOV TMOD,#20H ;波特率发生器T1工作在模式2上
MOV TH1,#0FDH ;波特率9600
MOV TL1,#0FDH
SETB TR1      ;启动定时器T1
            ;以上完成通讯初始化设置
L3:JNB RI,L3
    CLR RI
    MOV A,SBUF
    CJNE A,#0AFH,L3
      
L2:MOV A,r3 ;将16进制的字符64发送到串口
MOV SBUF,A    ;将AF通过串口发送出去
L1:JNB TI,L1
    CLR TI
acall DELAY10
AJMP START
INT_0:
mov    a, 31H
   jnz   Goon
   dec      30H
Goon:
   dec      31H
   mov   a, 30H
   orl   a, 31H
   jnz   Exit         ; 100us *10000记数器不为 0, 返回
   
   mov      30H, #27H
   mov      31H, #10H
   CLR      TR1          ;到1S停止定时
   CLR      TR0          ;到1S停止记数
   mov      R3, TL0            ; 将记数结果送R3
   MOV      TH0,#0
   MOV      TL0,#0
   mov      TH1, #9CH
   mov      TL1, #9CH
   SETB   TR1          ;重新开始记数
   SETB   TR0          ;重新开始定时
Exit:reti
DELAY10:      ;10毫秒延时子程序
MOV R4,#0ffh
D2:
MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
RET

END
好久没写汇编了,只是大体修改了一下,没调试.我看你的程序太乱,分布不合理,还有一些小细节要注意.中断可能也有问题.
页: [1]
查看完整版本: 汇编程序编译出错