欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
Modbus協(xié)議用下面的函數(shù)寫51單片機(jī)的程序怎么寫
[打印本頁]
作者:
asdadqw2
時間:
2018-4-4 22:20
標(biāo)題:
Modbus協(xié)議用下面的函數(shù)寫51單片機(jī)的程序怎么寫
//
說明:例子中的變量請自己根據(jù)習(xí)慣定義,
Voltage_data~Pf_data
等數(shù)據(jù)除以對應(yīng)的倍率,就得到實(shí)際的值
用51怎么寫主機(jī)程序來讀取模塊的信息?
unsigned int calccrc(unsigned charcrcbuf,unsigned int crc)
{
unsignedchar i;
unsignedchar chk;
crc=crc^ crcbuf;
for(i=0;i<8;i++)
{
chk=(unsigned char)(crc&1);
crc=crc>>1;
crc=crc&0x7fff;
if(chk==1)
crc=crc^0xa001;
crc=crc&0xffff;
}
returncrc;
}
unsigned int chkcrc(unsigned char*buf,unsigned char len)
{
unsignedchar hi,lo;
unsignedint i;
unsignedint crc;
crc=0xFFFF;
for(i=0;i<len;i++)
{
crc=calccrc(*buf,crc);
buf++;
}
hi=(unsigned char)(crc%256);
lo=(unsigned char)(crc/256);
crc=(((unsignedint)(hi))<<8)|lo;
returncrc;
}
void read_data(void)
{
union crcdata
{
unsignedint word16;
unsignedchar byte[2];
}crcnow;
if((Clock.Second%2)==1) //2秒讀一次
{
Tx_Buffer[0]=Read_ID; //抄讀模塊的ID號
Tx_Buffer[1]=0x03;
Tx_Buffer[2]=0x00;
Tx_Buffer[3]=0x48;
Tx_Buffer[4]=0x00;
Tx_Buffer[5]=0x06;
crcnow.word16=chkcrc(Tx_Buffer,6);
Tx_Buffer[6]=crcnow.byte[1]; //CRC效驗(yàn)低字節(jié)在前
Tx_Buffer[7]=crcnow.byte[0];
Send_data(8); //發(fā)送8個數(shù)據(jù),請根據(jù)單片機(jī)類型自己編程
}
}
void Analysis_data(void)
{
unsignedchar i;
union crcdata
{
unsignedint word16;
unsignedchar byte[2];
}crcnow;
if(Comm[1].Status==2) //接收完成
{
if(RX_Buffer[0]==Read_ID) //確認(rèn)ID正確
{
crcnow.word16=chkcrc(RX_Buffer,Comm[1].nRx-2); //Comm[1].nRx是接收數(shù)據(jù)長度
if((crcnow.byte[0]==RX_Buffer[Comm[1].nRx-1])&&(crcnow.byte[1]==RX_Buffer[Comm[1].nRx-2])) //CRC效驗(yàn)
{
Voltage_data=(((unsignedint)(RX_Buffer[3]))<<8)|RX_Buffer[4]; //Voltage_data為unsigned int型
Current_data=(((unsignedint)(RX_Buffer[5]))<<8)|RX_Buffer[6]; //Current_data為unsigned int型
Power_data=(((unsignedint)(RX_Buffer[7]))<<8)|RX_Buffer[8]; //Power_data為unsigned int型
Energy_data=(((unsignedlong)(RX_Buffer[9]))<<24)|(((unsigned long)(RX_Buffer[10]))<<16)|(((unsignedlong)(RX_Buffer[11]))<<8)|RX_Buffer[12]; ////Energy_data為unsigned long型
Pf_data=(((unsignedint)(RX_Buffer[13]))<<8)|RX_Buffer[14]; //Pf_data為unsigned int型
}
}
Comm[1].Status=0; //切換回接收數(shù)據(jù)狀態(tài)
}
}
復(fù)制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1