首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

求vb写的pc与单片机串口通信程序(包括单片机串口中断程源码)解决办法

2012-03-23 
求vb写的pc与单片机串口通信程序(包括单片机串口中断程源码)两区发帖,单片机区也发了……,这个好像属vb,又属

求vb写的pc与单片机串口通信程序(包括单片机串口中断程源码)
两区发帖,单片机区也发了……,这个好像属vb,又属于单片机
最近想用vb写单片机与pc机之间的串行通信程序,可是试了好多,看了好多教程,做了来就是不对。

想让大家给点vb写的pc与单片机串口通信的教程,最好是视频的,当然其他的图文教程也可以,有源码的也加上,
我在网上找的很多都不全的,所以调不好,没调过,没有经典,所以想要个完整版的先学起来。
可以发到我邮箱 xia777xia@163.com 非常感谢!!!!

还有vb里的MSComm控件中的有些东西不太理解,看了msdn还是不太理解,比如:

' 9600 波特,无奇偶校验,8 位数据,一个停止位。
  MSComm1.Settings = "9600,N,8,1"
他这里如果设置了奇偶校验位的话要怎么写,如果设了奇偶校验位的话pc机上右击我的电脑----属性----硬件----设备管理器里面的COM口是不是也要进行相应的设置?

最后想问一下发数据的时候时序要怎么控制



我现在用的是rs232改的串口线,rxd、txd、gnd三线,硬件应该是没问题的,可是就是调不出来



[解决办法]
首先拿到单片机的通讯协议,这包括它的串口波特率,有无检验,是7位,还是8位数据位,然后还要用单机的控制指令。

然后上网找mscomm设置方法或mscomm使用方法。

[解决办法]
准备好了之后,先用串口调试工具测试好底层通讯链路、通信逻辑。然后开始编码。
[解决办法]
我个人发表一点个人意见:
1、串口通讯首先的确定上位机和下位机,那么PC作为上位机、单片机作为下位机,这样定位是没有错的。
2、串口通讯属于Modbus通讯,Modbus通讯就的有通信协议,那么首先就的构建自己的串口通讯协议,通常
情况下,串口通讯协议组成结构如下:STX+ADD+CMD+(Data)+CHK+ETX
STX:是串口通讯起始符,通常是一些特殊ASCII字符,比如“:”、“#” 等等,
ADD:下位机地址,如果是485通讯,那么需要设置下位机地址,一般为1~255,如果是232通讯,则不需要
CMD:串口通讯命令,由用户自己定义一个具有特殊含义的字符
Data:可选项,写入下位机时带有,从下位机读数据时不需要
CHK:校验方式,通常有CRC校验,异或校验,累加和校验等
ETX:串口通讯结束符,也是一些特殊的ASCII字符
[解决办法]
请参考资料(资料下载地址):
http://ishare.iask.sina.com.cn/f/8618503.html

Directory of I:\T41Backup\C盘资料备份\EIQSOFT\Visual Basic 串口通信技术与典型实例\Visual Basic\code 
1、串口编程调试精灵 
2、云台控制系统 
3、交通电子拍照管理系统 
4、发送邮件系统 
5、文件传送系统 
6、电机驱动监控系统 
7、自动报警系统

[解决办法]
下位机测试程序

C/C++ code
#include <reg52.h>typedef unsigned char    BYTE;#define RELOAD_COUNT    0xFF        //22.1184MHz,12T,SMOD=0,57600bpsvoid Initialize_Stoppage();void SendToPort(BYTE Buf);//入口函数main(){    Initialize_Stoppage();    while(1){        }}//初始化串口中断,注意频率是57600,晶振用的是 22.1184 M 的void Initialize_Stoppage(){    TMOD    =    0x20;    PCON    =    0x00;    SCON    =    0x50;    TL1    =    RELOAD_COUNT;    TH1    =    RELOAD_COUNT;    ES    =    1;    TR1    =    1;    EA      =   1;}//串口中断处理过程void COM_Event () interrupt 4 {    BYTE dat        = 0;    if(RI == 1)    {        dat = SBUF;        RI = 0;        //这里是收到什么就发什么出去        SendToPort(dat);    }else{        TI = 0;    }}//发送串口信息给上位机函数过程void SendToPort(BYTE Buf){    ES        =    0;    TI        =    0;    SBUF        =    Buf;    while(TI == 0);    TI        =    0;    ES        =    1;}
[解决办法]
以下是一些相关的入门知识

http://blog.csdn.net/SupermanKing/archive/2010/08/20/5826294.aspx

http://blog.csdn.net/SupermanKing/archive/2010/08/18/5821603.aspx

热点排行