单片机各种通信方式的特点和主要应用场合
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机各种通信方式的特点和主要应用场合
串口用的比较多:
RS232,用于与标准的RS232设备通讯
网卡,用于互联网或采用网卡端口的设备通讯
I2C,用于单片机自己外设或多个单片机之间通讯
CAN,工业标准,汽车中常用
并口:
并口就是直接将数据输入或输出,多少位数据就要用多少根线,此外还要加上控制线2根以上。
例如8位的数据通讯,至少用10根线。由于单片机的引脚数目有限,这种方法很不实用。
并行口现在计算机都几乎不用了。如果感兴趣,你就找以前的计算技术方面的书上还有介绍。
并口线路复杂,可靠性低,速度低,除了早期的打印机还用,也几乎没有这样的外设了。
大家好,通过前一期的学习,我们已经对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 所示。
软件可以设定串口号、波特率、校验位等参数,非常实用。在实际应用中一定要保证上位机设置与单片机相统一,否则数据将会出错。串口调试助手可以从/ 免费下载使用。
对于下位机软件的编程,我们使用MPLab IDE 软件来进行C 语言编程,它是我们的编程环境,同时我们可以通过使用ICD2 仿真烧写器和增强型PIC实验板连接进行程
序的仿真调试和烧写步骤,具体的操作步骤,我们已经在前几期做了详细的说明和介绍,在此就不再重复说明,读者朋友可以参阅以前的文章或直接登陆/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();
}
}