📄 gas2.c
字号:
PORTBbits.QLXS=0x01;
}
}
else
PORTBbits.QLXS=0x01;
}
void SET_LED_BIT(void)
{
if(TIMER_IF.onebit.LED_IF)
{
// TIMER_IF.onebit.LED_IF=0x00;
if(QLXS_VALUE & 0x80)
LED_WIDTH=0x32;
else
LED_WIDTH=0xA0;
REC_FLAG.onebit.LED_EN=1;
QL_BIT_CNT--;
if(QL_BIT_CNT==0x00)
TIMER_IF.onebit.LED_IF=0x00;
QLXS_VALUE=QLXS_VALUE<<0x01;
}
}
void FILTER_SW(void)
{
unsigned char temp;
temp=(SW_OLD.AllBits ^ PORTB) & 0x02;
if(temp)
{
if(SW_FILTER==0x00){
SW_OLD.AllBits=~SW_OLD.AllBits;
SW_FILTER=0x05;
}
else
SW_FILTER--;
}
else
{
SW_FILTER=0x05;
}
}
void TURN_TO_GAS(void)
{
if( MONITOR_FLAG.onebit.POWER_ON_OK
&& MONITOR_FLAG.onebit.PULSE_EXIST
&& SW_OLD.onebit.SW_SIG
&&(QLSR>=LEDV1)
)
{
if(WATER_TEMP>GAS_ON_TEMP)
GAS_FLAG.onebit.TEMP_OK=0x01;
}
else
GAS_FLAG.onebit.TEMP_OK=0x00;
if(WATER_TEMP<GAS_OFF_TEMP)
{
GAS_FLAG.onebit.TEMP_OK=0x00;
}
if(GAS_FLAG.onebit.TEMP_OK)
{
if(!GAS_FLAG.onebit.SPEED_OK)
{
if(PERIOD_ADDR<TURN_SPEED)
{
if(TIMER_IF.onebit.SPEED_OK_IF)
{
TIMER_IF.onebit.SPEED_OK_IF=0x00;
SPEED_OK_FILTER--;
if(SPEED_OK_FILTER==0x00){
GAS_FLAG.onebit.SPEED_OK=0x01;
}
}
}
else
{
GAS_FLAG.onebit.SPEED_OK=0x00;
SPEED_OK_FILTER=0x03;
}
}
else
{
SPEED_OK_FILTER=0x03;
}
}
else
{
SPEED_OK_FILTER=0x03;
GAS_FLAG.onebit.SPEED_OK=0x00;
}
if(GAS_FLAG.onebit.SPEED_OK)
PORTD=PORTD | 0xC0;
else
PORTD=0x00;
}
void PROCESS_UART(void)
{
if(!REC_FLAG.onebit.PROG_BUSY)
{
if((UART_DATA[9]==0x91)&&REC_FLAG.onebit.RD_EN)
{
unsigned long int addr,temp;
unsigned char data;
UART_DATA[9]=0x00;
temp=UART_DATA[0] & 0x0f;
addr=temp;
temp=UART_DATA[1] & 0x0f;
addr=addr | (temp<<4);
temp=UART_DATA[2] & 0x0f;
addr=addr | (temp<<8);
addr=addr+0x2000;
data=CODE_READ(addr);
UART_SEND((data & 0x0f)| 0x30);
UART_SEND(((data>>4) & 0x0f)| 0x40);
UART_SEND(0x91);
}
if((UART_DATA[9]==0x92)&& REC_FLAG.onebit.WR_EN)
{
unsigned long int addr,temp;
unsigned char data;
UART_DATA[9]=0x00;
temp=UART_DATA[0] & 0x0f;
addr=temp;
temp=UART_DATA[1] & 0x0f;
addr=addr | (temp<<4);
temp=UART_DATA[2] & 0x0f;
addr=addr | (temp<<8);
addr=addr+0x2000;
data= (UART_DATA[3] & 0x0f) | ((UART_DATA[4]&0x0F)<<4);
CODEwritePage(addr,data);
UART_SEND(0x92);
}
}
}
void INI_PORT(void)
{
TRISA=0xFF;
TRISB= 0xff
& (~0x01) //power open
& (~0x04); //qlxs
TRISC=0xff & (~0x40);
TRISD=~0xff;
//TRISC=0x3f;
TRISE=0x7;
//PORTB=0x00;
PORTBbits.POWER_OPEN=0x01;
}
void INI_TIMER0(void)
{
OpenTimer0( TIMER_INT_ON &
T0_SOURCE_INT &
T0_16BIT &
T0_PS_1_1);
return;
}
void INI_UART(void){
OpenUSART( USART_TX_INT_OFF &
USART_RX_INT_ON &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
//USART_SINGLE_RX &
USART_BRGH_HIGH,
0x40 ); //0x56 0x60 0x5b
}
void INI_DATA(void)
{
TMR0A=0xa;
TMR0B=0xa;
TMR0C=0xa;
RCONbits.IPEN=1; //中断兼容模式,没有优先级之分
INTCON=0;
INTCONbits.T0IE=1; //定时器0使能中断
INTCON2=0;
INTCON2bits.TMR0IP=1;
INTCON3=0;
PIR1=0;
PIR2=0;
PIE1=0;
PIE1bits.RCIE=1;
PIE2=0;
IPR1=0xFF;
IPR2=0xFF;
POWER_ON_TIMER=0x03;
MONITOR_FLAG.onebit.POWER_ON_OK=0x00;
MONITOR_FLAG.onebit.PULSE_EXIST=0x00;
PULSE_DOG_CNT=0x0a;
GAS_FLAG.AllBits=0x00;
SW_FILTER=0x05;
SW_OLD.AllBits=0x00;
REC_FLAG.AllBits=0x00;
SPEED_LEVEL=0;
ZKYL_LEVEL=0;
}
void AD_SAMPLE(void)
{
if(TIMER_IF.onebit.SAMPLE_IF)
{
unsigned long ad_addr;
int ad_temp;
OpenADC( ADC_FOSC_RC &
ADC_RIGHT_JUST &
ADC_8ANA_0REF,
ADC_CH0 &
ADC_INT_OFF );
Delay10TCYx( 5 );
ConvertADC();
while( BusyADC() );
ZKYL = (ReadADC()>>2)&0xff;
CloseADC();
OpenADC( ADC_FOSC_RC &
ADC_RIGHT_JUST &
ADC_8ANA_0REF,
ADC_CH1 &
ADC_INT_OFF );
Delay10TCYx( 5);
ConvertADC();
while( BusyADC() );
RQYL = (ReadADC()>>2)&0xff;
CloseADC();
OpenADC( ADC_FOSC_RC &
ADC_RIGHT_JUST &
ADC_8ANA_0REF,
ADC_CH2 &
ADC_INT_OFF );
Delay10TCYx( 5 );
ConvertADC();
while( BusyADC() );
QYCG = (ReadADC()>>2)&0xff;
CloseADC();
OpenADC( ADC_FOSC_RC &
ADC_RIGHT_JUST &
ADC_8ANA_0REF,
ADC_CH3 &
ADC_INT_OFF );
Delay10TCYx( 5);
ConvertADC();
while( BusyADC() );
HYCG = (ReadADC()>>2)&0xff;
CloseADC();
OpenADC( ADC_FOSC_RC &
ADC_RIGHT_JUST &
ADC_8ANA_0REF,
ADC_CH4 &
ADC_INT_OFF );
Delay10TCYx( 5 );
ConvertADC();
while( BusyADC() );
WATER_VALUE = (ReadADC()>>2)&0xff;
CloseADC();
OpenADC( ADC_FOSC_32 &
ADC_RIGHT_JUST &
ADC_8ANA_0REF,
ADC_CH6 &
ADC_INT_OFF );
Delay100TCYx( 5 );
ConvertADC();
while( BusyADC() );
QLSR_TIMER=QLSR_TIMER+1;
ad_temp=(ReadADC()>>2)&0x00ff;
QLSR_SUM=QLSR_SUM+ad_temp;
CloseADC();
if(QLSR_TIMER>=4){
QLSR_SUM=QLSR_SUM/4;
QLSR=QLSR_SUM;
QLSR_SUM=0;
QLSR_TIMER=0;
}
LEDV5=LED_TABLE[0];
LEDV4=LED_TABLE[1];
LEDV3=LED_TABLE[2];
LEDV2=LED_TABLE[3];
LEDV1=LED_TABLE[4];
TURN_SPEED=TURN_SPEED_TABLE;
GAS_ON_TEMP=GAS_ON_TEMP_TABLE;
GAS_OFF_TEMP=GAS_OFF_TEMP_TABLE;
PULSE_FLAG.AllBits=PULSE_FLAG_TABLE;
if(WATER_VALUE>0xFD)
WATER_VALUE=0xFD;
WATER_TEMP=WATER_TABLE[WATER_VALUE+0x02];
if(ZKYL>0xFD)
ZKYL=0xFD;
ZKYL_LEVEL=ZKYL_LEVEL_TABLE[ZKYL];
if(ZKYL_LEVEL>0x18)
ZKYL_LEVEL=0x18;
//addr=SPEED_LEVEL;
//addr=addr * 0x10 + ZKYL_LEVEL +0x02+0x2800;
//JYMK=CODE_READ(addr);
ad_addr=SPEED_LEVEL;
ad_addr=ad_addr * 0x10 + ZKYL_LEVEL +0x02;
JYMK=SPEED_ZKYL_TABLE[ad_addr];
TIMER_IF.onebit.SAMPLE_IF=0;
}
}
void SEND_STATUS(void)
{
/*
if(TIMER_IF.onebit.STATUS_SEND_IF)
{
UART_SEND(0xAA);
UART_SEND(0x55);
UART_SEND(PYMK);
TIMER_IF.onebit.STATUS_SEND_IF=0;
}
return;
*/
if(TIMER_IF.onebit.STATUS_SEND_IF)
{
UART_SEND( ( REC_FLAG.AllBits & 0x0f) | 0xa0);
UART_SEND((PULSE_FLAG.AllBits & 0x0f) | 0xb0);
SEND_DATA(GAS_ON_TEMP);
UART_SEND(0xC1);
SEND_DATA(GAS_OFF_TEMP);
UART_SEND(0xC2);
SEND_DATA(TURN_SPEED);
UART_SEND(0xC3);
SEND_DATA(SW_OLD.AllBits);
UART_SEND(0xC4);
SEND_DATA(GAS_FLAG.AllBits);
UART_SEND(0xC5);
// _asm CLRWDT _endasm
SEND_DATA(LEDV5);
UART_SEND(0xC6);
SEND_DATA(LEDV4);
UART_SEND(0xC7);
SEND_DATA(LEDV3);
UART_SEND(0xC8);
SEND_DATA(LEDV2);
UART_SEND(0xC9);
SEND_DATA(LEDV1);
UART_SEND(0xCA);
// _asm CLRWDT _endasm
SEND_DATA(ZKYL);
UART_SEND(0x80);
SEND_DATA(RQYL);
UART_SEND(0x81);
SEND_DATA(QYCG);
UART_SEND(0x82);
SEND_DATA(HYCG);
UART_SEND(0x83);
// _asm CLRWDT _endasm
SEND_DATA(WATER_TEMP);
UART_SEND(0x84);
SEND_DATA(QLSR);
UART_SEND(0x86);
SEND_DATA(PYMK);
UART_SEND(0x88);
// _asm CLRWDT _endasm
SEND_DATA(PZ_PERIOD);
UART_SEND(0x8a);
SEND_DATA(PZ_PERIOD>>8);
UART_SEND(0x8b);
SEND_DATA(SPEED_LEVEL);
UART_SEND(0x8C);
// _asm CLRWDT _endasm
//SEND_DATA(PYMK_LEVEL);
SEND_DATA(0x01);
UART_SEND(0x8D);
SEND_DATA(ZKYL_LEVEL);
UART_SEND(0x8E);
SEND_DATA(JYMK);
UART_SEND(0x8F);
TIMER_IF.onebit.STATUS_SEND_IF=0;
}
}
void UART_SEND(unsigned char data)
{
while (BusyUSART());
WriteUSART(data);
}
void SEND_DATA(unsigned char data)
{
UART_SEND((data & 0x0f) | 0x60);
UART_SEND( ( (data >>4) & 0x0f) | 0x70);
}
// _________________________________________________________________________________________________
unsigned char CODE_READ(unsigned long addr)
{
TBLPTRL = *((unsigned char *)&addr);
// TBLPTRL &= 0xfe;
TBLPTRH =*((unsigned char *)&addr+1);
TBLPTRU =*((unsigned char *)&addr+2);
TableRead_PostInc();
return TABLAT;
}//
void CODEwritePage (unsigned long addr,unsigned char data)
{
signed char i,j;
unsigned char temp[64];
TBLPTRL =*((unsigned char *)&addr);
TBLPTRH =*((unsigned char *)&addr+1);
TBLPTRU =*((unsigned char *)&addr+2);
TBLPTRL &= 0xC0;
for (i=0;i<=63;i++)
{
TableRead_PostInc();
temp[i] = TABLAT;
}
temp[addr & 0x3f]=data;
while (EECON1bits.WR) {};
TBLPTRU = *((unsigned char *)&addr+2);
TBLPTRH = *((unsigned char *)&addr+1);
TBLPTRL = *((unsigned char *)&addr);
TBLPTRL &= 0xC0;
EECON1bits.EEPGD = 1;
EECON1bits.CFGS = 0;
EECON1bits.WREN = 1;
EECON1bits.FREE = 1;
INTCONbits.GIEL = 0;
INTCONbits.GIEH = 0;
EECON2 = 0x55;
EECON2 = 0xAA;
EECON1bits.WR = 1;
Nop();
INTCONbits.GIEL = 1;
INTCONbits.GIEH = 1;
TableRead_PostDec();
FSR0H = ((((unsigned int)&temp[0])>>8)&0xFF);
FSR0L = (((unsigned int)&temp[0])&0xFF);
for(j=0;j<8;j++){
for (i=0;i<8;i++) {
TABLAT = (POSTINC0);
TableWrite_PreInc();
}
EECON1bits.EEPGD = 1;
EECON1bits.CFGS = 0;
EECON1bits.WREN = 1;
INTCONbits.GIEL = 0;
INTCONbits.GIEH = 0;
EECON2 = 0x55;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -