单片机 汇编程序 串口通信

单片机 汇编程序 串口通信,第1张

HERE: AJMP HERE

SINT: MOV P1,R0

JB RI,RECV

JB TI,SEND

AJMP HERE

中断里面直接用这种方式直接跳到主程序,我以前还是真没试过,不过估计能行吧。 我一直用RETI 返回堆栈地址位置的。

但下面这地方肯定有错的,就是执行MOV SBUF,A 后没有等待!!

正确的顺序是: CLR TI 清发送标记

MOV SBUF,A 发送

JNB TI,$ 这里是如果TI没有被置1就等待,因为送数可能还没有完成。。就去执行别的动作,可能会有问题。

接收也一样要等待:

MOV A,SBUF

JNB RI,$ 等待接收完成标志。

另外:

CPL P1.7 有问题,我猜你是用P1.7来观察接收次数,

但由于CPL P1.7取反命令是读一下P1.7再取反输出的,如果你的p1.7外接电路不科学,不合理,可能会出现你每次不管发1,还是发0,p1.7都是低电平,比如你将p1.7直接接在npn三管基极就会一直是0V或0.7V , P1.7的读入值会总为0,CPL 输出会总是为1

你可以用内部(非P口的位地址过度一下),比如: CPL 01H

MOV C,01H

MOV P1.7,C

你先试验吧。。。

ORG 0000H

SJMP 0050H

ORG 0023H

LJMP S_INT

TAB:DB 20H,49H,20H,47H,45H,54H,20H,'NULL'

ORG 0050H

MOV TMOD,#20H

MOV TH1,#0FDH

MOV TL1,#0FDH

SETB TR1

SETB SM1

CLR SM0

SETB EA

SETB ES

MOV R0,#30H

MOV A,#1H

MAIN:SETB REN

ACALL DELAY

JNZ MAIN

MOV R2,#0

MOV DPTR,#TAB

MOV R7,#7

SEND:MOV A,R2

MOVC A,@A+DPTR

CLR ES

MOV SBUF,A

JNB TI,$

CLR TI

INC R2

DJNZ R7,SEND

MOV R0,#30H

SHOW:MOV A,@R0

MOV SBUF,A

JNB TI,$

CLR TI

INC R0

CJNE A,#40H,SHOW

SETB ES

MOV A,#1

MOV R0,#30H

SJMP MAIN

S_INT:CLR RI

MOV A,SBUF

MOV @R0,A

CJNE A,#40H,NEXT

MOV A,#0

NEXT:INC R0

RETI

DELAY:MOV 7DH,#200

LOOP1:MOV 7EH,#40

DJNZ 7EH,$

DJNZ 7DH,LOOP1

RET

END

这个是方式一的


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7752362.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存