请问13楼,你说的编程序是对串口的SBUF数据缓冲器进行操作吧?
串口接收程序
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP COM_INT
ORG 1000H
MAIN: MOV SP,#53H ;设置堆栈指针
ACALL RECEL ;调用接收子程序
SJMP $
RECEL: MOV R0,#78H ;设置地址接收区
MOV TMOD,#20H ;设置定时器/计数器工作方式
MOV TH1,#0F3H ;设置波特率
MOV TL1,#0F3H
MOV PCON,#80H ;波特率加倍
SET TR1 ;开计数器
MOV SCON,#50H ;设置串行口工作方式
MOV IE,#90H ;开中断
CLR F0 ;清标志位
CLR 7FH
WAIT: JNB 7FH,WAIT ;查询标志位等待接收
RET
COM_INT: PUSH DPL ;压栈,保护现场
PUSH DPH
PUSH ACC
CLR RI ;清接收中断标志位
JB F0,R_DATA ;判断接收的是数据还是地址F0=0为地址
MOV A,SBUF ;接收地址
MOV @R0,A ;将地址桢送指定的寄存器
DEC R0
CJNE R0,#74H,RETN
SETB F0 ;置位标志位,地址接收完毕
RETN: POP ACC ;出栈,恢复现场
POP DPH
POP DPL
RETI ;中断返回
R_DATA: MOV DPH,78H ;数据接收程序区
MOV DPL,77H
MOV A,SBUF ;接收数据
MOVX @DPTR,A ;送指定的数据存储单元中
INC 77H ;地址加1
MOV A,77H ;判断当前接收的数据的地址是否向高8位进位
JNZ END2
INC 78H
END2: MOV A,76H
CJNE A,78H,RETN ;判断是否为最后一桢数据,不是则继续
MOV A,75H
CJNE A,77H,RETN ;是最后一桢数据则清各种标志位
CLR ES
CLR EA
SETB 7FH
SJMP RENT
END |