编写一个发送程序:采用串口工作方式1将8051单片机P1口采集的8位数据实时串行传输。无需奇偶校验,采用中断方式。波特率为9600波特(晶振频率为11.0592MHz)。
ORG 0000H
LJMP MAIN
ORG 0023H ;串行口中断入口地址
LJMP INT_TI
ORG 0030H
MAIN:MOV SCON,#40H ;串行口工作方式1,REN发送时取0,接收时取1
MOV PCON,#00H ;SMOD置0
MOV TMOD,#20H ;定时计数器工作方式2
MOV TH1,#0FDH ;设置溢出率初值
MOV TL1,#0FDH
SETB TR1 ;TCON按位寻址,打开定时计数器
MOV IE,#90H ;开启中断使能
MOV RO,#90H ;P1口首地址
MOV R2,#08H ;计数
LCALL SEND
SJMP $
INT_TI:CLR TI ;串行接口控制器发送中断标志
INC R0 ;地址加1
DJNZ R2,CONT
CLR ES;关闭中断
JIESHU: RETI
CONT:LCALL SEND ;调用中断传输子程序
SJMP JIESHU ;传输完成后结束程序
SEND:MOV A,@R0 ;读入P1口采集的数据
MOV SBUF,A ;串行口发送数据
RET
END
编写一个接收程序:8051单片机采用串口工作方式1接收8位串行数据,由P1口输出。无需奇偶校验,采用中断方式。波特率为9600波特(晶振频率为11.0592MHz)。
ORG 0000H
LJMP MAIN
ORG 0023H ;串行口中断入口地址
LJMP INT_RI
ORG 0030H
MAIN:MOV SCON,#50H ;串行口工作方式1
MOV PCON,#00H ;SMOD置0
MOV TMOD,#20H ;定时计数器工作方式2
MOV TH1,#0FDH ;设置溢出率初值
MOV TL1,#0FDH
SETB TR1 ;打开定时计数器
MOV IE,#90H ;
MOV RO,#90H ;P1口首地址
MOV R2,#08H ;计数
SJMP $
INT_RI:CLR RI ;串行接口控制器接收中断标志
MOV A,SBUF ;串行口接收数据
INC R0 ;地址加1
DJNZ R2,JIESHOU
JIESHOU:MOV @R0,A;串行口接收数据放入P1
DJNZ,R2,ERR
CLR ES
ERR: RETI
END
如果需要加上奇偶校验,只需奇偶校验位TB8取1,并在中断服务子程序中添上:
INT_RI:MOV A,SBUF ;以接收数据结束为例
MOV C,P
JC LP0
JB RB8,ERR ;RB8奇偶校验标志位
SJMP JIESHOU
LP0:JNB RB8,ERR