|
手把手教你使用PIC单片机做RS232串口通信实验(C语言版)——站长原创,如需引用请注明出处
这一期,我们将一起来学习一下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<pic.h> //包含单片机内部资源预定义 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实验板更多的学习内容,我们将在以后几期陆续为大家作介绍,祝大家学习顺利。
|