No.12828 作者:Jerrycjt 邮件:caojiangting@21cn.com ID:2687 登陆:6次 文章数:18篇 最后登陆IP:61.150.43.37 最后登陆:2006/2/13 16:44:33 注册:2002/10/10 17:37:00 财富:75 发帖时间:2002/10/24 15:18:00 发贴者IP:61.150.7.240 标题:Jerrycjt:C51编程:大家帮我看看通讯!!! 摘要:No.12828C51编程:大家帮我看看通讯!!! 485通讯 CTR485 为控制线 偶校验、累加和校验 格式: FE FE FE FE 68 X X X X X X 68 X L X .... CRC 16 #include <c:\comp51\reg52.h> #include <c:\comp51\intrins.h> typedef unsigned char uchar; typedef unsigned int uint; typedef unsigned long ulong; struct ByteDcr { uchar ByteHI; uchar ByteLO; }; union WordDcr { uint Word; struct ByteDcr ByteWord; }; union WordDcr idata DDWord; uchar idata MeterNO[6],InBuff[20]; uchar idata ControlNO,LengthNO,SystemError; bit fgDataEnable=0; sbit CTR485=P1^7; void answer_com(uchar ctr,uchar *str1,uint strlen1,uchar *str2,uint strlen2); unsigned char receive_char_com(void); bit GetParity(unsigned char Datavalue); void init_serialcomm(void); void send_char_com(unsigned char ch); void serial (void); void main(void) { init_serialcomm(); //初始化串口 while(1) { send_char_com(0x12); if(fgDataEnable) { fgDataEnable=0; answer_com(0x81,MeterNO,0,MeterNO,0); } } } void answer_com(uchar ctr,uchar *str1,uint strlen1,uchar *str2,uint strlen2) { uchar check,k; send_char_com(0xfe); send_char_com(0xfe); send_char_com(0xfe); send_char_com(0xfe); send_char_com(0x68); check=0x68; send_char_com(0x00); check+=0x00; send_char_com(0x00); check+=0x00; send_char_com(0x00); check+=0x00; send_char_com(0x00); check+=0x00; send_char_com(0x00); check+=0x00; send_char_com(0x00); check+=0x00; send_char_com(0x68); check+=0x68; send_char_com(ctr); check+=ctr; //send_char_com((DDWord.ByteWord.ByteLO+0x33)); check+=(DDWord.ByteWord.ByteLO+0x33); //send_char_com((DDWord.ByteWord.ByteHI+0x33)); check+=(DDWord.ByteWord.ByteHI+0x33); do { check+=*(str1+k); send_char_com(*(str1 + k)); k++; } while(k < strlen1); do { check+=*(str2+k); send_char_com(*(str2 + k)); k++; } while(k < strlen2); send_char_com(check); send_char_com(0x16); } bit GetParity(unsigned char Datavalue) { ACC=Datavalue; if(P==1) return 1; else return 0; } void init_serialcomm(void) { SCON = 0xd0; //SCON: serail mode 1, 8-bit UART, enable ucvr TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload PCON |= 0x80; //SMOD=1; TH1 = 0xFa; //Baud:9600 fosc=11.05MHz ES=1; EA=1; &n ......
>>返回讨论的主题
|