已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机与PC机之间的串口通信摘 要:随着数据采集系统的广泛应用,通常由单片机构成的应用系统,如仪器仪表、智能设备等,都需要与PC机之间交换数据,实现与PC机之间的通讯功能,以充分发挥PC和单片机之间的功能互补,资源共享的优势。本文使用RS232接口芯片,以及如何利用此芯片实现单片机与PC机之间的通讯。51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是rs232电平,而单片机的串口是ttl电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。机和单片机的串口通信系统由一根串口连接线把带有软件上位机的(机)和下位机(即单片机)连接起来进行,借用串口调试助手实现机和单片机的串口通信,并观察调试结果。上位机软件使用串口调试工具,下位机软件是本人所编写的一个串口测试程序 关键词:单片机,串口通信,虚拟,仿真目录一、方案 31.1串行通信基本概念 31.2同步串行通信方式 31.3串行通信的制式 41.4程序原理框图 5二、模块电路设计 52.1 RS-232与TTL电平的转换原理 52.2 MAX232芯片实现电平转换 62.3 A/D转换电路的设计 72.4 液晶显示电路的设计 8三、系统总电路9四、系统的软件设计 104.1程序流程图 104.2串口通信总程序11五、结果分析 15六、小结 18一、方案选择11 串行通信方式基本概念:串行通信方式是将数据字节分成一位一位的形式在一条传输线上逐个地传输,此时只需要一条传输线,外加一条公共地线和若干控制线号线。因为一次只能传输一位,所以对于一个字节的数据,至少要分8位才能传送完毕。串行通信的必要过程是:发送时,要把并行数据编程串行数据发送到线路上去,接收时,要把串行数据转化成并行数据,这样才能被计算机及其他设备处理。串行通信传输线少,长距离传输时候,成本低,且可以利用电话网等现成的设备,但数据的传输控制比并行通信复杂。串行通信方式:异步串行通信和同步串行通信。异步串行通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。在单片机和单片机之间,单片机与计算机之间,通常采用这种通信方式。本文主要介绍同步串行通信方式。1.2 同步串行通信方式:同步通信时要建立发送方时钟对接收方适中的直接控制,使双方达到完全同步。此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留间隙,即保持位同步的关系,也保持字符同步关系。发送方对接收方的同步可以通过外同步和自同步两种方法实现面向字符的同步格式如图:SYN SYNSOH标题STX数据块ETB/ETX块校验 图2 面向字符的同步格式此时,传输的数据和控制信息都必须由规定的字符集(如ASCII码)中的字符所组成。图2中帧头为1个或2个同步字符SYN(ASCII码为16H)。SOH为序始字符(ASCII码为01H),表示标题的开始,标题中包含源地址、目标地址和路由指示等信息。STX文始字符(ASCII码为02H),表示传送数据的开始。数据块是传送的正文内容,由多个字符组成,数据块后面是组终字符ETB(ASCII码为17H)或文终字符ETX(ASCII码为03H),然后是校验码。典型的面向字符的同步规程如IBM的二进制同步规程BSC。 面向位的同步格式如图3所示。8位8位8位=0位16位8位01111110地址场控制场信息场校验场01111110 图3 面向位的同步格式 此时,将数据块看做数据流,并用序列01111110作为开始和结束标志。为了避免在数据流中出现序列01111110时引起的混乱,发送方总是在其发送的数据流中每出现5个连续的1就插入一个附加的0;接收方每检测到5个连续的1并且其后跟一个0时候就删除该0。典型的面向位的同步协议,如ISO的高级链路控制规程HDLC和IBM的同步数据链路控制规程SDLC。面向位的同步通信的特点是以特定的位组合01111110作为帧的开始和结束标志,所传输的一帧数据可以是任意位。它传输的效率较高,但实现的硬件设备比异步通信复杂。1.3 串行通信的制式:(1) 单工。单工是指数据传输仅能沿一个方向,不能实现反向传输。(2) 半双工。半双工是指数据传输可以两个方向,但需要分时进行。(3) 全双工。全双工是数据可以同时进行双向传输。三中制式分别如图3、图4、图5:1.4程序原理框图 PC机的RS-232串口AT89C51RS-232电平转TTL电平A/D转换TTL电平转RS-232电平液晶显示采集数据 图6 二、串行通信电路设计2.1 RS-232电平与TTL电平的转换分立元件实现RS-232电平与TTL电平转换电路(如图7) 图7PC机默认的高低电平分别是-3V -15V和3V 15V,为RS-232电平。单片机默认的高低电平为5V 0V,为TTL电平。分析图5,首先TTL电平TXD发送数据时,若发送低电平0,这时Q3导通,PCRXD由空闲时的低电平变成高电平(如PC用中断接收的话会产生中断),满足条件。发送高电平1时,TXD为高电平,Q3截止,由于PCRXD内部高阻,而PCTXD平时是-3 -15V ,通过D1和R7将其拉低PCRXD至-3 -15V,此时计算机接收到的就是1。反过来,PC发送信号,由单片机来接收信号。当PCTXD为低电平-3-15V时,Q4截止,单片机端口的RXD被R9拉到5V高电平;当PCTXD变高时,Q4导通,RXD被Q4拉到低电平,这样便实现了双向转换。这也便是MAX232的转换原理。2.2 MAX232芯片实现电平转换MAX232芯片是MAXIM公司生产的、包含两路接收器和驱动器的IC芯片,它的内部有一个电源电压变换器,可以把输入的+5V电源电压变换成为RS-232输出电平所需的+10V电压。所以采用此芯片接口的串行通信系统只需单一的+5V电源就可以了。对于有+12V电源的场合,其适应性更强,加之其价格适中,硬件接口简单,所以被广泛采用。MAX232芯片引脚结构和外围连接如图8(a)和(b) (a) (b) 图8 MAX232的外围电路连接如图9。 其数据传输过程如下:MAX232的11脚接单片机的TXD端P3.1,TTL电平从单片机TXD端发出,经过MAX232转换为RS-232电平后从MAX232的14脚发出,再连接到实验板上串口座的第2脚,在经过平行串口线连接至PC机的串口座第2个脚RXD端,至此计算机接收数据。PC机发送数据时从PC机串口座第3脚TXD端发出数据,再逆向流向单片机的RXD端P3.0接收数据。 图9需要注意的是,MAX232与串口座连接时,无论是数据输出端,还是数据输入端,连接串口座的第2引脚获第3引脚都可以,选用不同的连接方式是,单片机与计算机之间的串口线要谨慎选择,是选平行串口线还是交叉串口线、是母头对母头串口线还是母头对公头的串口线这些都要非常注意,每种选择都有对应的电路,但是无论哪种搭配电路,在单片机与计算机之间必须要有一条数据能互相传输回路,把握好信号交接点就一定能通信成功。2.3 A/D转换电路的设计A/D转换部分本实验采用ADC0832:ADC0832 是美国国家半导体公司生产的一种8 位分辨率、双通道A/D转换芯片。由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。ADC0832 具有以下特点: 8位分辨率; 双通道A/D转换; 输入输出电平与TTL/CMOS相兼容; 5V电源供电时输入电压在0-5V之间; 工作频率为250KHZ,转换时间为32S; 一般功耗仅为15mW;ADC0832的外围电路和管脚图如图10(a)和(b) (a) (b) 图10ADC0832为8位分辨率A/D转换芯片,其最高分辨可达 256级,可以应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在 05V之间。芯片转换时间仅为 32S,据有双通道输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI数据输入端,可以轻易的实现通道功能的选择。2.4 液晶显示电路的设计液晶显示采用我们熟悉的16*2显示的LCD1602。 图11 单片机液晶显示电路三、系统总电路总体电路图: 图12 串口通信系统总电路四、系统的软件设计4.1 程序流程图:开始串口初始化A/D转换1602显示采集数据启动定时器1满1秒单片机向PC机发送数据, 刷新1602显示计数器0计数PC机向单片机发送的字符单片机响应PC机结束LCD1602初始化 图13 总程序流程图4.2 串口通信总程序:#include#include#include#define uchar unsigned char#define uint unsigned intuchar code table0=Mcu system;uchar code table1=Voltage:;sbit ADCS=P20; /0832片选端sbit ADDI=P21; /0832数据端sbit ADCLK=P22 /0832时钟端sbit lcden=P26; /液晶使能端sbit lcdrs=P27; /液晶数据命令选择端uint t0_num,num;uchar flag_uart,flag_time,flag_on,a,i,ad_val;float ad_vo;/*延时*/void delay(uint x) uint i,j; for(i=x;i0;i-) for(j=110;j0;j-);/*串口初始化*/void ck_init() TMOD=0x21; /设定T1定时器工作方式2,T0定时器工作方式1; TH0=(65535-45872)/256; /T0计数器装初值; TL0=(65535-45872)%256; TH1=0xfd; /T1定时器装初值; TL1=0xfd; TR1=1; /启动T1定时器; ET0=1;/ 启动T0计数器; SM0=0; / 设定串口工作方式1 SM1=1; / 同上 REN=1; / 允许串口接收 EA=1; / 开总中断 ES=1; / 开串口中断 /*1602*/ void write_com(uchar com) delay(1); lcdrs=0; /选择写命令模式 P0=com; /将要写的命令字送到数据总线上_nop_(); /稍作延时以待数据稳定 lcden=1; /给使能端一个高脉冲 delay(5); /稍作延时 lcden=0; /使能端置0已完成高脉冲 void write_date(uchar date) delay(1);/查忙 lcdrs=1; /选择写数据模式 P0=date; /将要写的数据送到数据总线上_nop_(); lcden=1; delay(5); lcden=0; void lcd_init() lcden=0; write_com(0x38); /设置16*2显示,5*7点阵,8位数据接口 write_com(0x0c); /设置开显示,不显示光标 write_com(0x06); /写一个字符后地址加1 write_com(0x01); /显示清0,数据指针清0 void display(uchar x)float j;uint aa;j=x*19.607; aa=j+0.5; write_com(0x80+0x03) ;/设置第一行字符显示的起始地址 for(num=0;num10;num+) /通过for循环将table0中的字符写到液晶上 write_date(table0num); delay(1); write_com(0x80+0x42); /设置第二行字符显示的起始地址 for(num=0;num8;num+) /通过for循环将table1中的字符写到液晶上 write_date(table1num); delay(1); write_com(0x80+0x40+10);/设置A/D转换数据的起始地址 write_date(0x30+(aa/1000);/写个位 write_date(0x2e);/写小数点write_date(0x30+(aa%1000/100);/写小数点后面第一位write_date(0x30+(aa%100/10);/写小数点后面第二位write_date(0x56); /写字符“V” /*0832*/uchar ad_0832() uchar date;uint i; ADDI=1; _nop_(); _nop_(); ADCS=0; _nop_(); _nop_(); ADCLK=1; _nop_(); _nop_(); ADCLK=0; ADDI=0; _nop_(); _nop_(); ADCLK=1; _nop_(); _nop_(); ADCLK=0; ADDI=0; _nop_(); _nop_(); ADCLK=1; _nop_(); _nop_(); ADCLK=0; ADDI=1; _nop_(); _nop_(); for(i=0;i8;i+) date|=ADDI; /收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0; /形成一次时钟脉冲 _nop_(); _nop_(); date=1; if(i=7)date|=ADDI; ADCS=1; /拉低CS端 ADCLK=0; /拉低CLK端 ADDI=1; /拉高数据端,回到初始状态 /date=8; /date|=ndat; return(date); void main() lcd_init(); /1602初始化 ck_init(); /串口初始化 while(1) if(flag_uart=1); /检测到标志位为1,根据接受到PC机 /发送过来的数据进行回复 flag_uart=0; ES=0;TI=1;switch(flag_on) case 0:puts(Turn on ad!n);TR0=1; /开计数器0break; case 1:puts(Turn off ad!n);TR0=0; /关计数器0break;case 2:puts(Error!n);TR0=0;break; while(!TI); TI=0;ES=1; if(flag_time=1) /检测到标志位为1,1S接受一次A/D转化数值 flag_time=0;ad_val=ad_0832();ad_vo=(float)ad_val*5.0/256.0;ES=0;TI=1;printf(The voltage is %fVn,ad_vo); / 向PC机发送字符串及转换结果while(!TI); /等待发送完毕TI=0;ES=1; /关串口中断,以免接受数据丢失 display(ad_val); void timer0() interrupt 1 TH0=(65535-45872)/256; TL0=(65535-45872)%256; t0_num+; if(t0_num=20) /使计数器0计满1秒 t0_num=0; flag_time=1; /将标志位flag_tim
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 8392-2026高低杠
- 全球与中国域名市场研究报告(AI驱动的数字身份变革2024-2025)
- 一年级学具规整习惯培养工作总结
- 刑侦岗位个人工作总结
- AI谣言深度研究报告
- 军用防爆罐转移操作手册
- 瘢痕修复预约指南
- 家庭燃气热水器排烟检查指南
- T∕CNLIC 0213-2025 电动牙刷制造业绿色工厂评价要求
- 孕期心理健康试题及答案
- 《中华人民共和国水法》解读培训
- 膝过伸的原因
- DB33∕T 1398-2024 惠民型商业补充医疗保险服务规范
- 一张纸水库防汛应急预案
- 某铅锌矿开采设计毕业设计
- 健康教育学题库及答案
- 学堂在线 运动与健康 章节测试答案
- 2024-2025学年北京市海淀区七年级下英语期末考试题(含答案和音频)
- 性法医学图谱
- 2025年广州市人社局劳动合同模板
- 2024-2025学年广东省佛山市高一(下)期末数学试卷(含解析)
评论
0/150
提交评论