微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于串口通信的单片机仿真和C语言开发

基于串口通信的单片机仿真和C语言开发

时间:08-28 来源:互联网 点击:

平转换电路,即单片机的串口要外接电平转换电路芯片把与TTL兼容的CMOS 高电平表示的1 转换成RS232 的负电压信号,把低电平转换成RS-232 的正电压信号。典型的转换电路给出-9V 和+9V.

本设计中实现逻辑电平转换可以采用MAX232 芯片的转换接口:MAX232 是MAXIM公司生产的,包含两路驱动器和接收器的RS-232 转换芯片。MAX232 芯片内部有一个电压转换器,可以把输人的+5V 电压转换为RS-232 接口所需的±10V 电压,尤其适用于没有±12V 的单电源系统。与此原理相同的芯片还有MAX202、AD 公司的ADDt101 以及SIL 公司的IC1232 芯片。


图 4.6 MAX232 芯片引脚

由于 protues仿真时不需进行电平转换,所以仿真时没有用上MAX232 芯片电路,但做实物时需进行电平转换,其硬件连线图如图4.7 所示。MAX232 芯片的T1in 引脚连接AT89C51 单片机的P3.1(TXD)引脚,MAX232 芯片的R1out 引脚连接AT89C51 单片机的P3.0(RXD)引脚;MAX232 芯片的T1out 引脚连接DB9 针接口的第2 引脚,MAX232 芯片的R1in 引脚连接DB9 针接口的第3 引脚。


图4.7 电平转换硬件连接图

4.5 系统原理图

由以上模块化设计可得整个系统原理图如图4.8 所示:


图4.8 系统原理图

5 软件设计

5.1 算法设计

编写单片机异步通信程序步骤如下:

1. 设置串口工作方式

此时需对串行控制器SCON 中的SM0、SM1 进行设置。PC 机与单片机的通信中一般选择串口工作在方式1 下。

串行控制器 SCON(98H)的格式如表1 所示:

表1串行控制器格式

2. 选择波特率发生器

选择定时器1或定时器2 做为其波特率发生器。

3. 设置定时器工作方式

当选择定时器1 做为波特率发生器时,需设置其方式寄存器TMOD 为计数方式并选择相应的工作方式(一般选择方式2 以避免重装定时器初值);当选择定时器2 做为波特率发生器时,需将T2CON 设置为波特率发生器工作方式。

4. 设置波特率参数

影响波特率的参数有二,一是特殊寄存器PCON 的SMOD 位,另一个是相应定时器初值。

5. 允许串行中断

因在程序中我们一般采有中断接收方式,故应设EA=1、ES=1.

6. 允许接收数据

设置 SCON 中的REN 为1.表示允许串行口接收数据。

7. 允许定时/计数器工作

此时开启定时/计数器,使其产生波特率8. 编写串行中断服务程序。

当有数据到达串口时,系统将自动执行所编写的中断服务程序。

9. 收/发相应数据

注意的是发送操作完成需将T1清零,接收工作完成后需将R1清零。

5.2 程序设计

5.2.1 主程序设计

主程序主要完成硬件初始化、子程序调用等功能。

1. 初始化。

首先调用 LCD 初始化程序,在LCD 上显示数据RECEIVE:和TEMP is: *C.

然后调用中断及串口初始化子程序程序,把串口接收数据单元RECDATA 清零。设置寄存器SCON 的SM0、SM1 位定义串口工作方式,选择波特率发生器为定时器T1;设定定时器T1 工作方式为方式2;设置波特率参数为9600bps;允许串行中断及总中断;允许串口接收数据,定义REN=1;启动定时/计数器T1 工作,定义TR1=1.

2. 串口收发数据。

判断串口成功接收数据标志位flag_uart 是否为0,若flag_uart 为0,表明串口未接收到数据,则继续等待串口接收数据;若flag_uart 为1,表明串口成功接收或发送数据,进入串口中断服务子程序,单片机接收数据,并将串口成功接收数据标志位flag_uart 清零,调用LCD 显示接收数据子程序,在LCD 上显示单片机从串口接收到的数据,同时回传温度值给PC机显示。主程序设计流程图如图5.1 所示。


图 5.1 主程序流程图

5.2.2 串口中断服务子程序

判断串口发送标志位TI 是否为1,若TI 为1,则把数据从单片机发给PC 机,并把TI清零,中断子程序返回;若TI为0,表明RI=0,则把串口接收标志位RI清零,把串口接收缓冲器SBUF 中的数据写入串口接收数据单元RECDATA,再把该数据送到串口发送缓冲器SBUF 中,传给PC 机,置串口成功接收数据标志位RECOKBIT 为1,表明串口成功接收发送数据,最后中断子程序返回。串口收发数据中断服务子程序设计流程图如图5.2 所示。


图5.2 串口中断服务子程序

5.2.3 读温子程序

读出温度子程序的主要功能是读出RAM 中的9 字节,在读出时需进行CRC 校验,校验有错时不进行温度数据的改写。其程序流程图如图5.3 示。


图5.3 读温子程序

5.2.4 温度转换命令子程序

温度转换命令子程序主要是发温度转换开始命令,当采用12 位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如上图,图5.4 所示。


图5.4 温度转换流程图

5.2.5 计算温度子程序

计算温湿度子程序将RAM 中读取值进行BCD 码的转换运算,并进行温度值

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top