#include
#defineuint8unsignedchar
#defineuint16unsignedint
#defineFOSC16000000
uint16BAUD=9600;
uint16TEMP_Alert=1000;
//字地址0-255(只取低8位)
//位地址0-255(只取低8位)
/*CRC高位字節(jié)值表*/
constuint8codeauchCRCHi[]={
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0/**/,
0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,
0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,
0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,
0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,
0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,
0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,
0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,
0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,
0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,
0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40
};
/*CRC低位字節(jié)值表*/
constuint8codeauchCRCLo[]={
0x00,0xC0,0xC1,0x01,0xC3,0x03,0x02,0xC2,0xC6,0x06/**/,
0x07,0xC7,0x05,0xC5,0xC4,0x04,0xCC,0x0C,0x0D,0xCD,
0x0F,0xCF,0xCE,0x0E,0x0A,0xCA,0xCB,0x0B,0xC9,0x09,
0x08,0xC8,0xD8,0x18,0x19,0xD9,0x1B,0xDB,0xDA,0x1A,
0x1E,0xDE,0xDF,0x1F,0xDD,0x1D,0x1C,0xDC,0x14,0xD4,
0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3,
0x11,0xD1,0xD0,0x10,0xF0,0x30,0x31,0xF1,0x33,0xF3,
0xF2,0x32,0x36,0xF6,0xF7,0x37,0xF5,0x35,0x34,0xF4,
0x3C,0xFC,0xFD,0x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,
0x3B,0xFB,0x39,0xF9,0xF8,0x38,0x28,0xE8,0xE9,0x29,
0xEB,0x2B,0x2A,0xEA,0xEE,0x2E,0x2F,0xEF,0x2D,0xED,
0xEC,0x2C,0xE4,0x24,0x25,0xE5,0x27,0xE7,0xE6,0x26,
0x22,0xE2,0xE3,0x23,0xE1,0x21,0x20,0xE0,0xA0,0x60,
0x61,0xA1,0x63,0xA3,0xA2,0x62,0x66,0xA6,0xA7,0x67,
0xA5,0x65,0x64,0xA4,0x6C,0xAC,0xAD,0x6D,0xAF,0x6F,
0x6E,0xAE,0xAA,0x6A,0x6B,0xAB,0x69,0xA9,0xA8,0x68,
0x78,0xB8,0xB9,0x79,0xBB,0x7B,0x7A,0xBA,0xBE,0x7E,
0x7F,0xBF,0x7D,0xBD,0xBC,0x7C,0xB4,0x74,0x75,0xB5,
0x77,0xB7,0xB6,0x76,0x72,0xB2,0xB3,0x73,0xB1,0x71,
0x70,0xB0,0x50,0x90,0x91,0x51,0x93,0x53,0x52,0x92,
0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54,0x9C,0x5C,
0x5D,0x9D,0x5F,0x9F,0x9E,0x5E,0x5A,0x9A,0x9B,0x5B,
0x99,0x59,0x58,0x98,0x88,0x48,0x49,0x89,0x4B,0x8B,
0x8A,0x4A,0x4E,0x8E,0x8F,0x4F,0x8D,0x4D,0x4C,0x8C,
0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,
0x43,0x83,0x41,0x81,0x80,0x40
};
uint16TempRegister;//用于測(cè)試字址址16
uint8localAddr=0x01;//單片機(jī)控制板的地址
uint8sendCount;//發(fā)送字節(jié)個(gè)數(shù)
uint8receCount;//接收到的字節(jié)個(gè)數(shù)
//uint8sendPosi;//發(fā)送位置
uint8xdatareceBuf[1];
uint8xdatasendBuf[1];
voidcheckComm0Modbus(void);
uint16getRegisterVal(uint16addr,uint16*tempData);
uint16setRegisterVal(uint16addr,uint16tempData);
voidswitch_BAUD(uint16value);
/*****************************波特率調(diào)整函數(shù)********************************/
////函數(shù)功能:調(diào)整串口通信波特率
////串口工作在工作方式1,即8位波特率可變模式
/****************************************************************************/
voidswitch_BAUD(uint16value)
{
switch(value)
{
case0x0001:{BAUD=9600;break;}
case0x0002:{BAUD=14400;break;}
case0x0003:{BAUD=19200;break;}
}
TR1=0;//停止定時(shí)器1
ES=0;//關(guān)閉串口中斷
TH1=TL1=-(FOSC/12/32/BAUD);//設(shè)置波特率
TR1=1;//開(kāi)啟定時(shí)器1
ES=1;//使能串口中斷
}
/*************************************end************************************/
/***************************CRC校驗(yàn)碼生成函數(shù)********************************/
////函數(shù)功能:生成CRC校驗(yàn)碼
////本代碼中使用查表法,以提高運(yùn)算速度
/****************************************************************************/
uint16crc16(uint8*puchMsg,uint16usDataLen)
{
uint8uchCRCHi=0xFF;/*高CRC字節(jié)初始化*/
uint8uchCRCLo=0xFF;/*低CRC字節(jié)初始化*/
uint16uIndex;/*CRC循環(huán)中的索引*/
while(usDataLen--)/*傳輸消息緩沖區(qū)*/
{
uIndex=uchCRCHi^*puchMsg++;/*計(jì)算CRC*/
uchCRCHi=uchCRCLo^auchCRCHi[uIndex];
uchCRCLo=auchCRCLo[uIndex];
}
return(uchCRCLo《《8|uchCRCHi);
}//uint16crc16(uint8*puchMsg,uint16usDataLen)
/*************************************end************************************/
/*******************************串口發(fā)送函數(shù)********************************/
////函數(shù)功能:將數(shù)據(jù)包通過(guò)串口發(fā)送至主機(jī)
////有待修改。..。..
/****************************************************************************/
//開(kāi)始發(fā)送
voidBegin_send(void)
{
uint16i=0;
while(sendCount--)
{
SBUF=sendBuf[i++];
while(!TI);
}
}
/*************************************end************************************/
/********從機(jī)響應(yīng)主機(jī)問(wèn)詢函數(shù),functioncode:03,讀取多個(gè)寄存器值********/
////函數(shù)功能:叢機(jī)根據(jù)串口接收到的數(shù)據(jù)包receBuf[]里面的內(nèi)容,根據(jù)被讀取寄存器
////的起始地址和讀取的寄存器個(gè)數(shù),去讀相應(yīng)的寄存器的值,并將讀取的數(shù)據(jù)以MODBUS
////響應(yīng)數(shù)據(jù)的標(biāo)準(zhǔn)格式打包,經(jīng)過(guò)串口發(fā)送到主機(jī)。數(shù)據(jù)包格式同上。
/****************************************************************************/
//////////////詢問(wèn)數(shù)據(jù)包格式:
/////////////////////////receBuf[0]receBuf[1]receBuf[2]receBuf[3]receBuf[4]receBuf[5]receBuf[6]receBuf[7]
//詢問(wèn)數(shù)據(jù)格式:receBuf[]={從站地址,功能碼,起始地址高位,起始地址低位,寄存器數(shù)高位,寄存器數(shù)低位,校驗(yàn)碼低位,校驗(yàn)碼高位}
//////////////響應(yīng)數(shù)據(jù)包格式:
/////////////////////////sendBuf[0]sendBuf[1]sendBuf[[2]sendBuf[3]sendBuf[4]sendBuf[5]。..receBuf[6]receBuf[7]
//響應(yīng)數(shù)據(jù)格式:receBuf[]={從站地址,功能碼,字節(jié)計(jì)數(shù),數(shù)據(jù)1,數(shù)據(jù)2,數(shù)據(jù)3,。..校驗(yàn)碼低位,校驗(yàn)碼高位}
voidreadRegisters(void)
{
uint8addr;
uint8tempAddr;
uint16crcData;
uint8readCount;
uint8byteCount;
uint16i;
uint16tempData=0;
//addr=(receBuf[2]《《8)+receBuf[3];
//tempAddr=addr&0xfff;
addr=receBuf[3];
tempAddr=addr;
//readCount=(receBuf[4]《《8)+receBuf[5];//要讀的個(gè)數(shù)
readCount=receBuf[5];
byteCount=readCount*2;//每個(gè)寄存器內(nèi)容占高,低兩個(gè)字節(jié)
for(i=0;i{
getRegisterVal(tempAddr,&tempData);
sendBuf[i+3]=tempData》》8;
sendBuf[i+4]=tempData&0xff;
}
sendBuf[0]=localAddr;
sendBuf[1]=3;//functioncode:03
sendBuf[2]=byteCount;
byteCount+=3;//加上前面的地址,功能碼,地址共3+byteCount個(gè)字節(jié)
crcData=crc16(sendBuf,byteCount);
sendBuf[byteCount]=crcData&0xff;//CRC代碼低位在前
byteCount++;
sendBuf[byteCount]=crcData》》8;//高位在后
sendCount=byteCount+1;//例如byteCount=49,則sendBuf[]中實(shí)際上有49+1個(gè)元素待發(fā)
Begin_send();
}//voidreadRegisters(void)
/*************************************end************************************/
/********從機(jī)響應(yīng)主機(jī)問(wèn)詢函數(shù),functioncode:16,設(shè)置多個(gè)寄存器值*********/
////函數(shù)功能:叢機(jī)根據(jù)串口接收到的數(shù)據(jù)包receBuf[]里面的內(nèi)容,根據(jù)被強(qiáng)制寄存器
////的起始地址,去設(shè)置相應(yīng)寄存器的值,響應(yīng)數(shù)據(jù)包同詢問(wèn)數(shù)據(jù)包
////的內(nèi)容相同,經(jīng)過(guò)串口發(fā)送到主機(jī)。
/****************************************************************************/
//////////////詢問(wèn)數(shù)據(jù)包格式:
/////////////////////////receBuf[0]receBuf[1]receBuf[2]receBuf[3]receBuf[4]receBuf[5]receBuf[6]receBuf[7]receBuf[8]。..receBuf[9]receBuf[10]
//詢問(wèn)數(shù)據(jù)格式:receBuf[]={從站地址,功能碼,起始地址高位,起始地址低位,寄存器數(shù)高位,寄存器數(shù)低位,字節(jié)計(jì)數(shù),數(shù)據(jù)高位,數(shù)據(jù)低位,。..校驗(yàn)碼低位,校驗(yàn)碼高位}
//響應(yīng)數(shù)據(jù)包內(nèi)容為除去詢問(wèn)數(shù)據(jù)包中的字節(jié)計(jì)數(shù)和數(shù)據(jù)高低位的其他內(nèi)容
voidpresetMultipleRegisters(void)
{
uint8addr;
uint8tempAddr;
uint8byteCount;
uint8setCount;
uint16crcData;
uint16tempData;
uint8i;
//addr=(receBuf[2]《《8)+receBuf[3];
//tempAddr=addr&0xfff;
addr=receBuf[3];
tempAddr=addr&0xff;
//setCount=(receBuf[4]《《8)+receBuf[5];
setCount=receBuf[5];
byteCount=receBuf[6];
for(i=0;i{
tempData=(receBuf[i*2+7]《《8)+receBuf[i*2+8];//待設(shè)置寄存器值
setRegisterVal(tempAddr,tempData);
}
sendBuf[0]=localAddr;
sendBuf[1]=16;//functioncode:16
sendBuf[2]=addr》》8;//寄存器地址高位
sendBuf[3]=addr&0xff;//寄存器地址低位
sendBuf[4]=setCount》》8;//待設(shè)置寄存器數(shù)量高位
sendBuf[5]=setCount&0xff;//待設(shè)置寄存器數(shù)量低位
crcData=crc16(sendBuf,6);//生成CRC校驗(yàn)碼
sendBuf[6]=crcData&0xff;//CRC代碼低位在前
sendBuf[7]=crcData》》8;//高位在后
sendCount=8;
Begin_send();
}//voidpresetMultipleRegisters(void)
/*************************************end************************************/
/*************************查詢uart接收的數(shù)據(jù)包內(nèi)容函數(shù)**************************/
////函數(shù)功能:叢機(jī)根據(jù)串口接收到的數(shù)據(jù)包receBuf[1]里面的內(nèi)容,即functioncode執(zhí)行
////相應(yīng)的命令
/********************************************************************************/
voidcheckComm0Modbus(void)
{
uint16crcData;
uint16tempData;
if(receCount》4)
{
switch(receBuf[1])
{
case3://讀取保持寄存器(一個(gè)或多個(gè))
{
if(receCount》=8)//從詢問(wèn)數(shù)據(jù)包格式可知,receCount應(yīng)該等于8
{//接收完成一組數(shù)據(jù)
//應(yīng)該關(guān)閉接收中斷
if(receBuf[0]==localAddr)//核對(duì)地址
{
crcData=crc16(receBuf,6);//核對(duì)校驗(yàn)碼
if(crcData==receBuf[7]+(receBuf[6]《《8))
if(receBuf[1]==3)
{//讀取保持寄存器(一個(gè)或多個(gè))
readRegisters();
}
}
}
receCount=0;
break;
}
case16://設(shè)置多個(gè)寄存器
{
tempData=(receBuf[4]《《8)+receBuf[5];
tempData=tempData*2;//數(shù)據(jù)個(gè)數(shù)
tempData+=9;//從詢問(wèn)數(shù)據(jù)包格式可知,receCount應(yīng)該等于9+byteCount
if(receCount》=tempData)
{
if(receBuf[0]==localAddr)
{
crcData=crc16(receBuf,tempData-2);
if(crcData==(receBuf[tempData-2]《《8)+receBuf[tempData-1])
{
presetMultipleRegisters();
}
}
receCount=0;
}
break;
}
default:break;
}
}
}//voidcheckComm0(void)
/*************************************end************************************/
/*******************************讀取寄存器內(nèi)容函數(shù)**************************/
////函數(shù)功能:根據(jù)寄存器地址讀取相應(yīng)寄存器內(nèi)容
/****************************************************************************/
//取寄存器值返回0表示成功
uint16getRegisterVal(uint16addr,uint16*tempData)
{
uint16result=0;
uint16tempAddr;
tempAddr=addr&0xfff;
switch(tempAddr&0xff)
{
case0x00:{*tempData=TempRegister;break;}//讀取01開(kāi)關(guān)A溫度
case0x01:{*tempData=TempRegister;break;}//讀取01開(kāi)關(guān)A溫度
case0x02:{*tempData=TempRegister;break;}//讀取01開(kāi)關(guān)A溫度
case0x03:{*tempData=TempRegister;break;}//讀取01開(kāi)關(guān)周邊溫度
case0x04:{*tempData=TempRegister;break;}//讀取02開(kāi)關(guān)A溫度
case0x05:{*tempData=TempRegister;break;}//讀取02開(kāi)關(guān)A溫度
case0x06:{*tempData=TempRegister;break;}//讀取02開(kāi)關(guān)A溫度
case0x07:{*tempData=TempRegister;break;}//讀取02開(kāi)關(guān)周邊溫度
case0x08:{*tempData=TempRegister;break;}//讀取03開(kāi)關(guān)A溫度
case0x09:{*tempData=TempRegister;break;}//讀取03開(kāi)關(guān)A溫度
case0x0a:{*tempData=TempRegister;break;}//讀取03開(kāi)關(guān)A溫度
case0x0b:{*tempData=TempRegister;break;}//讀取03開(kāi)關(guān)周邊溫度
case0x0c:{*tempData=TempRegister;break;}//讀取04開(kāi)關(guān)A溫度
case0x0d:{*tempData=TempRegister;break;}//讀取04開(kāi)關(guān)A溫度
case0x0e:{*tempData=TempRegister;break;}//讀取04開(kāi)關(guān)A溫度
case0x0f:{*tempData=TempRegister;break;}//讀取04開(kāi)關(guān)周邊溫度
case0x10:{*tempData=TempRegister;break;}//讀取05開(kāi)關(guān)A溫度
case0x11:{*tempData=TempRegister;break;}//讀取05開(kāi)關(guān)A溫度
case0x12:{*tempData=TempRegister;break;}//讀取05開(kāi)關(guān)A溫度
case0x13:{*tempData=TempRegister;break;}//讀取05開(kāi)關(guān)周邊溫度
case0x14:{*tempData=TempRegister;break;}//讀取06開(kāi)關(guān)A溫度
case0x15:{*tempData=TempRegister;break;}//讀取06開(kāi)關(guān)A溫度
case0x16:{*tempData=TempRegister;break;}//讀取06開(kāi)關(guān)A溫度
case0x17:{*tempData=TempRegister;break;}//讀取06開(kāi)關(guān)周邊溫度
case0x18:{*tempData=TempRegister;break;}//讀取07開(kāi)關(guān)A溫度
case0x19:{*tempData=TempRegister;break;}//讀取07開(kāi)關(guān)A溫度
case0x1a:{*tempData=TempRegister;break;}//讀取07開(kāi)關(guān)A溫度
case0x1b:{*tempData=TempRegister;break;}//讀取07開(kāi)關(guān)周邊溫度
case0x1c:{*tempData=TempRegister;break;}//讀取08開(kāi)關(guān)A溫度
case0x1d:{*tempData=TempRegister;break;}//讀取08開(kāi)關(guān)A溫度
case0x1e:{*tempData=TempRegister;break;}//讀取08開(kāi)關(guān)A溫度
case0x1f:{*tempData=TempRegister;break;}//讀取08開(kāi)關(guān)周邊溫度
case0x20:{*tempData=TempRegister;break;}//讀取09開(kāi)關(guān)A溫度
case0x21:{*tempData=TempRegister;break;}//讀取09開(kāi)關(guān)A溫度
case0x22:{*tempData=TempRegister;break;}//讀取09開(kāi)關(guān)A溫度
case0x23:{*tempData=TempRegister;break;}//讀取09開(kāi)關(guān)周邊溫度
case0x24:{*tempData=TempRegister;break;}//讀取10開(kāi)關(guān)A溫度
case0x25:{*tempData=TempRegister;break;}//讀取10開(kāi)關(guān)A溫度
case0x26:{*tempData=TempRegister;break;}//讀取10開(kāi)關(guān)A溫度
case0x27:{*tempData=TempRegister;break;}//讀取10開(kāi)關(guān)周邊溫度
case0x28:{*tempData=TempRegister;break;}//讀取11開(kāi)關(guān)A溫度
case0x29:{*tempData=TempRegister;break;}//讀取11開(kāi)關(guān)A溫度
case0x2a:{*tempData=TempRegister;break;}//讀取11開(kāi)關(guān)A溫度
case0x2b:{*tempData=TempRegister;break;}//讀取11開(kāi)關(guān)周邊溫度
case0x2c:{*tempData=TempRegister;break;}//讀取12開(kāi)關(guān)A溫度
case0x2d:{*tempData=TempRegister;break;}//讀取12開(kāi)關(guān)A溫度
case0x2e:{*tempData=TempRegister;break;}//讀取12開(kāi)關(guān)A溫度
case0x2f:{*tempData=TempRegister;break;}//讀取12開(kāi)關(guān)周邊溫度
case0x30:{*tempData=TempRegister;break;}//讀取13開(kāi)關(guān)A溫度
case0x31:{*tempData=TempRegister;break;}//讀取13開(kāi)關(guān)A溫度
case0x32:{*tempData=TempRegister;break;}//讀取13開(kāi)關(guān)A溫度
case0x33:{*tempData=TempRegister;break;}//讀取13開(kāi)關(guān)周邊溫度
case0x34:{*tempData=TempRegister;break;}//讀取14開(kāi)關(guān)A溫度
case0x35:{*tempData=TempRegister;break;}//讀取14開(kāi)關(guān)A溫度
case0x36:{*tempData=TempRegister;break;}//讀取14開(kāi)關(guān)A溫度
case0x37:{*tempData=TempRegister;break;}//讀取14開(kāi)關(guān)周邊溫度
case0x38:{*tempData=TempRegister;break;}//讀取15開(kāi)關(guān)A溫度
case0x39:{*tempData=TempRegister;break;}//讀取15開(kāi)關(guān)A溫度
case0x3a:{*tempData=TempRegister;break;}//讀取15開(kāi)關(guān)A溫度
case0x3b:{*tempData=TempRegister;break;}//讀取15開(kāi)關(guān)周邊溫度
case0x3c:{*tempData=TempRegister;break;}//讀取16開(kāi)關(guān)A溫度
case0x3d:{*tempData=TempRegister;break;}//讀取16開(kāi)關(guān)A溫度
case0x3e:{*tempData=TempRegister;break;}//讀取16開(kāi)關(guān)A溫度
case0x3f:{*tempData=TempRegister;break;}//讀取16開(kāi)關(guān)周邊溫度
case0x40:{*tempData=TempRegister;break;}//讀取17開(kāi)關(guān)A溫度
case0x41:{*tempData=TempRegister;break;}//讀取17開(kāi)關(guān)A溫度
case0x42:{*tempData=TempRegister;break;}//讀取17開(kāi)關(guān)A溫度
case0x43:{*tempData=TempRegister;break;}//讀取17開(kāi)關(guān)周邊溫度
case0x44:{*tempData=TempRegister;break;}//讀取18開(kāi)關(guān)A溫度
case0x45:{*tempData=TempRegister;break;}//讀取18開(kāi)關(guān)A溫度
case0x46:{*tempData=TempRegister;break;}//讀取18開(kāi)關(guān)A溫度
case0x47:{*tempData=TempRegister;break;}//讀取18開(kāi)關(guān)周邊溫度
case0x48:{*tempData=TempRegister;break;}//讀取19開(kāi)關(guān)A溫度
case0x49:{*tempData=TempRegister;break;}//讀取19開(kāi)關(guān)A溫度
case0x4a:{*tempData=TempRegister;break;}//讀取19開(kāi)關(guān)A溫度
case0x4b:{*tempData=TempRegister;break;}//讀取19開(kāi)關(guān)周邊溫度
case0x4c:{*tempData=TempRegister;break;}//讀取20開(kāi)關(guān)A溫度
case0x4d:{*tempData=TempRegister;break;}//讀取20開(kāi)關(guān)A溫度
case0x4e:{*tempData=TempRegister;break;}//讀取20開(kāi)關(guān)A溫度
case0x4f:{*tempData=TempRegister;break;}//讀取20開(kāi)關(guān)周邊溫度
case0x50:{*tempData=TempRegister;break;}//讀取21開(kāi)關(guān)A溫度
case0x51:{*tempData=TempRegister;break;}//讀取21開(kāi)關(guān)A溫度
case0x52:{*tempData=TempRegister;break;}//讀取21開(kāi)關(guān)A溫度
case0x53:{*tempData=TempRegister;break;}//讀取21開(kāi)關(guān)周邊溫度
case0x54:{*tempData=TempRegister;break;}//讀取22開(kāi)關(guān)A溫度
case0x55:{*tempData=TempRegister;break;}//讀取22開(kāi)關(guān)A溫度
case0x56:{*tempData=TempRegister;break;}//讀取22開(kāi)關(guān)A溫度
case0x57:{*tempData=TempRegister;break;}//讀取22開(kāi)關(guān)周邊溫度
case0x58:{*tempData=TempRegister;break;}//讀取23開(kāi)關(guān)A溫度
case0x59:{*tempData=TempRegister;break;}//讀取23開(kāi)關(guān)A溫度
case0x5a:{*tempData=TempRegister;break;}//讀取23開(kāi)關(guān)A溫度
case0x5b:{*tempData=TempRegister;break;}//讀取23開(kāi)關(guān)周邊溫度
case0x5c:{*tempData=TempRegister;break;}//讀取24開(kāi)關(guān)A溫度
case0x5d:{*tempData=TempRegister;break;}//讀取24開(kāi)關(guān)A溫度
case0x5e:{*tempData=TempRegister;break;}//讀取24開(kāi)關(guān)A溫度
case0x5f:{*tempData=TempRegister;break;}//讀取24開(kāi)關(guān)周邊溫度
case0x60:{*tempData=TempRegister;break;}//讀取25開(kāi)關(guān)A溫度
case0x61:{*tempData=TempRegister;break;}//讀取25開(kāi)關(guān)A溫度
case0x62:{*tempData=TempRegister;break;}//讀取25開(kāi)關(guān)A溫度
case0x63:{*tempData=TempRegister;break;}//讀取25開(kāi)關(guān)周邊溫度
case0x64:{*tempData=TempRegister;break;}//讀取26開(kāi)關(guān)A溫度
case0x65:{*tempData=TempRegister;break;}//讀取26開(kāi)關(guān)A溫度
case0x66:{*tempData=TempRegister;break;}//讀取26開(kāi)關(guān)A溫度
case0x67:{*tempData=TempRegister;break;}//讀取26開(kāi)關(guān)周邊溫度
case0x68:{*tempData=TempRegister;break;}//讀取27開(kāi)關(guān)A溫度
case0x69:{*tempData=TempRegister;break;}//讀取27開(kāi)關(guān)A溫度
case0x6a:{*tempData=TempRegister;break;}//讀取27開(kāi)關(guān)A溫度
case0x6b:{*tempData=TempRegister;break;}//讀取27開(kāi)關(guān)周邊溫度
case0x6c:{*tempData=TempRegister;break;}//讀取28開(kāi)關(guān)A溫度
case0x6d:{*tempData=TempRegister;break;}//讀取28開(kāi)關(guān)A溫度
case0x6e:{*tempData=TempRegister;break;}//讀取28開(kāi)關(guān)A溫度
case0x6f:{*tempData=TempRegister;break;}//讀取28開(kāi)關(guān)周邊溫度
case0x70:{*tempData=TempRegister;break;}//讀取29開(kāi)關(guān)A溫度
case0x71:{*tempData=TempRegister;break;}//讀取29開(kāi)關(guān)A溫度
case0x72:{*tempData=TempRegister;break;}//讀取29開(kāi)關(guān)A溫度
case0x73:{*tempData=TempRegister;break;}//讀取29開(kāi)關(guān)周邊溫度
case0x74:{*tempData=TempRegister;break;}//讀取30開(kāi)關(guān)A溫度
case0x75:{*tempData=TempRegister;break;}//讀取30開(kāi)關(guān)A溫度
case0x76:{*tempData=TempRegister;break;}//讀取30開(kāi)關(guān)A溫度
case0x77:{*tempData=TempRegister;break;}//讀取30開(kāi)關(guān)周邊溫度
case0x78:{*tempData=localAddr;break;}//讀取設(shè)備地址
case0x79:{*tempData=BAUD;break;}//讀取串口通信波特率
case0x7a:{*tempData=TEMP_Alert;break;}//讀取報(bào)警溫度上限
case0x7b:{*tempData=TempRegister;break;}//讀取年寄存器
case0x7c:{*tempData=TempRegister;break;}//讀取月寄存器
case0x7d:{*tempData=TempRegister;break;}//讀取日寄存器
case0x7e:{*tempData=TempRegister;break;}//讀取時(shí)寄存器
case0x7f:{*tempData=TempRegister;break;}//讀取分寄存器
case0x80:{*tempData=TempRegister;break;}//讀取秒寄存器
default:break;
}
returnresult;
}//uint16getRegisterVal(uint16addr,uint16&data)
/*************************************end************************************/
/*******************************設(shè)置寄存器內(nèi)容函數(shù)**************************/
////函數(shù)功能:根據(jù)寄存器地址設(shè)置相應(yīng)寄存器內(nèi)容
/****************************************************************************/
//設(shè)置寄存器值返回0表示成功
uint16setRegisterVal(uint16addr,uint16tempData)
{
uint16result=0;
uint16tempAddr;
tempAddr=addr&0xfff;
switch(tempAddr&0xff)
{
case0x78:{localAddr=tempData;break;}//設(shè)置設(shè)備地址,設(shè)備地址初始值為0x01
case0x79:{
BAUD=tempData;
switch_BAUD(BAUD);
break;
}//設(shè)置串口通信波特率,串口通信波特率寄存器值為1:9600,2:14400,3:19200,初始值為1
//設(shè)置報(bào)警溫度上限,報(bào)警溫度值存儲(chǔ)方式:精確到0.1°C,以擴(kuò)大10倍的數(shù)值放在寄存器里面,例如溫度值為100.1,則讀寫(xiě)值為1001
case0x7a:{TEMP_Alert=tempData;break;}
case0x7b:{TempRegister=tempData;break;}//設(shè)置年寄存器
case0x7c:{TempRegister=tempData;break;}//設(shè)置月寄存器
case0x7d:{TempRegister=tempData;break;}//設(shè)置日寄存器
case0x7e:{TempRegister=tempData;break;}//設(shè)置時(shí)寄存器
case0x7f:{TempRegister=tempData;break;}//設(shè)置分寄存器
case0x80:{TempRegister=tempData;break;}//設(shè)置秒寄存器
default:break;
}
returnresult;
}
end
評(píng)論
查看更多