📄 twire.c
字号:
#include <iom16v.h>
#include <macros.h>
#include "hal.h"
#include "main.h"
#include "uart.h"
#include "Temp.h"
#define S_SEL (1)
#define S_NONE (15)
#define M_STA_SET (PORTC|= 0x10)
#define M_STA_CLR (PORTC&=~0x10)
#define M_DAT_SET (PORTC|= 0x80)
#define M_DAT_CLR (PORTC&=~0x80)
#define GET_S_STA (PINC&0x20)
#define GET_S_DAT (PINC&0x40)
#define MA_SEND(a,b) if(GET_S_DAT) rdata|=a; if(data&a) M_DAT_SET;else M_DAT_CLR;b
uint16 rece_s1_data[32]={0};
uint16 send_s1_data[32]={0,0,0,0,0,0,0,0,0,0,15,5};
uint8 send_count = 0 ;
void AutoSend (void){
static uint32 ture_tmp;
uint32 tmp;
uint8 no=0;
tmp = MasterCall( (((uint32)(send_count))<<16)|send_s1_data[send_count]); //发送
if(tmp==0xffffffff){
return;
}
if(send_count>=31){
//数据刷新
Road_AdhystSign[0] = (T10_read[12]&0x80)>>7;// 第一路修正符号,0为加修正值,1为减修正值()
Road_AdhystSign[1] = (T10_read[13]&0x80)>>7;
Road_AdhystSign[2] = (T10_read[14]&0x80)>>7;
Road_AdhystSign[3] = (T10_read[15]&0x80)>>7;
Road_AdhystSign[4] = (T10_read[16]&0x80)>>7;
Road_AdhystSign[5] = (T10_read[17]&0x80)>>7;
Road_AdhystSign[6] = (T10_read[18]&0x80)>>7;
Road_AdhystSign[7] = (T10_read[19]&0x80)>>7;
Road_AdhystSign[8] = (T10_read[20]&0x80)>>7;
Road_AdhystSign[9] = (T10_read[21]&0x80)>>7;
Road_AdjustDat[0] = (T10_read[12]&0x7f); // 第一路校正值
Road_AdjustDat[1] = (T10_read[13]&0x7f);
Road_AdjustDat[2] = (T10_read[14]&0x7f);
Road_AdjustDat[3] = (T10_read[15]&0x7f);
Road_AdjustDat[4] = (T10_read[16]&0x7f);
Road_AdjustDat[5] = (T10_read[17]&0x7f);
Road_AdjustDat[6] = (T10_read[18]&0x7f);
Road_AdjustDat[7] = (T10_read[19]&0x7f);
Road_AdjustDat[8] = (T10_read[20]&0x7f);
Road_AdjustDat[9] = (T10_read[21]&0x7f);
SiteFack_Temp = (uint8)T10_read[10]; // 存储设置温度与实际温度相差几度才开始运算(15)
Check_TempTimeCycle = (uint8)T10_read[11]; // 检测温度时间周期(5)
Site_Temp[0] = T10_read[0]; //设置温度数据(没有倍数的温度)
Site_Temp[1] = T10_read[1];
Site_Temp[2] = T10_read[2];
Site_Temp[3] = T10_read[3];
Site_Temp[4] = T10_read[4];
Site_Temp[5] = T10_read[5];
Site_Temp[6] = T10_read[6];
Site_Temp[7] = T10_read[7];
Site_Temp[8] = T10_read[8];
Site_Temp[9] = T10_read[9];
send_count = 0;
}
else {
send_count++; //发送周期
}
}
//主机程序
uint32 MasterCall (uint32 data){
extern uint8 sendpro,sendpro_bk,test_byte;
uint32 rdata=0;
uint8 i;
PORTC = S_SEL; //选择某路的从机和主机开始线
M_STA_CLR; //start
while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y1
MA_SEND(0x00000001,M_STA_SET);
while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y2
MA_SEND(0x00000002,M_STA_CLR);
while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y3
MA_SEND(0x00000004,M_STA_SET);
while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y4
MA_SEND(0x00000008,M_STA_CLR);
while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y5
MA_SEND(0x00000010,M_STA_SET);
while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y6
MA_SEND(0x00000020,M_STA_CLR);
while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y7
MA_SEND(0x00000040,M_STA_SET);
while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y8
MA_SEND(0x00000080,M_STA_CLR);
while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y9
MA_SEND(0x00000100,M_STA_SET);
while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y10
MA_SEND(0x00000200,M_STA_CLR);
while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y11
MA_SEND(0x00000400,M_STA_SET);
while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y12
MA_SEND(0x00000800,M_STA_CLR);
while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y13
MA_SEND(0x00001000,M_STA_SET);
while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y14
MA_SEND(0x00002000,M_STA_CLR);
while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y15
MA_SEND(0x00004000,M_STA_SET);
while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y16
MA_SEND(0x00008000,M_STA_CLR);
while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y17
MA_SEND(0x00010000,M_STA_SET);
while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y18
MA_SEND(0x00020000,M_STA_CLR);
while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y19
MA_SEND(0x00040000,M_STA_SET);
while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y20
MA_SEND(0x00080000,M_STA_CLR);
while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y21
MA_SEND(0x00100000,M_STA_SET);
while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y22
MA_SEND(0x00200000,M_STA_CLR);
while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y23
MA_SEND(0x00400000,M_STA_SET);
while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0xffffffff;} }//y24
MA_SEND(0x00800000,M_STA_CLR);
// while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0;} }//y25
// MA_SEND(0x01000000,M_STA_SET);
// while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0;} }//y26
// MA_SEND(0x02000000,M_STA_CLR);
// while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0;} }//y27
// MA_SEND(0x04000000,M_STA_SET);
// while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0;} }//y28
// MA_SEND(0x08000000,M_STA_CLR);
// while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0;} }//y29
// MA_SEND(0x10000000,M_STA_SET);
// while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0;} }//y30
// MA_SEND(0x20000000,M_STA_CLR);
// while(GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0;} }//y31
// MA_SEND(0x40000000,M_STA_SET);
// while(!GET_S_STA){if (sendpro_bk!=sendpro) { PORTC = 0xff; return 0;} }//y32
// MA_SEND(0x80000000,M_STA_CLR);
while(GET_S_STA);
PORTC = 0xff;
// TransmitByte(rdata>>16);
// TransmitByte(rdata>>8);
// TransmitByte(rdata);
// TransmitByte(0XFF);
rece_s1_data[0x1F&(rdata>>16)]=(uint16)rdata;
test_byte++;
return rdata;
}
/*
void SendData2Com(void){
uint8 i;
for (i=0;i<10;i++){
SEND2COM_TMP_DISP((0xf0+i),T10_send[i]); //温度值
}
for (i=0;i<10;i++){
SEND2COM_TMP_DISP((16*i+0x0f),rece_s1_data[i]); //温度值
}
for (i=0;i<10;i++){
SEND2COM_TMP_STATE((0xe0+i),T10_send[i]); //状态值
}
for (i=0;i<10;i++){
SEND2COM_TMP_STATE((16*i+0x0e),rece_s1_data[i]); //状态值
}
}
*/
void SendData2Com(void){
static uint8 i=0;
if ((i>=0)&&(i<10)){
SEND2COM_TMP_DISP((0xf0+i),T10_send[i]); //温度值
i++;
return;
}
else if ((i>=10)&&(i<20)){
SEND2COM_TMP_DISP((16*(i-10)+0x0f),rece_s1_data[i-10]); //温度值
i++;
return;
}
else if ((i>=20)&&(i<30)){
SEND2COM_TMP_STATE((0xe0+i-20),T10_send[i-20]); //状态值
i++;
return;
}
else if ((i>=30)&&(i<40)){
SEND2COM_TMP_STATE((16*(i-30)+0x0e),rece_s1_data[i-30]); //状态值
i++;
return;
}
else{
i=0;
}
}
uint16 CheckDataFCom (void){
if( (0xff==receFCom[5])&&(receFCom[4]==receFCom[2])&&(receFCom[3]==receFCom[1]) ){
if(receFCom[1]){
return (0x80 + (10*(receFCom[2]>>4)) + (0x0f&receFCom[2]) );//还原数据
}
else{
return (0x00 + (10*(receFCom[2]>>4)) + (0x0f&receFCom[2]) );//还原数据
}
}
return 0xffff;
}
void ReadComData(void){
uint8 start_byte,i;
start_byte = ReceiveByte();
for(i=0;i<62;i++){
if(start_byte==receNFtab[i]){
receFCom[0] = start_byte;
receDComCount = 0;
return;
}
if(61==i){
receDComCount++;
receFCom[receDComCount] = start_byte;
if(5==receDComCount){
if(0xffff == CheckDataFCom())
return;
switch (receFCom[0]){
case 0xf0: //温度的设置值M
T10_read[0] = CheckDataFCom();
break;
case 0xf1:
T10_read[1] = CheckDataFCom();
break;
case 0xf2:
T10_read[2] = CheckDataFCom();
break;
case 0xf3:
T10_read[3] = CheckDataFCom();
break;
case 0xf4:
T10_read[4] = CheckDataFCom();
break;
case 0xf5:
T10_read[5] = CheckDataFCom();
break;
case 0xf6:
T10_read[6] = CheckDataFCom();
break;
case 0xf7:
T10_read[7] = CheckDataFCom();
break;
case 0xf8:
T10_read[8] = CheckDataFCom();
break;
case 0xf9:
T10_read[9] = CheckDataFCom();
break;
case 0x0f: //温度的设置值S
send_s1_data[0] = CheckDataFCom();
break;
case 0x1f:
send_s1_data[1] = CheckDataFCom();
break;
case 0x2f:
send_s1_data[2] = CheckDataFCom();
break;
case 0x3f:
send_s1_data[3] = CheckDataFCom();
break;
case 0x4f:
send_s1_data[4] = CheckDataFCom();
break;
case 0x5f:
send_s1_data[5] = CheckDataFCom();
break;
case 0x6f:
send_s1_data[6] = CheckDataFCom();
break;
case 0x7f:
send_s1_data[7] = CheckDataFCom();
break;
case 0x8f:
send_s1_data[8] = CheckDataFCom();
break;
case 0x9f:
send_s1_data[9] = CheckDataFCom();
break;
case 0xd0:
T10_read[10] = CheckDataFCom(); //15的那个值
send_s1_data[10] = T10_read[10];
break;
case 0xd1:
T10_read[11] = CheckDataFCom(); //5的那个值
send_s1_data[11] = T10_read[11];
break;
case 0xC0:
T10_read[12] = CheckDataFCom();
break;
case 0xC1:
T10_read[13] = CheckDataFCom();
break;
case 0xC2:
T10_read[14] = CheckDataFCom();
break;
case 0xC3:
T10_read[15] = CheckDataFCom();
break;
case 0xC4:
T10_read[16] = CheckDataFCom();
break;
case 0xC5:
T10_read[17] = CheckDataFCom();
break;
case 0xC6:
T10_read[18] = CheckDataFCom();
break;
case 0xC7:
T10_read[19] = CheckDataFCom();
break;
case 0xC8:
T10_read[20] = CheckDataFCom();
break;
case 0xC9:
T10_read[21] = CheckDataFCom();
break;
case 0x0C:
send_s1_data[12] = CheckDataFCom();
break;
case 0x1C:
send_s1_data[13] = CheckDataFCom();
break;
case 0x2C:
send_s1_data[14] = CheckDataFCom();
break;
case 0x3C:
send_s1_data[15] = CheckDataFCom();
break;
case 0x4C:
send_s1_data[16] = CheckDataFCom();
break;
case 0x5C:
send_s1_data[17] = CheckDataFCom();
break;
case 0x6C:
send_s1_data[18] = CheckDataFCom();
break;
case 0x7C:
send_s1_data[19] = CheckDataFCom();
break;
case 0x8C:
send_s1_data[20] = CheckDataFCom();
break;
case 0x9C:
send_s1_data[21] = CheckDataFCom();
break;
}
receFCom[0]=0;
receFCom[1]=0;
receFCom[2]=0;
receFCom[3]=0;
receFCom[4]=0;
receFCom[5]=0;
receDComCount = 0;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -