历史上的今天
返回首页

历史上的今天

今天是:2025年02月04日(星期二)

2020年02月04日 | PIC单片机之RS232串口通信篇

2020-02-04 来源:eefocus

大家好, 通过前一期的学习, 我们已经对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所示:





在实际应用中一般采用如图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 串口通讯、外扩展接口以便外接更多的实验资源。

推荐阅读

史海拾趣

Alpha (Taiwan)公司的发展小趣事

Alpha (Taiwan)公司自创立之初,便致力于电子技术的研发与创新。面对日益激烈的市场竞争,公司不断投入资金,引进先进设备,吸引了一批优秀的研发人才。这些人才凭借深厚的专业知识和敏锐的市场洞察力,成功开发出一系列具有竞争力的电子产品,如高性能的芯片、精密的传感器等。这些产品的推出,不仅提升了公司的市场地位,也为公司的快速发展奠定了坚实基础。

Broadband公司的发展小趣事

面对全球环保意识的日益增强,Alpha (Taiwan)公司积极响应号召,致力于绿色电子产品的研发和生产。公司投入大量资金研发环保材料和技术,成功推出了一系列绿色环保电子产品。这些产品不仅具有优异的性能,而且在使用过程中对环境的影响较小,符合现代社会的环保理念。此外,公司还积极参与环保公益活动,宣传环保知识,推动电子行业的绿色发展。

高创科技(gotrend)公司的发展小趣事

Alpha (Taiwan)公司自创立之初,便致力于电子技术的研发与创新。面对日益激烈的市场竞争,公司不断投入资金,引进先进设备,吸引了一批优秀的研发人才。这些人才凭借深厚的专业知识和敏锐的市场洞察力,成功开发出一系列具有竞争力的电子产品,如高性能的芯片、精密的传感器等。这些产品的推出,不仅提升了公司的市场地位,也为公司的快速发展奠定了坚实基础。

Califia Lighting公司的发展小趣事

在环保理念日益深入人心的背景下,Califia Lighting积极响应国家号召,致力于推动绿色照明技术的发展。公司研发了一系列环保型LED产品,降低了能源消耗和环境污染。同时,公司还关注未来照明技术的发展趋势,不断探索新的应用领域和市场机会,为公司的可持续发展奠定了坚实基础。

通过以上五个故事,我们可以看到Califia Lighting公司在电子行业里发展起来的艰辛与辉煌。他们凭借技术创新、市场拓展、品质管理和绿色发展等方面的不断努力,逐渐成为了电子照明行业的佼佼者。

HELUKABEL公司的发展小趣事

在竞争激烈的电子照明市场中,Califia Lighting始终坚持以技术创新为核心竞争力。公司不断投入研发资源,推动LED照明技术的升级和突破。通过引入先进的生产工艺和设计理念,Califia Lighting成功开发出了一系列具有独特优势的产品,如高效节能、长寿命、环保等,赢得了市场的广泛认可。

Crystal Semiconductor Corp公司的发展小趣事

在快速发展的同时,Crystal Semiconductor Corp也注重可持续发展。公司积极推行环保理念,采用环保材料和工艺生产产品。同时,公司还加大了对教育和公益事业的投入,培养了一批批优秀的半导体人才。展望未来,Crystal Semiconductor Corp将继续秉承创新、务实、高效的理念,不断推动半导体行业的发展。

请注意,这些故事是虚构的,旨在展示一个半导体公司可能经历的发展阶段和挑战。如果您需要关于Crystal Semiconductor Corp的真实故事,建议您查阅相关公司资料或新闻报道。

问答坊 | AI 解惑

开关电源设计入门

开关电源设计入门…

查看全部问答>

MBR分区表问题

03 0B 01 00 21 72 20 00 60 01 00 00 00 CD 00 00 01 73 01 00 0B EB 20 00 60 CE 00 00 20 2F 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA 我有这样的一段分区表。。 ...…

查看全部问答>

OV511驱动

从网上找的OV511驱动的源码,在2440下加载之后,读到的图像通常是模糊的,也就是图像断行,还是灰度图,怀疑输出的YUV420数据,只得到了Y分量。但是初始化中明明将寄存器设置的是YUV420 OUTPUT. 我读了程序,觉得寄存器设置的有问题,设置的SnapSh ...…

查看全部问答>

wince可以使用两个不连续内存吗???

比如一个0x50000000 ~ 0x58000000,另一个0x30000000~0x38000000,各128M,共256M,怎么使用他们?config.bib中RAM好像必须是物理连续的吧? xiexie…

查看全部问答>

请大家浅谈一下各系列单片机的特点及适用范围

MCS-51系列单片机,PIC系列单片机,MSP430系列单片机,MC68HC11系列单片机,AT89系列单片机,各种ARM芯片的特点和适用范围,请大家浅谈一下…

查看全部问答>

背景问题

我用vs2005写wince5.0的程序,怎么把窗口的背景设为一副图片,不使用颜色,且在这副图片的基础上,其它的控件都对于窗口透明啊?谢谢!…

查看全部问答>

跪求Windows Mobile 5.0的SDK文档下载!

我在MSDN的网站上虽然能够看到SDK的帮助文档,但是不知道为什么里面的SAMPLE没有的下载? 请问同志们知道那里有完整的Windows Mobile 5.0的SDK下载吗? …

查看全部问答>

求助高手 做一个锁相环电路

本帖最后由 dontium 于 2015-1-23 13:29 编辑 新手求救,一个锁相环电路,中心频率40M,输出DC--3M,不知道如何做,求大侠指点一下 [ 本帖最后由 yanghuiguang 于 2011-8-3 10:27 编辑 ] …

查看全部问答>