在EM78系列单片机内部没有异步串行口,所以必须用软件来完成这个工作。在很多实际应用中,我们已经采用了软件实现RS232标准的异步串行通信,结果证明工作非常稳定可靠。用软件完成串行通信,降低了芯片的硬件成本。
下面给出RS232的发送和接收的程序和流程,供读者参考。

图5.8 RS232的发送和接收流程
程序清单如下:
;定义
STATUS EQU 3
P5 EQU 5
P6 EQU 0X06
BUFFER EQU 0X11
COUNT EQU 0X12
BITNUM EQU 8 ;每字节数据为8位
ORG 0
JMP MAIN
;主程序
MAIN: MOV A,@0X40 ;置P6.5为输出口,P6.6为输入口
IOW P6
CLR BYTE
MOV A,@BITNUM
MOV COUNT,A ;传送数据为每字节8位
;以下为接收
TEST: JBC P6,6 ;检测是否收到起始位
JMP TEST ;未测到
CALL DELAY ;测到起始位,下面准备接收
CALL DELAY ;延时
START: JBC P6,6
BS BYTE,7 ;收到高电平
JBS P6,6
BC BYTE,7 ;收到低电平
DJZ COUNT
JMP L1 ;一个字节未收完,继续收下一位
CALL DELAY
JMP TRANSMIT ;一个字节收完,准备发送
L1: RRC BYTE
CALL DELAY
JMP START
;以下为发送
TRANSMIT:
MOV A,@BITNUM
MOV COUNT,A
BEGIN: BC P6,5 ;发送起始位
CALL DELAY1 ;延时
L2: RRC BYTE ;发送一位数据
JBC STATUS,C
BS P6,5
JBS STATUS,C
BC P6,5
CALL DELAY1 ;延时
DJZ COUNT ;一个字节发送完否?
JMP L2 ;否,继续发送下一位
BS P6,5 ;是
CALL DELAY1
JMP TEST ;继续循环
;延时子程序
DELAY: MOV A,@23
MOV BUFFER,A
LOOP: DJZ BUFFER
JMP LOOP
RET
DELAY1: MOV A,@30
MOV BUFFER,A
LOOP1: DJZ BUFFER
JMP LOOP1
RET
hehe我正要呢 谢谢 我也在要完善一个串口程序呢