- 壹零零单片机©版权所有 2008-2025 粤ICP备17151077号
关于SN单片机与PC机的RS232串口通信
使用一个带有 RS232 功能的 SN8F2765(64,62) 芯片,就可以轻易与 PC 机进行 RS232 通信.
在初始化程序里,调用串口初始化程序: Z_CSH_UARTS,其中,接收使用中断方式.
;========================================================
Z_CSH_UARTS:;//使用16/4M内部RC振荡器,也可以使用外部晶体振荡器.
ZB0 FURXPEN ; 禁止UART RX 奇偶校验位功能。
ZB0 FUTXPEN ; 禁止UART TX 奇偶校验位功能。
;设置UART 波特率。
M1M URRX,#5; 设置UART 前置分频器URS[2:0]。
M1M URCR,#0E7H;设置UART波特率8位缓存器。#0E6H-----内部振荡器:这个不行!
;M1M URCR,#0E6H;设置UART波特率8位缓存器。#0E6H-----内部振荡器:这个不行!
; M1M URCR,#0F3H ;波特率=19200
ZB1 FURXEN ; 使能UART RX 功能和引脚。
ZB0 FURXIRQ ; 清UART RX 中断标志。
ZB1 FURXIEN ; 使能UART RX 中断功能。
B_CSH_TX:
ZB0 FUTXPEN ; 禁止UART TX 奇偶校验位功能。
ZB1 FUTXEN ; 使能UART TX 功能和引脚。
ZB0 FUTXIRQ ; 清UART TX 中断标志。
ZB0 FUTXIEN
ZB1 FGIE
RET
;---------------------------------------------------
上面初始化串口程序已经准备了接收与发送都有效的功能.
接着,准备一段子程序,实现"即收即发",就是把PC 机发送来的内容立即发送返回给PC机.
接收时,如果需要保留接收的内容,则安排好对应的 RAM 空间地址,例如:保存到 100H 开始的地方.
如果需要,还可以约定长度.例如:23 个字节.
还可以在接收全部字节后,返回一个 OK 给 PC 机
即收即发子程序如下:
;============================================================
B_ISR_UART_RX:;即收即发----这是串口接收中断子程序
BS1 FURXIRQ
RETI
ZB0 FURXIRQ
BS0 FUFMER;1=UART frame 错误
RETI
BS0 FURXBZ ; 检查URXBZ 位
JMP $-1
ZMN H,#1 ;保存到 100H 开始的地方
ATM #RX0
ADD A,RXJS
MTA L
M1M @HL,URXD
INCM RXJS
COM_ @HL,#24H; 是否超过 23 个字节.
JMP @F
ZM0 RXJS
MOV A,#'O';接收完成后返回一个 OK 给 PC 机
CALL Z_TX1Z
MOV A,#'K'
CALL Z_TX1Z
MOV A,#21H ;=! 号
CALL Z_TX1Z
ZB0 FURXIEN ; 使能UART RX 中断功能。
ZB1 FRXWC ;接收完成
RETI
@@:
MOV_ UTXD,URXD
RETI
;-----------------------------------------------------
Z_TX1Z:
MTA TEM0
JMP B_TX_1M;发送1字节
;*******************************************************************
之后,启动串口软件,选择波特率=9600,禁止奇偶校验,使用字符格式,在发送窗口输入:
dfmg:set ;//任意识别字符,这里使用了dfmg:set
然后,按照下面格式任意4位数字写满23行:
0=*****
1=*****
......
22=****
23=****
$ ;结束符号,方便单片机检测是否接收全部正确完成.
点击串口的"发送"
就会在串口收到返回的同样字符.如图:
如果需要后续处理,可以根据标志 FRXWC=1 进行其它子程序去处理.
是不是很方便?
仅供参考!