#include <cms.h> #include "io.h" #include "function.h" bit FLAG_1MS; /*******************发送通讯变量*****************************/ unsigned char Tx_Step; unsigned char Start_Count; bit Send_One_Bit_Over; unsigned char Tx_Low_Count,Tx_High_Count,Send_Count; bit Start_Send; unsigned char Tx_Data1; /*******************发送通讯变量*****************************/ /****************接收板通讯变量**********************/ bit Rx_Read_Once,Rx_Read_Now,Rx_Change,Rx_Dat_Bit,Rx_Dat_Bit1,Rx_Flag; unsigned char Rx_Step,Rx_Start_Count,Rx_Start_Count1,RX_Dat_Low_Count,RX_Dat_High_Count,RX_Count; unsigned char RX_Dat1,RX_Dat; /*************************************************************/ /**************************/ bit FLAG_ZERO_CHECK; bit FLAG_LAST_ZERO_STATE; bit FLAG_ZERO_CHANGE; bit SCR_OPEN_ONCE; bit FLAG_QIAN_HEAT_ON; bit FLAG_HOU_HEAT_ON; bit FLAG_ZUO_HEAT_ON; bit FLAG_YOU_HEAT_ON; bit FLAG_BAONUAN_HEAT_ON; unsigned char OPEN_SCR_DELAY; unsigned char SCR_OPEN_ONCE_DELAY; unsigned char QIAN_OPEN_GEAR; //前可控硅开的档位 unsigned char HOU_OPEN_GEAR; //后可控硅开的档位 unsigned char ZUO_OPEN_GEAR; //左可控硅开的档位 unsigned char YOU_OPEN_GEAR; //右可控硅开的档位 unsigned char BAONUAN_OPEN_GEAR; unsigned char QIAN_OPEN_GEAR1; //前可控硅开的档位 unsigned char HOU_OPEN_GEAR1; //后可控硅开的档位 unsigned char ZUO_OPEN_GEAR1; //左可控硅开的档位 unsigned char YOU_OPEN_GEAR1; //右可控硅开的档位 unsigned char BAONUAN_OPEN_GEAR1; bit FLAG_QIAN_OPEN_SCR; unsigned char QIAN_OPEN_SCR_DELAY,QIAN_OPEN_2CI_COUNT,QIAN_REC_TIME,QIAN_OPEN_SCR_ZERO_DELAY; bit FLAG_HOU_OPEN_SCR; unsigned char HOU_OPEN_SCR_DELAY,HOU_OPEN_2CI_COUNT,HOU_REC_TIME,HOU_OPEN_SCR_ZERO_DELAY; bit FLAG_ZUO_OPEN_SCR; unsigned char ZUO_OPEN_SCR_DELAY,ZUO_OPEN_2CI_COUNT,ZUO_REC_TIME,ZUO_OPEN_SCR_ZERO_DELAY; bit FLAG_YOU_OPEN_SCR; unsigned char YOU_OPEN_SCR_DELAY,YOU_OPEN_2CI_COUNT,YOU_REC_TIME,YOU_OPEN_SCR_ZERO_DELAY; bit FLAG_BAONUAN_OPEN_SCR; unsigned char BAONUAN_OPEN_SCR_DELAY,BAONUAN_OPEN_2CI_COUNT,BAONUAN_REC_TIME,BAONUAN_OPEN_SCR_ZERO_DELAY; bit FLAG_QIAN_ZERO_COME; bit FLAG_HOU_ZERO_COME; bit FLAG_ZUO_ZERO_COME; bit FLAG_YOU_ZERO_COME; bit FLAG_BAONUAN_ZERO_COME; /**************************/ bit FLAG_QIAN_SCR_ON,FLAG_HOU_SCR_ON,FLAG_ZUO_SCR_ON,FLAG_YOU_SCR_ON,FLAG_BAONUAN_SCR_ON; unsigned char QIAN_SCR_ON_1MS_DELAY,HOU_SCR_ON_1MS_DELAY,ZUO_SCR_ON_1MS_DELAY,YOU_SCR_ON_1MS_DELAY,BAONUAN_SCR_ON_1MS_DELAY; void IO_INIT() { TRISC0=0; TRISC1=0; TRISB0=0; TRISB1=0; TRISB2=0; TRISB3=0; TRISB4=0; TRISA4=0; TRISA3=0; TRISA0=0; TRISA1=0; TRISA2=0; TRISA5=1; } void TIMER_INIT() { PIE2 = 0; PIE1 = 0B00000010; PR2 = 250; //8M下将TMR2设置为125us中断 T2CON = 4; //使能定时器2 INTCON = 0XC0; //使能中断 } void DEAL_RX_DATA() { if(Rx_Flag) { Rx_Flag=0; if(RX_Dat&0x01) { } else { } if(RX_Dat&0x02) { } else { } } FLAG_QIAN_HEAT_ON=1; FLAG_HOU_HEAT_ON=1; FLAG_ZUO_HEAT_ON=1; FLAG_YOU_HEAT_ON=1; FLAG_BAONUAN_HEAT_ON=1; QIAN_OPEN_GEAR=10; //2的倍数 HOU_OPEN_GEAR=10; ZUO_OPEN_GEAR=10; YOU_OPEN_GEAR=10; BAONUAN_OPEN_GEAR=10; COOKING_SCR_IO=1; } void interrupt time0(void) { static unsigned char _1MS_DELAY; if(TMR2IF) { TMR2IF = 0; _1MS_DELAY++; if(_1MS_DELAY>=8) { _1MS_DELAY=0; FLAG_1MS=1; } if(FLAG_QIAN_SCR_ON) { QIAN_SCR_IO=0; QIAN_SCR_ON_1MS_DELAY++; if(QIAN_SCR_ON_1MS_DELAY>=12) { QIAN_SCR_ON_1MS_DELAY=0; QIAN_SCR_IO=1; FLAG_QIAN_SCR_ON=0; } } else { QIAN_SCR_ON_1MS_DELAY=0; QIAN_SCR_IO=1; } if(FLAG_HOU_SCR_ON) { HOU_SCR_IO=0; HOU_SCR_ON_1MS_DELAY++; if(HOU_SCR_ON_1MS_DELAY>=12) { HOU_SCR_ON_1MS_DELAY=0; HOU_SCR_IO=1; FLAG_HOU_SCR_ON=0; } } else { HOU_SCR_ON_1MS_DELAY=0; HOU_SCR_IO=1; } if(FLAG_ZUO_SCR_ON) { ZUO_SCR_IO=0; ZUO_SCR_ON_1MS_DELAY++; if(ZUO_SCR_ON_1MS_DELAY>=12) { ZUO_SCR_ON_1MS_DELAY=0; ZUO_SCR_IO=1; FLAG_ZUO_SCR_ON=0; } } else { ZUO_SCR_ON_1MS_DELAY=0; ZUO_SCR_IO=1; } if(FLAG_YOU_SCR_ON) { YOU_SCR_IO=0; YOU_SCR_ON_1MS_DELAY++; if(YOU_SCR_ON_1MS_DELAY>=12) { YOU_SCR_ON_1MS_DELAY=0; YOU_SCR_IO=1; FLAG_YOU_SCR_ON=0; } } else { YOU_SCR_ON_1MS_DELAY=0; YOU_SCR_IO=1; } if(FLAG_BAONUAN_SCR_ON) { BAONUAN_SCR_IO=0; BAONUAN_SCR_ON_1MS_DELAY++; if(BAONUAN_SCR_ON_1MS_DELAY>=12) { BAONUAN_SCR_ON_1MS_DELAY=0; BAONUAN_SCR_IO=1; FLAG_BAONUAN_SCR_ON=0; } } else { BAONUAN_SCR_ON_1MS_DELAY=0; BAONUAN_SCR_IO=1; } /**********************读过零信号******************************/ if(!FLAG_ZERO_CHECK) { FLAG_ZERO_CHECK=1; FLAG_LAST_ZERO_STATE=(unsigned char)ZERO_IO; } if(FLAG_ZERO_CHECK) { if(FLAG_LAST_ZERO_STATE!=ZERO_IO) //过零来了 { FLAG_ZERO_CHECK=0; FLAG_QIAN_ZERO_COME=1; FLAG_HOU_ZERO_COME=1; FLAG_ZUO_ZERO_COME=1; FLAG_YOU_ZERO_COME=1; FLAG_BAONUAN_ZERO_COME=1; } } /**********************读过零信号******************************/ /**********************前可控硅驱动*********************/ if(FLAG_QIAN_HEAT_ON) //工作标志位 { if(FLAG_QIAN_ZERO_COME) { FLAG_QIAN_ZERO_COME=0; QIAN_OPEN_SCR_ZERO_DELAY=0; QIAN_OPEN_GEAR1=QIAN_OPEN_GEAR; if(QIAN_OPEN_GEAR1<=2) QIAN_OPEN_GEAR1=2; if(QIAN_OPEN_GEAR1>=10) QIAN_OPEN_GEAR1=10; if(QIAN_OPEN_GEAR1==10) { FLAG_QIAN_OPEN_SCR=1; } else { QIAN_OPEN_2CI_COUNT++; if(QIAN_OPEN_2CI_COUNT<=QIAN_OPEN_GEAR1) { FLAG_QIAN_OPEN_SCR=1; } if(QIAN_OPEN_2CI_COUNT==1) { QIAN_REC_TIME=0; } else { QIAN_REC_TIME=2; } if(QIAN_OPEN_2CI_COUNT>=10) QIAN_OPEN_2CI_COUNT=0; //最大开10个周期 } } if(FLAG_QIAN_OPEN_SCR) { QIAN_OPEN_SCR_ZERO_DELAY++; if(QIAN_OPEN_SCR_ZERO_DELAY>=77-QIAN_REC_TIME) //78 { QIAN_OPEN_SCR_ZERO_DELAY=0; FLAG_QIAN_SCR_ON=1; FLAG_QIAN_OPEN_SCR=0; } } } else { QIAN_OPEN_SCR_ZERO_DELAY=0; QIAN_REC_TIME=0; FLAG_QIAN_OPEN_SCR=0; FLAG_QIAN_ZERO_COME=0; FLAG_QIAN_SCR_ON=0; } /**********************可控硅驱动END******************************/ if(FLAG_HOU_HEAT_ON) //工作标志位 { if(FLAG_HOU_ZERO_COME) { FLAG_HOU_ZERO_COME=0; HOU_OPEN_SCR_ZERO_DELAY=0; HOU_OPEN_GEAR1=HOU_OPEN_GEAR; if(HOU_OPEN_GEAR1<=2) HOU_OPEN_GEAR1=2; if(HOU_OPEN_GEAR1>=10) HOU_OPEN_GEAR1=10; if(HOU_OPEN_GEAR1==10) { FLAG_HOU_OPEN_SCR=1; } else { HOU_OPEN_2CI_COUNT++; if(HOU_OPEN_2CI_COUNT<=HOU_OPEN_GEAR1) { FLAG_HOU_OPEN_SCR=1; } if(HOU_OPEN_2CI_COUNT==1) { HOU_REC_TIME=0; } else { HOU_REC_TIME=2; } if(HOU_OPEN_2CI_COUNT>=10) HOU_OPEN_2CI_COUNT=0; //最大开10个周期 } } if(FLAG_HOU_OPEN_SCR) { HOU_OPEN_SCR_ZERO_DELAY++; if(HOU_OPEN_SCR_ZERO_DELAY>=77-HOU_REC_TIME) //78 { HOU_OPEN_SCR_ZERO_DELAY=0; FLAG_HOU_SCR_ON=1; FLAG_HOU_OPEN_SCR=0; } } } else { HOU_OPEN_SCR_ZERO_DELAY=0; HOU_REC_TIME=0; FLAG_HOU_OPEN_SCR=0; FLAG_HOU_ZERO_COME=0; FLAG_HOU_SCR_ON=0; } if(FLAG_ZUO_HEAT_ON) //工作标志位 { if(FLAG_ZUO_ZERO_COME) { FLAG_ZUO_ZERO_COME=0; ZUO_OPEN_SCR_ZERO_DELAY=0; ZUO_OPEN_GEAR1=ZUO_OPEN_GEAR; if(ZUO_OPEN_GEAR1<=2) ZUO_OPEN_GEAR1=2; if(ZUO_OPEN_GEAR1>=10) ZUO_OPEN_GEAR1=10; if(ZUO_OPEN_GEAR1==10) { FLAG_ZUO_OPEN_SCR=1; } else { ZUO_OPEN_2CI_COUNT++; if(ZUO_OPEN_2CI_COUNT<=ZUO_OPEN_GEAR1) { FLAG_ZUO_OPEN_SCR=1; } if(ZUO_OPEN_2CI_COUNT==1) { ZUO_REC_TIME=0; } else { ZUO_REC_TIME=2; } if(ZUO_OPEN_2CI_COUNT>=10) ZUO_OPEN_2CI_COUNT=0; //最大开10个周期 } } if(FLAG_ZUO_OPEN_SCR) { ZUO_OPEN_SCR_ZERO_DELAY++; if(ZUO_OPEN_SCR_ZERO_DELAY>=77-ZUO_REC_TIME) //78 { ZUO_OPEN_SCR_ZERO_DELAY=0; FLAG_ZUO_SCR_ON=1; FLAG_ZUO_OPEN_SCR=0; } } } else { ZUO_OPEN_SCR_ZERO_DELAY=0; ZUO_REC_TIME=0; FLAG_ZUO_OPEN_SCR=0; FLAG_ZUO_ZERO_COME=0; FLAG_ZUO_SCR_ON=0; } if(FLAG_YOU_HEAT_ON) //工作标志位 { if(FLAG_YOU_ZERO_COME) { FLAG_YOU_ZERO_COME=0; YOU_OPEN_SCR_ZERO_DELAY=0; YOU_OPEN_GEAR1=YOU_OPEN_GEAR; if(YOU_OPEN_GEAR1<=2) YOU_OPEN_GEAR1=2; if(YOU_OPEN_GEAR1>=10) YOU_OPEN_GEAR1=10; if(YOU_OPEN_GEAR1==10) { FLAG_YOU_OPEN_SCR=1; } else { YOU_OPEN_2CI_COUNT++; if(YOU_OPEN_2CI_COUNT<=YOU_OPEN_GEAR1) { FLAG_YOU_OPEN_SCR=1; } if(YOU_OPEN_2CI_COUNT==1) { YOU_REC_TIME=0; } else { YOU_REC_TIME=2; } if(YOU_OPEN_2CI_COUNT>=10) YOU_OPEN_2CI_COUNT=0; //最大开10个周期 } } if(FLAG_YOU_OPEN_SCR) { YOU_OPEN_SCR_ZERO_DELAY++; if(YOU_OPEN_SCR_ZERO_DELAY>=77-YOU_REC_TIME) //78 { YOU_OPEN_SCR_ZERO_DELAY=0; FLAG_YOU_SCR_ON=1; FLAG_YOU_OPEN_SCR=0; } } } else { YOU_OPEN_SCR_ZERO_DELAY=0; YOU_REC_TIME=0; FLAG_YOU_OPEN_SCR=0; FLAG_YOU_ZERO_COME=0; FLAG_YOU_SCR_ON=0; } if(FLAG_BAONUAN_HEAT_ON) //工作标志位 { if(FLAG_BAONUAN_ZERO_COME) { FLAG_BAONUAN_ZERO_COME=0; BAONUAN_OPEN_SCR_ZERO_DELAY=0; BAONUAN_OPEN_GEAR1=BAONUAN_OPEN_GEAR; if(BAONUAN_OPEN_GEAR1<=2) BAONUAN_OPEN_GEAR1=2; if(BAONUAN_OPEN_GEAR1>=10) BAONUAN_OPEN_GEAR1=10; if(BAONUAN_OPEN_GEAR1==10) { FLAG_BAONUAN_OPEN_SCR=1; } else { BAONUAN_OPEN_2CI_COUNT++; if(BAONUAN_OPEN_2CI_COUNT<=BAONUAN_OPEN_GEAR1) { FLAG_BAONUAN_OPEN_SCR=1; } if(BAONUAN_OPEN_2CI_COUNT==1) { BAONUAN_REC_TIME=0; } else { BAONUAN_REC_TIME=2; } if(BAONUAN_OPEN_2CI_COUNT>=10) BAONUAN_OPEN_2CI_COUNT=0; //最大开10个周期 } } if(FLAG_BAONUAN_OPEN_SCR) { BAONUAN_OPEN_SCR_ZERO_DELAY++; if(BAONUAN_OPEN_SCR_ZERO_DELAY>=77-BAONUAN_REC_TIME) //78 { BAONUAN_OPEN_SCR_ZERO_DELAY=0; FLAG_BAONUAN_SCR_ON=1; FLAG_BAONUAN_OPEN_SCR=0; } } } else { BAONUAN_OPEN_SCR_ZERO_DELAY=0; BAONUAN_REC_TIME=0; FLAG_BAONUAN_OPEN_SCR=0; FLAG_BAONUAN_ZERO_COME=0; FLAG_BAONUAN_SCR_ON=0; } if (Rx_Read_Once==0) //读一次现在的IO口状态 { Rx_Read_Once=1; Rx_Read_Now=RX_TX_IO; } if (Rx_Read_Now!=RX_TX_IO) //IO口电平发生了变化 { Rx_Read_Once=0; Rx_Change=1; } switch (Rx_Step) { case 0: if (RX_TX_IO==0) { Rx_Step=1; } Rx_Start_Count=0; break; case 1: if (RX_TX_IO==0) { Rx_Start_Count++; } if (RX_TX_IO==1) { if (Rx_Start_Count>=21&&Rx_Start_Count<=38) //9ms 9000/125=72 { Rx_Start_Count=0; Rx_Step=2; } else { Rx_Start_Count=0; Rx_Step=0; } } break; case 2: if (RX_TX_IO==1) { Rx_Start_Count1++; } if (RX_TX_IO==0) { if (Rx_Start_Count1>=30&&Rx_Start_Count1<=40) //4.5ms 4500/125=36 { Rx_Step=3; //UART0_SendByte(Rx_Start_Count1); Rx_Start_Count1=0; Rx_Change=0; Rx_Read_Once=0; } else { Rx_Start_Count1=0; Rx_Step=0; } } break; case 3: if (Rx_Dat_Bit==0) //数一下低电平的时间 { RX_Dat_Low_Count++; if (Rx_Change==1) //IO口由低变成高了 { Rx_Change=0; Rx_Read_Once=0; Rx_Dat_Bit=1; } } if (Rx_Dat_Bit==1) //数完低电平 数高电平 { RX_Dat_High_Count++; if (Rx_Change==1) //IO口由高变成低 { Rx_Change=0; Rx_Read_Once=0; Rx_Dat_Bit=0; Rx_Dat_Bit1=1; } } if (Rx_Dat_Bit1) { Rx_Dat_Bit1=0; RX_Dat1=RX_Dat1<<1; if (RX_Dat_Low_Count>=3&&RX_Dat_High_Count>=11) //收到拉低0.5MS 拉高1.5 { RX_Dat=(RX_Dat1 |= 0x01); //收到1 } if (RX_Dat_Low_Count>=3&&RX_Dat_High_Count<=6&&RX_Dat_High_Count>=3) //收到拉低0.5MS 拉高0.5MS { RX_Dat=RX_Dat1; //收到0 //0 } RX_Dat_Low_Count=0; RX_Dat_High_Count=0; RX_Count++; if (RX_Count>=8) //收8位数据 { RX_Count=0; RX_Dat=RX_Dat1; Rx_Step=0; Rx_Flag=1; RX_Dat1=0; // FLAG_START_RX=0; } } break; default: break; } } else { PIR1 = 0; PIR2 = 0; } }