📄 wqxqz.c
字号:
{
dataarea = dataarea + 1;
rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
rxdatapoint ++;
}
else
{
if(systemflg & 0x10)//for timer to read meter receive louyu's ack code
{
if(rxtxdatabuf[rxdatapoint] == 0x81)
{
dataarea = 21;
rxdatapoint++;
rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
}
}
else
{
dataarea = 0;
rxdatapoint = 0;
}
}
break;
//receive 4 byte materaddress
case 3: if((rxtxdatabuf[rxdatapoint] == mainnumber[0]) || (rxtxdatabuf[rxdatapoint] == 0xaa))
{
dataarea ++;
rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
rxdatapoint ++;
}
else
{
dataarea = 0;
rxdatapoint = 0;
}
break;
case 4: if((rxtxdatabuf[rxdatapoint] == mainnumber[1]) || (rxtxdatabuf[rxdatapoint] == 0xaa))
{
dataarea ++;
rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
rxdatapoint ++;
}
else
{
dataarea = 0;
rxdatapoint = 0;
}
break;
case 5: if((rxtxdatabuf[rxdatapoint] == mainnumber[2]) || (rxtxdatabuf[rxdatapoint] == 0xaa))
{
dataarea ++;
rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
rxdatapoint ++;
}
else
{
dataarea = 0;
rxdatapoint = 0;
}
break;
case 6: if((rxtxdatabuf[rxdatapoint] == mainnumber[3]) || (rxtxdatabuf[rxdatapoint] == 0xaa))
{
dataarea ++;
rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
rxdatapoint ++;
}
else
{
dataarea = 0;
rxdatapoint = 0;
}
break;
//receive 1byte CTL0
case 7: if(rxtxdatabuf[rxdatapoint] == 0x3b)
{
dataarea ++;
rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
rxdatapoint ++;
}
else
{
dataarea = 0;
rxdatapoint = 0;
}
break;
//rcecive 1byte data code length
case 8: dataarea ++;
rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
rxdatapoint ++;
break;
//receive n byte data
case 9: rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
rxdatapoint = rxdatapoint + 1;
if(rxdatapoint == (rxtxdatabuf[7] + 8))
dataarea ++;
break;
//receive cs // chaek cs code
case 10: if(rxtxdatabuf[rxdatapoint] == rxtxchksum)
{
dataarea ++;
rxdatapoint ++;
}
else
{
dataarea = 0;
rxdatapoint = 0;
}
break;
case 11: if(rxtxdatabuf[rxdatapoint] == 0x16)
{
dataarea=0;
rxdatapoint=0;
systemflg |= 0x80; //set flger
}
else
{
dataarea = 0;
rxdatapoint = 0;
}
break;
//////////////////////////////////////////////////////////////////
case 12: if(rxtxdatabuf[rxdatapoint] == 0x4f)
dataarea = dataarea + 1;
else
dataarea = 0;
break;
case 13: if(rxtxdatabuf[rxdatapoint] == 0x20)
dataarea = dataarea + 1;
else
dataarea = 0;
break;
case 14: if(rxtxdatabuf[rxdatapoint] == 0x43)
dataarea = dataarea + 1;
else
dataarea = 0;
break;
case 15: if(rxtxdatabuf[rxdatapoint] == 0x41)
dataarea = dataarea + 1;
else
dataarea = 0;
break;
case 16: if(rxtxdatabuf[rxdatapoint] == 0x52)
dataarea = dataarea + 1;
else
dataarea = 0;
break;
case 17: if(rxtxdatabuf[rxdatapoint] == 0x52)
dataarea = dataarea + 1;
else
dataarea = 0;
break;
case 18: if(rxtxdatabuf[rxdatapoint] == 0x49)
dataarea = dataarea + 1;
else
dataarea = 0;
break;
case 19: if(rxtxdatabuf[rxdatapoint] == 0x45)
dataarea = dataarea + 1;
else
dataarea = 0;
break;
case 20: if(rxtxdatabuf[rxdatapoint] == 0x52)
{
dataarea = 0;
SYS_TELEOFF();
}
else
dataarea = 0;
break;
/////////////////////////////////////////////////////////////////
case 21: dataarea = dataarea + 1;
rxdatapoint++;
rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
case 22: dataarea = dataarea + 1;
rxdatapoint++;
rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
case 23: dataarea = dataarea + 1;
rxdatapoint++;
rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
case 24: dataarea = dataarea + 1;
rxdatapoint++;
rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
case 25: if(rxtxdatabuf[rxdatapoint] == 0xa9 )
{
dataarea = dataarea + 1;
rxdatapoint++;
rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
}
else
{
dataarea = 0;
rxdatapoint = 0;
}
case 26: if(rxtxdatabuf[rxdatapoint] == 0x03)
{
dataarea = dataarea + 1;
rxdatapoint++;
rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
}
else
{
dataarea = 0;
rxdatapoint = 0;
}
case 27: if(rxtxdatabuf[rxdatapoint] == 0x90)
{
dataarea = dataarea + 1;
rxdatapoint++;
rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
}
else
{
dataarea = 0;
rxdatapoint = 0;
}
case 28: if(rxtxdatabuf[rxdatapoint] == 0x2f)
{
dataarea = dataarea + 1;
rxdatapoint++;
rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
}
else
{
dataarea = 0;
rxdatapoint = 0;
}
case 29: if(rxtxdatabuf[rxdatapoint] == 0x01)
{
dataarea = dataarea + 1;
rxdatapoint++;
rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
}
else
{
dataarea = 0;
rxdatapoint = 0;
}
case 30: if(rxtxdatabuf[rxdatapoint] == rxtxchksum)
{
dataarea = dataarea + 1;
rxdatapoint++;
rxtxchksum = rxtxchksum + rxtxdatabuf[rxdatapoint];
}
else
{
dataarea = 0;
rxdatapoint = 0;
}
case 31: if(rxtxdatabuf[rxdatapoint] == 0x16)
{
systemflg |= 0x08;
}
dataarea = 0;
rxdatapoint = 0;
rxtxchksum = 0;
default: dataarea=0;
rxdatapoint=0;
}
}
//////////////////////////////////////////
//TA0 INTERRUPT ISR
//
//////////////////////////////////////////
#pragma vector=TIMERA0_VECTOR
__interrupt void taisr (void)
{
if(clearwdtcounter<10)
{
CLRWDT();
clearwdtcounter++;
return;
}
else
{
clearwdtcounter=0;
LED_ON;
CLRWDT();
uchar tempset2,tempset3;
ReadTime(systemtime);
READ_E2PROM(&tempset2,E2_METER_DAY_BESET,0X01);
CLRWDT();
if(tempset2=='S')
{
READ_E2PROM(&tempset2,E2_ADDR_COUNTER,0X01);
if((tempset2 <= 49))//do it have meter addrsee?
{
READ_E2PROM(meterday,E2_METER_DAY,0X07);
CLRWDT();
for(tempset3=0;tempset3<7;tempset3++)
{
CLRWDT();
if(systemtime[3]==meterday[tempset3])
{
CLRWDT();
if(systemtime[2]==0)
if(systemtime[1]==0)
{
systemflg |= 0x10; //meterday is come
//_BIC_SR_IRQ(LPM3_bits);
CLRWDT();
}
}
}
}
}
CLRWDT();
DELAY_ms(30);
CLRWDT();
LED_OFF;
}
}
/////////////////////////////////////
//UART0TX ISR
//
//
/////////////////////////////////////
#pragma vector=UART0TX_VECTOR
__interrupt void uartotx (void)
{
}
//////////////interrupt isr///////////////
//interrupt isr
//
//////////////////////////////////////////
#pragma vector=WDT_VECTOR
__interrupt void WDT_ISR (void)
{
_NOP();
}
////////////////////////////////////
////DELAY ms
////
////
////
///////////////////////////////////
void DELAY_ms(uint ms)//ms=1 DELAY 5ms
{
uint iims;
for(;ms>0;ms--)
{
CLRWDT();
for(iims=800;iims>0;iims--)
_NOP();
}
}
////////////////////////////////////////////////////////////////////////////////
//////////////////// TELEHPONE CHECK ISR ///////////////////////
////////////////////////////////////////////////////////////////////////////////
#pragma vector=PORT2_VECTOR
__interrupt void P20ISR (void)
{
CLRWDT();
P2IFG = 0;
P2IE &= (~0x01); //disable interrupt
//_BIC_SR_IRQ(LPM3_bits);
DELAY_ms(10);
CLRWDT();
if((P2IN & 0x01)==0) //delay some time re_check i/o port
{
CLRWDT();
systemflg |= 0x20;
systemflg |= 0x40;
return;
}
else
{
CLRWDT();
P2IE |= 0x01;
return;
}
}
////////////////////////////////////////////////////////////////////////////////
//////////// LOW POWER CHECK ISR ///////////////////////
////////////////////////////////////////////////////////////////////////////////
#pragma vector=PORT1_VECTOR //
__interrupt void P11ISR (void) //
{ //
P1IFG = 0; //
TACTL &= (~0X0030); //STOP TIMERA0 //
DELAY_ms(100);//delay 1s //
if(!(V_CHECK))
{
DELAY_ms(100); //delay 1s
if(!(V_CHECK))
systemflg |= 0X04; //LOW VOLT FLG BE SET
}
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////E2PROM START
////
////
////
////////////////////////////////////////////////////////////////////////////////
void E2PRON_START (void)
{
E2PROM_SCLL;
E2PROM_SDAH;
E2PROM_SCLH;
_NOP();_NOP();
E2PROM_SDAL;
_NOP();_NOP();
E2PROM_SCLL;
}
//////////////////////////////////
////E2PROM STOP
////
////
////
/////////////////////////////////
void E2PROM_STOP (void)
{
E2PROM_SDAL;
E2PROM_SCLH;
_NOP();_NOP();
E2PROM_SDAH;
_NOP();_NOP();
E2PROM_SCLL;
}
/////////////////////////////////
//// MCU RECEIVE E2PROM ACK
//// MCU_R_ACK==0X00 ON ACK :ERROR
//// MCU_R_ACK==0X01 RECEIVE ACK :OK
////
////////////////////////////////
uchar MCU_R_ACK (void)
{
E2PROM_SCLL;
E2PROM_SDAH;
P1DIR &= (~0X01); //SET P1.0 INPUT FOR SDA
E2PROM_SCLH;
if((P1IN & 0X01))
{
E2PROM_SCLL;
P1DIR |= 0X01; //SET P1.0 OUTPUT
return 0X00;
}
else
{
E2PROM_SCLL;
P1DIR |= 0X01; //SET P1.0 OUTPUT
return 0X01;
}
}
////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -