文档详情

组态王与单片机通信实例.doc

发布:2016-03-27约5.84千字共8页下载文档
文本预览下载声明
*?组态协议: 字头 设备地址 标志 数据地址 数据字节数 数据… 异或 CR *?字头:1字节1个ASCII码,40H *?设备地址:?1字节2个ASCII码,0—255(即0---0x0ffH) *?标志:1字节2个ASCII码,bit0~bit7, //把接收值将它发出即可 *?bit0=?0:读,bit0=?1:写。 *?bit1=?0:不打包。 *?????bit3bit2?=?00,数据类型为字节。 *?????bit3bit2?=?01,数据类型为字。 *?????bit3bit2?=?1x,数据类型为浮点数。 *?数据地址:?2字节4个ASCII码,0x0000~0xffff ? //把接收值将它发出即可 *?数据字节数:1字节2个ASCII码,1—100,实际读写的数据的字节数。? //把接收值将它发出即可 *?数据…:为实际的数据转换为ASCII码,个数为字节数乘2。 ?? *?异或:异或从设备地址开始异或,到异或字节前结束得异或值,异或值转换成2个ASCII码 * //如得0x4b,对应Ascll为0x34和0x42. *?CR:0x0d。 *///////// //?读格式为:字头?设备地址?标志 数据地址?数据字节数 异或?CR //?写格式:?字头?设备地址?标志?数据地址 数据字节数 数据… 异或?CR #include?reg52.h #define??uchar?unsigned?char #define??CTH0???0xfe #define??CTL0???0x0c sbit?led1=P2^7;//定义LED. sbit?led2=P2^6; sbit?led3=P2^5; sbit?led4=P2^4; //unsigned?char?i10=0;??//收数据标 //unsigned?int?j=0;?? //动态显示数据用 unsigned?char?i=0; ? //动态显示用 int??j=0; ////调试用 unsigned?char?k=0; ////调试用1~100. //unsigned?char?k4=0; //K4为发送的数据?;K6为组态下传数据标志。k6=0; int?k2=0; //接收死机保护。 uchar??duan_tabled[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//需要显示的段选码 char?pp1[22]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0a,0x0a,0x0a,0x0a, 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a}; ?//接收上位机读写暂存 char?pp2[10]={0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0d};??//数据发送暂存 uchar?pp3[8]={0x40,0x00,0x00,0x2a,0x2a,0x00,0x00,0x0d}?;?//uchar?pp4[8]={0x40,0x00,0x00,0x23,0x23,0x37,0x36,0x0d}?;?// delay(unsigned?int?i)??//延时子程序。 { unsigned?int?j=0; for(;j=i;j++);;; } ?void?Init() ??//初始化 { // TMOD=0x01;??? TMOD=0X21; //设置T1为方式2??? ??? TH0=CTH0;??????????????????????????????????????????????????//1MS ??? TL0=CTL0; ??? ET0=1; ??? TR0=1; EX0=1; IT0=1; TH1=0Xfd; //设置波特率为9600 TL1=0Xdf; SCON=0X50; //设置串口位方式1 PCON=0X00; // SPCTL=0x4d; TR1=1; ?? //定时器1开始计数 ES=1;?? EA=1; } void??timer0()?interrupt?1?//显示中断;前两位调试用, ???//第三位显示——接收上位机读写暂存——的第几位. { ???//第四位显示对比。 TH0=CTH0; TL0=CTL0; i++;??? if(i==5) { ? ?P0=duan_tabled[pp1[21]%10];?//第二位?显示上面传下来的数据的个位 ?P1=0xfd; } if(i==10) { ? P0=duan_tabled[pp1[21]/10];// ?
显示全部
相似文档