这一期,我们将一起来学习一下PIC单片机如何与PC机进行通信,一起来完成一个简单的RS232通信实例,我们不做太多的理论,从实例出发,相信能够给大家一个比较通俗、透彻地认识,掌握了它的原理,那你就可以编出任何和PC机进行通信的程序了。
前几期,我们学习和介绍的内容都是以单机的形式,即所有的功能都是在一块增强型PIC实验板上得以实现。当单片机技术具体应用到工厂、企业及各类工业、民用领域中,它肯定要与外部设置作数据传输,其交互性也使得单片机的应用越来越广泛,我们可以利用它来传数据,传控制命令等等。因此,单片机与PC机的通信是我们学习单片机技术所经历的必要环节,由此,也使我们的学习更具趣味性。
下面我们一起来完成一个用单片机从串行口接收PC机数据,并通过板上LED发光管显示出来。
先介绍一下串口通信基本知识。目前较为常用的串口有9针串口(DB9)和25针串口(DB25)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,本文只涉及到最为基本的接法,且直接用RS232相连。串口引脚定义如图1所示。
9针串口(DB9)
25针串口(DB25)
针号
功能说明
缩写
针号
功能说明
缩写
1
数据载波检测
DCD
8
数据载波检测
DCD
2
接收数据
RXD
3
接收数据
RXD
3
发送数据
TXD
2
发送数据
TXD
4
数据终端准备
DTR
20
数据终端准备
DTR
5
信号地
GND
7
信号地
GND
6
数据设备准备好
DSR
6
数据准备好
DSR
7
请求发送
RTS
4
请求发送
RTS
8
清除发送
CTS
5
清除发送
CTS
9
振铃指示
DELL
22
振铃指示
DELL
图1 DB9和DB25的常用信号脚说明
我们来看一下本次实验的电路图,如图2所示,即增强型PIC实验板实现串口通信及数码管显示的电路部分。图2中MAX232芯片起到RS232与TTL电平转换的作用,我们通过9芯串口与PC机相连。
图2 串口通信电路原理图
下面是我们完成本次实验的源程序代码,PC机向串口发送数据,控制增强型PIC实验板上相应的LED发光管显示。如:向串口发送数据“01”,板上D10发光管点亮;向串口发送数据“02”,板上D11发光管点亮;向串口发送数据“03”,板上D12发光管点亮......以此类推显示各路发光管。
#include //包含单片机内部资源预定义
unsigned char tab[]={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
unsigned char recdata;
//延时子程序
void delay()
{
unsigned int k;
for(k=0;k<300;k++);
}
//显示子程序
void display(unsigned int k)
{
PORTC=tab[k%10];
PORTA=0xFD; //选通数码管4
delay();
PORTC=tab[k%100/10];
PORTA=0xFE; //选通数码管3
delay();
PORTC=tab[k%1000/100];
PORTA=0xF7; //选通数码管2
delay();
PORTC=tab[k/1000];
PORTA=0xFB; //选通数码管1
delay();
}
//---------------------------------------------
//主程序
void main()
{
// TRISC=0Xff; //设置C口方向全为输出
TRISC=0xC0;
TRISA=0XC0; //RA0--RA5为输出
SPBRG=0X19; //设置波特率为9600BPS
TXSTA=0X24; //使能串口发送,选择高速波特率
RCSTA=0X90; //使能串口工作,连续接收
RCIE=0X1; //使能接收中断
GIE=0X1; //开放全局中断
PEIE=0X1; //使能外部中断
while(1) //等待中断
{
switch(recdata)
{
case 0x01:PORTC=0x01;break;
case 0x02:PORTC=0x02;break;
case 0x03:PORTC=0x04;break;
case 0x04:PORTC=0x08;break;
case 0x05:PORTC=0x10;break;
case 0x06:PORTC=0x20;break;
}
delay();
}
}
//--------------------------------------------
//中断函数
void interrupt usart(void)
{
if(RCIF) //判断是否为串口接收中断
{
RCIF=0;
recdata=RCREG; // 接收数据并存储
TXREG=recdata; // 返送接收到的数据 //把接收到的数据发送回去
}
}
现在我们已经将程序写好,通过“PIC仿真烧写器”完成程序的调试工作,下面我们要做的就是用串口线将增强型PIC实验板和PC机相连起来,同时给实验板接上电源,然后就是通过PC机软件来发数据了,要在PC机上向串口发送数据一定要借助相应软件,打开光盘内附带的串口调试软件,它设置方便、灵活,界面简洁明。因为我们得告诉实验板来显示哪些数字,程序的功能是发送十六进的“1”、“2”、“3”......等字符,增强型PIC实验板收到数据后点亮对应的LED发光管,所以我们得在软件发送区内填上我们所需要发送的数字,如图3所示。
图3
串口调试软件中,设置参数如下:串口:COM1;波特率:9600;校验位:无;数据位:8位;停止位:1位;发送内容:04
当我们点击“手动发送”按钮后,我们可以看到增强型PIC实验板上的第4个LED发光管已点亮,如图4所示。当然,我们也可以选择“自动发送”,即每隔一定的时间,由软件自动发送“发送缓冲区”内的数据,时间周期可以在软件界面中设置。
图4
现在,你已经可以自由发挥来接收PC机发过来的数据了,只要发挥你的想象力,定义好PC机和单片机两端的数据通信协议,你可以做出任何通过电脑来对单片机进行控制的程序,实现各种各样的数据传输,远程控制功能,比如通过PC机来控制液晶显示、控制步进电机的转动、控制蜂鸣器奏乐等等,您也可以将本期所讲的知识与前几期所讲的关联起来,完成功能更多,更实用的具体应用实例。因此,到本期的学习,我们已经可以将单片机与PC相连,借助PC机强大而灵活的功能,就可以为我们解决各类实际生产及应用型问题提供了方便。这一期的内容我们就介绍到这里,增强型PIC实验板更多的学习内容,我们将在以后几期陆续为大家作介绍,祝大家学习顺利。
以下是部分实验源程序演示实验视频录像
增强型PIC实验板RS232串口通信控制LED显示实验录像
>>>点击此处下载RM视频文件 ——05月12日 制作加入