在很多需要需要提高串口通信距离的应用场合,RS232,可以很好地满足要求。
RS232的一个典型应用就是实现单片机与PC的串行通信,二者的电气连接就是基于RS232接口标准,下面给出了PC基于MAX232与单片机的串行通信接口电路设计。
单片机通过UART扩展RS-232通信接口程序设计主要利用单片机UART的工作方式2,通过查询接收中断位R1和发送完毕中断位TI实现数据的可靠传输。通信流程图如下
程序
*****************************************************************************
主程序设置UART工作模式,串口中断服务程序用于收发数据,如果接收 0FF 表示上位机需要联机信号,单片机发送 0FFH作为应答信号,如果接收到 数字 1~ n,表示相应的功能;这里,如果收到 1 ,则单片机向计算机发送字符 'h',如果收到 2 ,则单片机向计算机发送字符 'e';如果收到其他的数据,则发送 'j
****************************************************************************
ORG 0000H
LJMP MAIN
ORG 0023H 串行中断服务程序
LJMP SINT 串行中断服务程序串行中断服务程序
ORG 0030H
MAIN:MOV SP,#70H ;设置堆栈
LCALL COMRE 串口初始化
SJMP $
//串口初始化,;设置串行口工作方式1,定时器1作为波特率发生器,波特率设置为 2400;
COMRE:MOV TMOD,#20H 设置定时器T1工作方式2
MOV TH1,#0F3H 定时器重装值
MOV TL1,#0F3H 定时器计数初值,波特率 2400
SETB EA 允许总的中断
SETB ES ;允许串行中断
MOV PCON,#00H 波特率不倍增
MOV SCON,#50H 设置串口工作方式1,REN = 1 允许接收
SETB TR1 定时器开始工作
RET
SINT: CLR ES ;禁止串行中断
CLR RI ;清除接收标志位
MOV A,SBUF 从缓冲区取出数据
MOV DPTR,#TABLE
CJNE A,#0FFH,IN1 检查数据
MOV SBUF,#0FFH 收到联机信号,发送联机信号
JNB TI,$ 等待发送完毕
CLR TI 清除发送标志
SETB ES 允许串行中断
RETI
IN1: CJNE A,#01H,IN2 如果收到1
MOVC A,@A+DPTR
MOV SBUF,A ;发送 'h'
JNB TI,$ 等待发送完毕
CLR TI 清除发送标志
SETB ES 允许串行中断
RETI
IN2: CJNE A,#02H,IN3 如果收到2
MOVC A,@A+DPTR
MOV SBUF,A ;发送 'e'
JNB TI,$ 等待发送完毕
CLR TI 清除发送标志
SETB ES 允许串行中断
RETI
IN3: MOV A,#03H
MOVC A,@A+DPTR
MOV SBUF,A ;发送 'j'
JNB TI,$ 等待发送完毕
CLR TI 清除发送标志
SETB ES 允许串行中断
RETI
TABLE:DB ‘2’ ‘h’ ‘e’ ‘j’
END |