汇编程序编译出错
我的一个和上位机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 编辑 ] 哦,原来是汇编,真的是无能为力了,汇编指令都忘光光了,如果是C就可以帮上点忙!真的抱歉,看有没有熟汇编的朋友看一下,谢谢! 现在正在C51,汇编也差不多忘光了 貌似jb是不能这么用的,它只能对某些特定的bit位进行判断,你要先把这个端口的值送入到那里,好像是c什么的,就是单片机里的位寄存器:L 很多年前的事情了,说的不一定对
就如32汇编下有个跳转判断是JCXZ,就是对cx寄存器判断的。。所以判断前你要用move指令把你的变量传送到cx里 在判断P1.1的状态前即DENGDAI:JB P1.1,DENGDAI前要对P1口置位.mov p1,#0FFH. 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]