8.用C语言或汇编语言实现串口通信(PC和单片机间)
上位机和下位机的主从工作方式为工业控制及自动控制系统所采用。由于PC 机分析能力强、处理速度更快及单片机使用灵活方便等特点,所以一般都将P C
机作为上位机,单片机作为下位机,二者通过RS-232或者R S-485接收、发送数据和传送指令。单片机可单独处理数据和控制任务,同时也将数据传送给PC机,由PC机对这些数据进行处理或显示
1 硬件电路的设计
MCS-51单片机有一个全双工的串行通讯口UART,利用其RXD和TXD与外界进行通信,其内部有2个物理上完全独立的接收、发送缓冲器S B UF,可同时发送和接收数据。所以单片机和PC机之间可以方便地进行串口通讯。单片机串口有3条引线:T XD(发送数据),RXD(接收数据)和GND(信号地)。因此在通信距离较短时可采用零MO DEM方式,简单三连线结构。IBM-PC机有两个标准的RS-232串行口,其电平采用的是EIA电平,而MCS-51单片机的串行通信是由TXD(发送数据)和RXD(接收数据)来进行全双工通信
的,它们的电平是T TL电平;为了PC机与MCS-51机之间能可靠地进行串行通信,需要用电平转换芯片,可以采用MA XIM公司生产的专用芯片MAX232进行转换。电路如图1所示。硬件连接时,可从MAX232中的2路发送器和接收器中任选一路,只要注意发送与接收的引脚对应关系即可。接口电路如图3.5所示。
总体设计按照整体设计思路方案绘制原理图如下所示:
2 系统软件设计
软件设计分上位机软件设计和下位机软件设计。这两部分虽然在不同的机器上编写和运行,但它们要做的工作是对应的:一个发送,另一个接收。为了保证数据通信的可靠性,要制定通信协议,然后各自根据协议分别编制程序。现约定通信协议如下:PC机和单片机都可以发送和接收。上位机和下位机均采用查询方式发送控字符和数据、中断方式接收控制字符和数据。采用RS-232串口异步通信,
1上位PC机与下位单片机异步串行通信的通信协议
2 单片机通信程序设计
单片机的数据通信由串行口完成,定时器T1作为波特率发生器,其波特率要与P C 机一致。数据的传送格式为1 位起始位、8 位数据位和1位停止位。采用中断方式发送和接收数据,定时器T1设置为工作工作模式2,串行口设置为工作方式3,由第9位判断停止。具体的程序流程图见下。
①单片机中断方式接收程序
当PC 机不发送任何数据的时候,从机单片机始终处于等待状态(P.),直到PC 机发送数据过来。由于PC 机在发送有效数据之前会加一个开始符(FFH),在有效数据之后会加一个开始符(7FH),所以单片机接收到主机发送来的FF H 之后,置RAM 存贮单元的初始地址30H 单元,用来放紧接着接收的数据,程序中还用了一个计数器C OUNT ER 来计接收到的数据位数,直到接收到7F H 为止。
单片机接收主程序MAI N 及中断服务程序STR清单如下:
COUNTE R EQU 40H
POINTEQU 41H
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP SRT
MAIN:MOV SP,#60H
MOV TMOD,#20H ;定时器T1的方式2
MOV PCON,#00H ;串行口波特率控制位
MOV TH1,#0F4H ;2400Kb/s
MOV TL1,#0F4H
MOV 30H,#15
MOV COUNTE R,#1
MOV R0,#30H ;接收数据存放区
MOV R1,#30H
SETB TR1 ;开始计数
CLR ET1 ;清定时中断
MOV SCON,#50H ;串行口控制寄存器给值
SETB EA ;开总中断
SETB ES ;开串行口中断
MOV IP,#10H
timeout on t2 timerMAIN1: ACALLDISP
SJMP MAIN1
SRT: PUSH ACC
PUSH 01H
JBC RI,GET
SJMP EXIT
GET: MOV A,SBUF
CJNE A,#0FFH,GET1 ;判断是否为开始字符,不是跳GET1 放数据存贮
MOV R0,#30H ;是开始符就置存贮区首地址30H,计数器清0并跳出中断
MOV COUNTE R,#0
SJMP EXIT
GET1: CJNE A,#07FH,GET2 判断是否为结束符,不是跳GET2 放数据存贮区MOV R5,COUNTE R ;是结束符,放发送缓存区开始字符
INC R5
MOV POINT,#30H
MOV SBUF,#255
SJMP EXIT
GET2: MOV @R0,A
INC R0
INC COUNTE R
EXIT: POP 01H
POP ACC
RETI
②单片机中断方式发送程序
由于本次设计的系统要实现的功能是将PC 机送到单片机的数据回送到PC机,所以单片机要在接收完P C机数据后立即将数据回送到PC 机。也就是说要将R AM 存贮单元的初始地址30H 单元内数据逐一发送出去。程序框图见下。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论