PIC单片机虚拟串行通信设计_第1页
PIC单片机虚拟串行通信设计_第2页
PIC单片机虚拟串行通信设计_第3页
PIC单片机虚拟串行通信设计_第4页
PIC单片机虚拟串行通信设计_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PIC单片机虚拟串行通信设计1.实例目的:本实例完全建立在计算机软件的基础上,利用PROTEUS软件构建一个单片机系统,利用VB编写一个计算机控制软件和单片机系统串行通信,计算机上的控制软件可以发送一个值在0——999之间的数,在单片机系统上显示出来,单片机系统上也可输入一个相同值域的数并在计算机控制软件上显示出来。本实例主要是为了展示虚拟串行通信的仿真。2.系统配置本实例虽然简单,但是要想看到想要的仿真结果,建立虚拟的串口连接是必不可少的。要想仿真串行通信,必须要把单片机系统上的串行口与计算机上的串行口连接,这样他们之间才能传输数据,但由于是仿真,实际没有相连接,所以需要创建一对虚拟串行口并使他们相连,这里我使用的是这个软件VirtualSerialPortsDriverXP5.1(VSPDXP),打开后的界面如图1所示。在右面“ADDPAIR”按钮的旁边的下拉选项中一个选择“COM3”,一个选择“COM4”,然后点击“ADDPAIR”按钮,这样就完成了虚拟串口“COM3”和“COM4”的连接,完成后如图1所示。简单吧?!另外,你还要选择一个串口调试软件作为你的调试软件,因为当你单片机系统弄完以后而计算机上的控制软件还没有编时,没有串口调试软件的话,你就没法知道你单片机系统正确与否。这种软件网上多如牛毛,随便找一个。我的软件为SSCOM32,界面如图2所示。功能与用法这里就不一一介绍了,反正既能接收又能发送,实例需要的功能他都可以调试。3.单片机系统单片机硬件:电路如图3所示。本实例采用的单片机依然是PIC16F877,他含有UASRT模块,有了它才能进行串行通信。显示部分采用3位数码管共阳输出。键盘采用矩阵键盘。这里需要特别说明的是,由于是仿真,没有采用电平转换芯片MAX232将TTL电平转换成RS232的电平,实际这一步是必需的。串行口的设置需要特别注意,由于本实例单片机程序中设置的波特率是9600,8位数据,无奇偶校验,所以串行口也要一样设置,这里由于建立的是“COM3”“COM4”之间的虚拟连接,端口号一定要设置成“COM3”或“COM4”,这是关键!如图4所示。单片机软件:单片机软件主要由以下几个部分组成:初始化程序,显示程序,键盘输入程序,串行接收程序,串行发送程序。程序采用C语言,简单明了,经过PICC编译通过。全部程序如下:/*************************************************************标题:PCtoPIC**用途:用于上位机与单片机之间的通讯(本例为下位机软件)**时间:2009年1月4日**作者:WUJIEFLASH*************************************************************/#include//预定义#defineuchunsignedchar//显示用码表constuchshu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0xff};//变量intdata,temp1,temp2,temp3,temp;uchflag,keylock;uchpoint,buffer[3];//初始化voidinit(){TRISB=0;PORTB=0;TRISC=0;PORTC=0;keylock=1;//初始化键盘按键标志位,用于锁定按键//USART部件初始化SPBRG=0x19;//设置波特率为9600bpsTXSTA=0x04;//选择异步高速8位数据传输模式RCSTA=0x80;//允许串行端口工作TRISC=0x80;//设置为高阻态,防止干扰TXEN=1;//发送允许CREN=1;//接收允许PEIE=1;//开放外设中断RCIE=1;//开放串行口中断ei();//开放总中断}//显示需要的延时voiddelay(){inti;for(i=0;i《1000;i++);}//发送子程序voidsend_usart(){uchi;for(i=0;i《3;i++)//每次发3个数据{if(i==0)TXREG=data/100+0x30;//求得百位if(i==1)TXREG=data%100/10+0x30;//求得十位if(i==2)TXREG=data%10+0x30;//求得个位while(1){if(TXIF==1)break;//等待发送完成}}}//中断接收子程序voidinterruptreceive(void){if(point《3)//是否已经接收到3个数据buffer[point++]=RCREG-48;//没有,继续接收elsepoint=0;//是,指针复位data=buffer[0]*100+buffer[1]*10+buffer[2];//组合成三位数}//数码管显示voiddisplay(intdis_data){intdis_data_ge,dis_data_shi,dis_data_bai;dis_data_ge=dis_data%10;//个位dis_data_shi=dis_data%100/10;//十位dis_data_bai=dis_data/100;//百位if(dis_data==0)//若数据为0,只显示1位{dis_data_ge=0;dis_data_shi=10;dis_data_bai=10;}if(dis_data《10)//若数据小于10,则十位与百位关闭显示{dis_data_shi=10;dis_data_bai=10;}if(dis_data《100)//若数据小于100,则只显示两位{dis_data_bai=10;}RC0=0;RC1=0;RC2=1;PORTB=shu[dis_data_ge];//个位送显delay();RC0=0;RC2=0;RC1=1;PORTB=shu[dis_data_shi];//十位送显delay();RC1=0;RC2=0;RC0=1;PORTB=shu[dis_data_bai];//百位送显delay();}//键盘(线反转法)voidpresskey(){uchline,column,key;TRISD=0x07;PORTD=0xf0;column=PORTD&0x07;//取列码TRISD=0xf0;PORTD=0x0f;line=PORTD&0xf0;//取行码key=line|column;//合成键值if(key==0)keylock=0;//保证每次只按一次键if(keylock==0){if(key!=0)keylock=1;switch(key)//查找键值{case0x11:temp=3;flag++;break;case0x12:temp=2;flag++;break;case0x14:temp=1;flag++;break;case0x21:temp=4;flag++;break;case0x22:temp=5;flag++;break;case0x24:temp=6;flag++;break;case0x41:temp=9;flag++;break;case0x42:temp=8;flag++;break;case0x44:temp=7;flag++;break;case0x82:temp=0;flag++;break;case0x81:flag=4;send_usart();break;//发送case0x84:flag=0;data=0;break;//清零键}}if(flag==1)//第一次按键{if(temp==0)flag=0;//若按0,则忽略temp1=temp;data=temp1;}if(flag==2)//第二次按键{temp2=temp;data=temp1*10+temp2;//原来的个位变成十位}if(flag==3)//第三次按键{temp3=temp;data=temp1*100+temp2*10+temp3;//原来的十位变成百位flag=4;//屏蔽按键}}//主程序main(){init();while(1){presskey();display(data);}}4.计算机控制软件上位机软件是用VB编写的,功能很简单,主要有发送和接收两个功能。软件的界面如图5所示。软件主要有2个“TextBox”,3个按钮,和一些文本控件组成。现把所有程序都贴出来:PrivateSubCmdquit_Click()i=MsgBox(“您要离开吗?”,vbQuestionOrvbYesNo,“温馨提示”)Ifi=6ThenShell“explorer.exeblog.163/wujieflash”EndEndIfEndSubPrivateSubCmdsend_Click()IfLen(Text1.Text)=1ThenMSComm1.Output=“0”+“0”+Text1.Text‘不满3位补足3位再发送IfLen(Text1.Text)=2ThenMSComm1.Output=“0”+Text1.TextIfLen(Text1.Text)=3ThenMSComm1.Output=Text1.TextEndSubPrivateSubcmdzero_Click()Text2.Text=“”Text1.Text=“”EndSubPrivateSubForm_Load()MSComm1.Settings=“9600,n,8,1”’设置数据传输率和发送字符格式MSComm1mPort=4‘设置通讯串口为4MSComm1.InputLen=0’设置或返回一次从接受缓冲器中读取所有字节数MSComm1.InBufferSize=512‘设置接收缓冲区512BYTEMSComm1.InBufferCount=0MSComm1.OutBufferSize=512’设置发送缓冲区512BYTEMSComm1.OutBufferCount=0MSComm1.RThreshold=3‘每3个字符到接收缓冲区都触发接收事件MSComm1.SThreshold=1MSComm1.PortOpen=TrueEndSubPrivateSubLabel6_Click()Shell“explorer.exeblog.163/wujieflash”’我博客的超连接,多多捧场EndSubPrivateSubMSComm1_OnComm()Text2.Text=MSComm1.InputEndSubPrivateSubTe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论