|
楼主 |
发表于 2021-3-31 19:38:47
|
显示全部楼层
请教您一个问题,这是一断书上的串行通信代码
/**
串行口发送/接收10位信息(方式1),第0位是起始位,1-8位是数据位最后是停止位
甲机把以78H、77H单元的内容为首地址,以76H、75H单元中内容减1为末地址的数据块
内容通过串行口向乙机发送
设8051内部RAM中
(78H)=20H:首地址为2000H
(77H)=00H:
(76H)=20H:末地址为2020H
(75H)=20H
在接收收程序中有,判断接收的是地址还是数据,那么发送的程序中,如果看发送的是数据还是地址
**/
ORG 0000H
//LJMP TRANS//这样能进行吗,如何改,这是教材上的,目的是什么
ORG 001BH
LJMP T1INT
ORG 0023H
LJMP SINT
ORG 1000H//我在开发板上试了,用1000H报错
ANL TMOD,#0FH
ORL TMOD,#10H
MOV TL1,#0FAH
MOV TH1,#0FFH
MOV PCON,#80H
SETB EA;开总中断
CLR ES
SETB ET1
SETB PT1
CLR PS
SETB TR1
CLR TI
MOV SCON,#40H
MOV SBUF,78H
WAIT: JNB TI,WAIT
CLR TI
MOV SBUF,77H
WAIT2: JNB TI,WAIT2
CLR TI
MOV SBUF,76H
WAIT3:JNB TI,WAIT3
CLR TI
MOV SBUF,75H
WAIT4:JNB TI,WAIT4
CLR TI
SETB ES
//.......其它程序
T1INT: CLR TR1
MOV TL1,#0FAH
MOV TH1,#0FFH
SETB TR1
RETI
SINT: PUSH DPL
PUSH DPH
PUSH ACC
MOV DPH,78H
MOV DPL,77H
MOVX A,@DPTR
CLR TI
MOV SBUF,A
MOV A,DPH
CJNE A,76H,END1
MOV A,DPL
CJNE A,75H,END1
CLR ES
CLR ET1
CLR TR1
ESCOM: POP ACC
POP DPH
POP DPL
RETI
END1: INC 77H
MOV A,77H
JNZ END2
INC 78H
END2: SJMP ESCOM
END
-----------------------------------
以下是接收程序
RECIVE: ORG 0000H
LJMP RECIVE//我认为,程序会停在这个地方,这样写的目的是什么
ORG 001BH
LJMP TINT
ORG 0023H
LJMP RSINT
ORG 0100H
ANL TMOD,#0FH//高位置0,低位不变
ORL TMOD,#10H//高位末位+1,低位不变
MOV TL1,#0EAH
MOV TH1,#0FFH
MOV PCON,#80H//SMOD=1
SETB EA
SETB ES
SETB ET1
SETB PT1//定时器中断级别高于串行中断
CLR PS
SETB TR1//启动定时器1
MOV SCON,#50H//0101,SM1=1,SM2=0,REN=1
CLR B.0//累加器B,的0位置0
MOV 70H,#78H
.....
TINT: CLR TH1
MOV TL1,#0EAH
MOV TH1,#0FFH
SETB TR1
RETI
RSINT: PUSH DPL
PUSH DPH
PUSH Acc
JB B.0,DATA//判断接收的是地址(B.0=0)还是数据(B.0=1)
MOV R0,70H
MOV A,SBUF
MOV @R0,A
DEC 70H
CLR RI
MOV A,#74H
CJNE A,70H,RETURN
SETB B.0//b.0=1表示地址已经接收完
RETURNOP ACC
POP DPH
POP DPL
RETI
DATA: MOV DPH,78H//接收的数据转入此入
MOV A,SBUF
MOVX @DPTR,A
CLR RI
INC 77H
JNZ END2
INC 78H
END2:MOV A,76H
CJNE A,78H,RETURN
MOV A,75H
CJNE A,77H,RETURN
CLR ES
CLR ET1
CLR TI
SETB PSW.5//第五位是F0,说是能控制程序的流向,为1和0分别起什么作用
AJMP RETURN
end |
|