单片机串口通信 汇编语言proteus仿真

用汇编程序编程通过串行实现将甲机的片内RAM中的30H-3FH单元的内容传送到乙机的片内RAM中40H-4Fh。甲乙两机都选择1:8位异步通信方式,最高位用作奇偶检校,波特率为1200bps,甲发已接,因此甲机的串口控制字为40H,乙机的串口控制字为50H
。由于选择的方式1,波特率有定时计数器T1的溢出率和电源控制寄存器PCON中的SMOD位决定,则需对定时器/计数器初始化。设SMOD=0,甲乙两机的震荡频率为12MHZ,由于波特率1200,定时/计数器T1选择方式2,初值为E6H

发送程序:
ORG 0000H
AJMP TSTART
ORG 0023H
AJMP WAIT

ORG 0030H

TSTART:MOV TMOD,#20H;
MOV TL1,#0E6H;
MOV TH1,#0E6H
MOV PCON,#00H;
MOV SCON,#40H;
MOV A,#0AAH
MOV 30H,A;把#AA送到30H中。
MOV R0,#30H
MOV R7,#1H;
SETB TR1;
LOOP:MOV A,@R0
MOV C,P
MOV ACC.7,C
MOV SBUF,A

WAIT:JNB TI,WAIT
CLR TI
INC R0
DJNZ R7,LOOP
RET;(1)

END

接受程序:
ORG 0000H
AJMP RSTART
ORG 0023H
AJMP WAIT

ORG 0030H
RSTART:MOV TMOD,#20H;
MOV TL1,#0E6H;
MOV TH1,#0E6H
MOV PCON,#00H

MOV R0,#40H;
MOV R7,#1H;先试验1帧
SETB TR1;启动定时器。
LOOP:MOV SCON,#50H;方式1,允许接收。

WAIT:JNB RI,WAIT;中断程序,如果RI=1证明一帧接受完了。
MOV A,SBUF;
MOV C,P
JC ERROR
ANL A,#7FH
MOV @R0,A
MOV P1,A;
INC R0;这一句没意义了,因为只传一帧。
DJNZ R7,LOOP

RET
ERROR:MOV P2,#0aah;出错就把P2赋值AA.
RET(2)
BB:MOV P1,A
SJMP BB;死循环,显示传过来的数据。

END
问题是:为何总是出现ERROR的情况?就是P2,始终#0AA?还有(1),(2)的ret到底返回到什么地方?期待高手给予讲解!!

第1个回答  2009-03-26
900
第2个回答  2009-03-26
加409031101,可以讨论下
相似回答
大家正在搜