求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、自动报警系统
[解决办法]
下位机测试程序
#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