单片机和PC机之间的串行通信(追加200分帮你拿大奖)(1)

来源:百度知道 编辑:UC知道 时间:2024/05/10 06:42:21
麻烦大家帮我搞懂下面几个小问题 (,由于小弟时间紧,有更多奖励分,可分条答,每条400分)
80c51和pc 机通过串行通信的 电平转换用的MAX232
(1)单片机端的数据传输程序 汇编或者c51
(2)pc机端的vb或者vc编写的通信程序 最好是vb
(3) pc机 用的是com1 9针端口

如有不便 请发到小弟的邮箱kang068@126.com
谢谢拉

用Keil C51编程的例子,通讯规约用的是OMRON协议,简单解释一下:
每条命令或响应均以字符"@"开头,以0x2A0D结尾
起始字符@ 后面是你的规约定义的命令识别码,比方:0x03代表什么意思,把它的每一个16进制位用ASCII表示,发送,这里就是0x3033
然后是可能发送的数据
然后是校验码,就是从@开始的所有字节的异或结果然后用ASCII表示其中的单个16进制位,比如:计算结果是0x89,则FCS码是0x3839

其余的看注释吧,上位机用VB的过两天给你。

#include <REG51F.h>
#include <INTRINS.H>
#define uchar unsigned char
#define uint unsigned int
#define InNum 20 //一次收到的最大数据字节数
#define true 1
#define false 0

//函数声明
unsigned int checksum(uchar *p, uchar count);
bit init_com(void);
bit uploadstate(void);
void getstate(uchar index, uchar *p);
void doResp(void);
uchar getstatecount();

//全局变量
union //用公用体,命令与响应共用一段存储器,节省资源
{unsigned char In[InNum]; //输入数据数组
struct
{unsigned char s; //开始字节,必须以'@'开始,ASCII码为40H
unsigned int id; //识别码,两个字符的命令码
unsigned char para[8];//操作参数,依具体命令而变化,四个字符