轻松学PIC之RS232串口通信篇

发布者:LIGANG888最新更新时间:2013-11-14 来源: dzsc关键字:PIC  RS232  串口通信 手机看文章 扫描二维码
随时随地手机看文章
    大家好, 通过前一期的学习, 我们已经对ICD2 仿真烧写器和增强型PIC 实验板的使用方法及学习方式有所了解与熟悉,学会了如何用单片机来控制发光管、继电器、蜂鸣器、按键、数码管等资源,体会到了学习板的易用性与易学性,看了前几期实例,大部分都是基于单片机端口操作原理呢?

  大家是否觉得这样一个单片机系统似乎缺少点什么呢?不错,本期我们将介绍单片机与电脑通讯,使单片机与PC 机能够联机工作。

  单片机除了需要控制外围器件完成特定的功能外,在很多应用中还要完成单片机和单片机之间、单片机和外围器件之间,以及单片机和微机之间的数据交换和指令的传输,这就是单片机的通信。单片机的通信方式可以分为并行通信和串行通信。并行方式传送一个字节的数据至少需要8 条数据线。

  一般来讲单片机与打印机等外围设备连接时,除8条数据线外,还要状态、应答等控制线,当传送距离过远时电线要求过多,成本会增加很多。单片机的串行通信方法较为多样,传统的串行通信方式是通过单片机自带的串行口进行RS232 方式的通信。

  串行通信是以一位数据线传送数据的位信号,即使加上几条通信联络控制线,也比并行通信用的线少。

  因此,串行通信适合远距离数据传送,如大型主机与其远程终端之间,处于两地的计算机之间,采用串行通信就非常经济。

  串行通信又分为异步传送和同步传送两种基本方式。

  异步通讯:异步通信传输的数据格式一般由1个起始位、7 个或8 个数据位、1 到2 个停止位和一个校验位组成。它用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如图1 所示。

  在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(可以省略),最后是停止位1。用这种格式表示字符,则字符可以一个接一个地传送。

  在异步通讯中,通信双方采用独立的时钟,起始位触发双方同步时钟。在异步通信中CPU 与外设之间必须有几项约定,即每一帧位数,字符格式和波特率。字符格式的规定是双方能够在对同一种0 和1 的数据串理解成同一种意义。原则上字符格式可以由通讯的双方自由制定,但从通用、方便的角度出发,一般还是使用一些标准为好,如采用ASCII 标准。

  同步通讯:在同步通讯中所传输的数据格式是由多个数据组成,每帧有一个或两个同步字符作为起始位以触发同步时钟开始发送或接收。同步通讯数据帧格式如图2 所示。在异步通信中,每个字符要用起始位和停止位作为字符开始和结束的标志,占用了时间,所以在数据块传递时。波特率指每秒送多少个0 或1,由于包含起始位,停止位等,实际传送数据每秒多少字节总比波特率的1/8 少。为了提高速度,常去掉这些标志,采用同步传送。由于数据块传递开始要用同步字符来指示,同时要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。同步传输方式比异步传输方式速度快,这是它的优势。但同步传输方式也有其缺点,即它必须要用一个时钟来协调收发器的工作,所以它的设备也较复杂。

  现在我们将用一个实例来剖析一下它到底是如何控制数据收发的,单片机串口将接收PC 机发送的数据,同时点亮相应的发光管做指示。

  首先,我们来看一下这个实例所涉及到的理论基础知识。PIC 单片机有全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232 电平(逻辑摆幅大,逻辑1 为-3 ~ -15V,逻辑0 为+3 ~ +15V),而单片机的串口是TTL 电平(逻辑摆幅小逻辑1 为>2.4V, 逻辑0 为<0.4V),两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232 进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。

  MAX232 芯片是MAXIM 公司生产的、包含两路收发和电荷泵升压电路,外部引脚和内部电路如图3所示:

[page]

在实际应用中一般采用如图4 所示的硬件电路图,这是最简单的连接方法,但是对我们来说已经足够使用了。

  为了能够在电脑端看到单片机发出的数据,我们必须借助一个PC 机(上位机)的软件进行观察,这里我们推荐一个免费的电脑串口调试软件——串口调试助手,软件界面如图5 所示。

  软件可以设定串口号、波特率、校验位等参数,非常实用。在实际应用中一定要保证上位机设置与单片机相统一,否则数据将会出错。串口调试助手可以从http://www.hificat.com/ 免费下载使用。

  对于下位机软件的编程,我们使用MPLab IDE 软件来进行C 语言编程,它是我们的编程环境,同时我们可以通过使用ICD2 仿真烧写器和增强型PIC实验板连接进行程序的仿真调试和烧写步骤,具体的操作步骤,我们已经在前几期做了详细的说明和介绍,在此就不再重复说明,读者朋友可以参阅以前的文章或直接登陆http://www.hificat.com/pic_demo/pic_demo.asp 查看资料。现在我们可以输入程序代码进行调试了,我们在MPLab IDE 软件中新建工程,加入源程序代码,同时进行芯片型号的选择和配置位的设置,我们实验所用的芯片型号为PIC16F877A。编写的程序代码如下:

  #include / 包含单片机内部资源预定义

  unsigned char recdata;

  void delay() // 延时子程序

  {

  unsigned int k;

  for(k=0;k<300;k++);

  }

  //------------------------------

  // 主程序

  void main()

  {

  TRISC=0xC0; // 设置C 口方向

  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; // 返送接收到的数据 // 把接

  收到的数据发送回去

  }

  }

  编好程序后,读者朋友可以将编译好的HEX 通过ICD2 仿真烧写器烧入单片机芯片,然后上电运行。首先,我们打开串口调试助手,设定好串口序号、波特率等相关参数,具体参数见图6 所示,然后我们发送十六进制数“01”,我们的思路是发送数据“01”,则点亮实验板上第一个LED 发光管;发送数据“02”,则点亮板上第二个LED 发光管,现在我们发送了“01”后,我们可以看到实验板上的第一个发光管已点亮,如图7 所示,同样,你可以试一下用串口调试助手发送其它数据内容,板子上将会出现何种现象。

  我们输入了这么长一段程序后,作为初学者的读者一定对有些语句会有点疑问,下面我们就来一起结果实际,看一下一些关键程序语句的作用。

  #include 语句用来加载PIC 库文件,头部recdata 变量的定义是用来存放我们接收到的串口数据,void delay () 是延时函数,TRISC、TRISA 相关的语句用来设置RC、RA 口的输入、输出状态,在此我们设置为输出。SPBRG=0X19 至PEIE=0X1 这些语句,分别是对串口通信参数的配置与开启中断使能, while(1) 是死循环语句,即周而复始地执行{ } 内的语句体,如我们现在的程序中的作用即是不停地判断recdata 这个变量,也就是不停地判断串口接收到的数据是否为0x01、0x02??

  0x06 这些数据,通过判断不同的数值,再点亮板上LED 发光管,即PORTC 端口的赋值。在程序尾部有个interrupt usart() 函数,它是我们的中断处理函数,当有串口中断产生时,就会进入这个函数体,函数体中语句的主要作用是把接收到的串口数据放到变量recdata 中,同时将接收到的数据再返回给上位机,即回传给PC 机,这样就进行了一次完整的双向通信。

  RS232 串口通信的原理与使用我们讲到这里,接下来几期,我们将继续一起学习增强型PIC 实验板的其它各部分资源的原理与使用,使你对单片机应用的各方面知识都有所入门与提高。增强型PIC实验板系统资源丰富,可做实验有:6 位LED 数码管、8 路LED、直控键盘、蜂鸣器喇叭、继电器试验、I2C 总线接口、SPI 总线接口、160X 液晶、128X64液晶、红外接收头接口、步进电机驱动接口、AD模/ 数转换接口、串行时钟芯片DS1302、温度传感器DS18B20 接口、RS232 串口通讯、外扩展接口以便外接更多的实验资源。

关键字:PIC  RS232  串口通信 引用地址:轻松学PIC之RS232串口通信篇

上一篇:基于CAN总线的电气火灾报警系统的设计方案
下一篇:Microchip推出业界首款嵌入式固件开发工具

推荐阅读最新更新时间:2024-03-16 13:30

PIC内部看门狗使用总结
PIC的看门狗是一个系统定时器,使用内部低频31Khz时钟源作为时钟,定时范围为1ms-256s。 看门狗的系统框图如下: 看门狗的配置步骤如下: 通过配置字 配置WDTE 1:0 来选择看门狗的工作模式 当设置WDTE 1:0 为11时候,此时看门狗一直有效,只需要在看门狗定时时间内喂狗,若超出时间未喂狗,则看门狗触发复位。 然后通过设置寄存器WDTCON来设置看门狗定时周期 通过设置WTDPS 4:0 可以设置得到1ms-256s的看门狗定时器时间。
[单片机]
<font color='red'>PIC</font>内部看门狗使用总结
PIC 里面关于CONFIG( ) 配置位
简介:PIC单片机的配置字可以用__CONFIG命令来定义,有些PIC单片机在程序空间外还有ID空间, 有些PIC单片机支持用外部编程器对内部的EEPROM进行编程。 对于HI-TECH C18 , 配置字的设定通过宏 __CONFIG(n,x)来实现. 一.配置字 PIC单片机的配置字可以用__CONFIG命令来定义: #i nclude __CONFIG(x) ;其中x是配置字,头文件中定义了相应的配置说明符。 如: __CONFIG(WDTDIS & XT & UNPROTECT); 这将关闭看门狗,设置XT振方式,程序不加密。注意:不同的配置符间用'&'相联,未定义的部分保留未编程状态。详细的情况请
[单片机]
MSP430F149的串口RS232接口
1、 概述 具有同步串口模式(SPI),异步通信模式(UART)。 作异步通信时,P3.4,P3.5,P3.6,P3.7第二功能分别是UTXD0, URXD0, UTXD1, UTXD2 2、 使用方法概述 2.1 程序架构 配置寄存器设置工作模式 { 设置IO口为第二功能作为串口收发引脚; 使能串口收发功能; 选择每帧数据位为7或8; 选择波特率发生器时钟源; 配置波特率(查表得出值再配置UxBR0, UxBR1,UxMCTL); 软件清除串口复位位(SWRST); 若采用中断方式则使能接受、发送中断 } 编写接受/发送程序,可采用查询方式或中断方式。同51单片机不同的是,UTXIFG,
[单片机]
pic单片机计数
1 #include pic.h //用的是PICC编译器 2 __CONFIG (HS & PROTECT & PWRTEN & BOREN & WDTDIS); 3 //PIC单片机都需要配置该位,HS是外部晶振模式 4 // 使能PROTECT保护程序存储器 5 //BOREN使能掉电保护 6 7 //WDTDIS关闭看门狗 8 void display(int pulse_amount); 9 void
[单片机]
PIC单片机的程序编写和空间分配时应注意哪些问题
控制部分采用PICl6F7X系列单片机,运用汇编语言编程,运行速度较快,能够达到系统的要求。在这里使用的大多是数字信号的控制,电机的控制只有开和合两种状态。在动作的过程中需要两只手臂、身体、头部、脚部等的协调动作。整个控制系统比较复杂,因而在PIC程序编写和空间分配方面需要注意一些问题。 1、动作标志位的使用 在整个控制中,组合的动作很多,当所有动作定位都通过光电开关控制时,在程序编写上就有一些问题。如要求左手上升到鼓掌位、右手上升到举手位(手初始位置在最下的放下位),光电开关0有效(即为0时是挡住),到达正确位置。用简单的理解可以写成下面的程序: listP=16c73 calllefthandup callrighth
[单片机]
<font color='red'>PIC</font>单片机的程序编写和空间分配时应注意哪些问题
PIC12F629单片机T1定时器程序
#include pic.h __CONFIG(0x0184); //什么都关,用内部RC #define OUT_LED GPIO2 unsigned int timecnt = 0; void Delay_us(unsigned int n) { while(n--); } void interrupt time1 (void) { TMR1H = 0Xfc; TMR1L = 0X28; TMR1IF = 0; //T1溢出标志位,软件清0 // if(TMR1IF==1) { timecnt++; if(timecnt==1000) { OUT_LED=~OUT_LED; timecnt=0;
[单片机]
PIC16F877A例程---LCD1602
#include pic.h //调用头文件 #include pic1687x.h __CONFIG(0x3F32); //芯片配置字 //__CONFIG(HS&UNPROTECT&PWRTEN&BORDIS&WDTDIS);//芯片配置字 //__CONFIG(0x3FFD&0x3FFF&0x3FF7&0x3FBF&0x3FFB);//芯片配置字 #define uchar unsigned char #define uint unsigned int #define ulint unsigned long int #define LCD_DATA_PORT PORTD //
[单片机]
单片机PIC16C7X在低功耗识别抄表的应用
    摘要: 介绍一种低功耗的自动识别抄表系统。详细介绍其结构和工作原理、设计思相,并给出两种信息钮的操作方法。     关键词: 低功耗 识读器 通信座 接触型iButton1990A 感应型TK5550 目前,许多行业的抄表系统,一般都停留在手工抄写然后人工汇总的水平上。随着经济改革的深入发展,人们要求信息及时、准确、全面;显然,手工抄写不能满足经济生活的要求。本文介绍了一种用单片机控制的抄表系统,可以记录多项信息,具有低功耗、低成本、便于携带、易于操作等特点,非常适合电厂、化工厂等相关行业的抄表系统。 1 系统的总体结构及工作原理 该系统由信息讯、识读器、通信座、计算机组成。将一个包含特定标识
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved