📄 wqxqz.c
字号:
////MCU SEND ACK TO E2PROM
////
////
////
////////////////////////////////////////
void MCU_T_ACK (void)
{
E2PROM_SCLL;
E2PROM_SDAL;
_NOP();
E2PROM_SCLH;
_NOP();
E2PROM_SCLL;
_NOP();
}
////////////////////////////////////////
////MCU SEND NOACK TO E2PROM
////
////
////
///////////////////////////////////////
void MCU_T_NOACK (void)
{
E2PROM_SDAH;
_NOP();
E2PROM_SCLH;
_NOP();
E2PROM_SCLL;
_NOP();
}
////////////////////////////////////////
////MCU SEND 8BIT(BYTE) DATA TO E2PROM
////
////
////
///////////////////////////////////////
void MCU_T_1BYTE (uchar temp)
{
E2PROM_ENW;
uchar i;
for(i=8;i>0;i--)
{
E2PROM_SCLL;
if(temp&0X80)
E2PROM_SDAH;
else
E2PROM_SDAL;
temp=temp<<1;
E2PROM_SCLH;
}
E2PROM_SCLL;
E2PROM_ENW;
}
/////////////////////////////////////////////
////MCU RECEIVE 8BIT(BYTE) DATA FROM E2PROM
////
////
////
/////////////////////////////////////////////
uchar MCU_R_1BYTE (void)
{
E2PROM_SCLL;
uchar temp1,i;
//E2PROM_SCLL;
P1OUT |= 0X01;
P1DIR &= (~0X01); //SET P1.0 INPUT FOR SDA
for(i=8;i>0;i--)
{
temp1 = (temp1<<1);
E2PROM_SCLH;
if(P1IN & 0X01)
temp1 += 0x01;
E2PROM_SCLL;
}
P1DIR |= 0X01; //SET P1.0 IS OUTPUT FOR SDA
return temp1;
}
////////////////////////////////////////////////////////////////////
////MCU WRITE ONE BYTE DATA TO ONE ADDRESS IN THE E2PROM
////
////
////
////////////////////////////////////////////////////////////////////
void WRITE_E2PROM(uchar *mcu_ramadd,uchar e2promadd,uchar n)//n<=16
{
CLRWDT();
_DINT();
E2PROM_ENW; //WRITE ENABLE
E2PRON_START();
MCU_T_1BYTE(E2PROM_CTLBYTE_W);
MCU_R_ACK();
//MCU_T_1BYTE(0X00);
//MCU_R_ACK();
MCU_T_1BYTE(e2promadd);
MCU_R_ACK();
CLRWDT();
while(n>0)
{
MCU_T_1BYTE(*mcu_ramadd);
MCU_R_ACK();
mcu_ramadd++;
n--;
}
E2PROM_STOP();
DELAY_ms(4);
E2PROM_ENR; //WRITE DISABLE
_EINT();
E2PROM_SCLH;
CLRWDT();
}
/////////////////////////////////////////////////////////////////////////////////////////
void WRITE_1_BYTE_E2PROM (uchar *mcu_ramadd,uchar e2promadd,uchar n)//singend byte write *n
{
CLRWDT();
_DINT();
E2PROM_ENW; //WRITE ENABLE
while(n>0)
{
E2PRON_START();
MCU_T_1BYTE(E2PROM_CTLBYTE_W);
MCU_R_ACK();
//MCU_T_1BYTE(0X00);
//MCU_R_ACK();
MCU_T_1BYTE(e2promadd);
MCU_R_ACK();
MCU_T_1BYTE(*mcu_ramadd);
MCU_R_ACK();
E2PROM_STOP();
DELAY_ms(2);
mcu_ramadd++;
e2promadd++;
n--;
}
E2PROM_ENR; //WRITE DISABLE
_EINT();
E2PROM_SCLH;
}
////////////////////////////////////////////////////////////
////E2PROM READ n BYTES DATA FROM ONE ADDRESS
////
////
////
////////////////////////////////////////////////////////////
void READ_E2PROM(uchar *mcu_ramadd,uchar e2promadd,uchar n)
{
_DINT();
E2PRON_START();
MCU_T_1BYTE(E2PROM_CTLBYTE_W);
MCU_R_ACK();
//MCU_T_1BYTE(0X00);
//MCU_R_ACK();
MCU_T_1BYTE(e2promadd);
MCU_R_ACK();
E2PRON_START();
MCU_T_1BYTE(E2PROM_CTLBYTE_R);
MCU_R_ACK();
while(n>1)
{
*mcu_ramadd = MCU_R_1BYTE();
mcu_ramadd = mcu_ramadd+1;
MCU_T_ACK();
n--;
_NOP();_NOP();
}
*mcu_ramadd = MCU_R_1BYTE();
MCU_T_NOACK();
E2PROM_STOP();
_EINT();
//E2PROM_ENR;
E2PROM_SCLH;
E2PROM_ENR;
}
void INIT_E2PROM(void)
{
uchar temp4;
READ_E2PROM(&temp4,E2PROM_INIT_FLG,1);
if(temp4=='S')
return;
else
{
WRITE_E2PROM(&zero,E2_ADDR_COUNTER,0X01);
//WRITE_E2PROM(&e20h,E2_ADDR_POINT,0X01);
WRITE_E2PROM(&set,E2PROM_INIT_FLG,0X01);
}
}
////////////////////////////////////////////
////uart trancsc data
////
////
////
////////////////////////////////////////////
void UART_T (uchar * txbuf,uchar number)
{
CLRWDT();
for(;number>0;number--)
{
while((U0TCTL&TXEPT)==0);//
TXBUF0=*txbuf;
txbuf++;
}
}
///////////////////////////////////////////
////SET MODEM
////
////
////
///////////////////////////////////////////
void SETMODEM (void)
{
MODPOWON;
//DELAY_ms(200);
LED_ONTIME(100);
UART_T (atq1,6);
//DELAY_ms(30);
LED_ONTIME(15);
UART_T (ate0,6);
//DELAY_ms(30);
LED_ONTIME(15);
UART_T (atd0,7);
//DELAY_ms(30);
LED_ONTIME(15);
UART_T (atr1,7);
//DELAY_ms(30);
LED_ONTIME(15);
UART_T (ats0,7);
//DELAY_ms(30);
LED_ONTIME(15);
UART_T (atw,6);
//DELAY_ms(200);
LED_ONTIME(100);
MODPOWOFF;
}
/*
//////////////////////////////////////////////////
////check MODEM setting
////
////
////
//////////////////////////////////////////////////
void CHK_MODEM(void)
{
}
*/
void ANALYZE_CMD(void)
{
CLRWDT();
RECTIME();
CLRWDT();
switch(rxtxdatabuf[9]) //ANALYZE COMMAND INTO THIER service FUNCTION
{
case 0xfe: SYS_RD_MN(); break;
case 0xfc: SYS_RD_TIME(); break;
case 0xfa: SYS_WR_MN(); break;
case 0xf8: SYS_WR_TIME(); break;
case 0xf6: SYS_POWON(); break;
case 0xf4: SYS_POWOFF(); break;
case 0xf2: SYS_TELEOFF(); break;
case 0xa0: SYS_DOWNLOAD_ADDR(); break;
case 0xa1: SYS_UPLOAD_ADDR(); break;
case 0xa2: SYS_CLEAR_ADDR(); break;
case 0xa3: SYS_READ_STATE(); break;
case 0xa5: SYS_DOWNLOAD_METER_DAY(); break;
case 0xa6: SYS_UPLOAD_METER_DAY(); break;
case 0xa7: SYS_CLEAR_METER_DAY(); break;
default: break;
}
systemflg &= (~0x80);
}
void SYS_RD_MN(void)
{
CLRWDT();
READ_E2PROM(mainnumber,0x03,4); //READ MAIN_NUMBER FROM memory
rxtxdatabuf[2]=mainnumber[0];
rxtxdatabuf[3]=mainnumber[1];
rxtxdatabuf[4]=mainnumber[2];
rxtxdatabuf[5]=mainnumber[3];
rxtxdatabuf[6]=0xbb;
rxtxdatabuf[7]=0x07;
rxtxdatabuf[11]=mainnumber[0];
rxtxdatabuf[12]=mainnumber[1];
rxtxdatabuf[13]=mainnumber[2];
rxtxdatabuf[14]=mainnumber[3];
rxtxdatabuf[15]=ACCOUNT_CHKSUM(15);
rxtxdatabuf[16]=0x16;
UART_T (fe,3);
UART_T (rxtxdatabuf,17);
CLRWDT();
}
void SYS_RD_TIME(void)
{
CLRWDT();
rxtxdatabuf[6]=0xbb;
rxtxdatabuf[7]=0X0A;
ReadTime(systemtime);
rxtxdatabuf[11]=systemtime[0];//sce
rxtxdatabuf[12]=systemtime[1];//min
rxtxdatabuf[13]=systemtime[2];//hour
rxtxdatabuf[14]=systemtime[3];//day
rxtxdatabuf[15]=systemtime[4];//mon
rxtxdatabuf[16]=systemtime[5];//week
rxtxdatabuf[17]=systemtime[6];//year
rxtxdatabuf[18]=ACCOUNT_CHKSUM(18);
rxtxdatabuf[19]=0X16;
UART_T (fe,3);
UART_T (rxtxdatabuf,20);
CLRWDT();
}
void SYS_WR_MN(void)
{
CLRWDT();
rxtxdatabuf[2]=rxtxdatabuf[11];
rxtxdatabuf[3]=rxtxdatabuf[12];
rxtxdatabuf[4]=rxtxdatabuf[13];
rxtxdatabuf[5]=rxtxdatabuf[14];//
mainnumber[0]=rxtxdatabuf[2]; //new mainnumber write to memory
mainnumber[1]=rxtxdatabuf[3];
mainnumber[2]=rxtxdatabuf[4];
mainnumber[3]=rxtxdatabuf[5];
rxtxdatabuf[6]=0xbb;
rxtxdatabuf[7]=0x03;
rxtxdatabuf[11]=ACCOUNT_CHKSUM(11);
rxtxdatabuf[12]=0x16;
UART_T (fe,3);
UART_T (rxtxdatabuf,13); //write mainnumber function return fraem
WRITE_E2PROM(mainnumber,MAINNUMBER,4); // write new mainnumber to e2prom
CLRWDT();
}
void SYS_WR_TIME(void)
{
CLRWDT();
En_dswork();
systemtime[0]=rxtxdatabuf[11];//sec
systemtime[1]=rxtxdatabuf[12];//min
systemtime[2]=rxtxdatabuf[13];//hour
systemtime[3]=rxtxdatabuf[14];//day
systemtime[4]=rxtxdatabuf[15];//mon
systemtime[5]=rxtxdatabuf[16];//week
systemtime[6]=rxtxdatabuf[17];//year
rxtxdatabuf[6]=0xbb;
rxtxdatabuf[7]=0x03;
rxtxdatabuf[11]=ACCOUNT_CHKSUM(11);
rxtxdatabuf[12]=0x16;
UART_T (fe,3);
UART_T (rxtxdatabuf,13);
WriteTime(systemtime);
CLRWDT();
}
void SYS_POWON(void)
{
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// TEST POWER OUTPUT1 ON //
// //
CLRWDT(); //
NO_ALLOFF; //
P_C_8_ON; //
DELAY_ms(300);//SYSTEM POWER ON MUST SOME DELAY TIMES //
rxtxdatabuf[6]=0xbb; //
rxtxdatabuf[11]=ACCOUNT_CHKSUM(11); //
UART_T (fe,3); //
UART_T (rxtxdatabuf,13); //
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
/*
whichway = rxtxdatabuf[11];
CLRWDT();
DELAY_ms(100); //SYSTEM POWER ON MUST SOME DELAY TIMES
rxtxdatabuf[6]=0xbb;
rxtxdatabuf[12]=ACCOUNT_CHKSUM(12);
UART_T (fe,3);
UART_T (rxtxdatabuf,14);
CLRWDT();
ANALYZE_WHICHWAY_POW(whichway);
CLRWDT();
*/
}
void SYS_POWOFF(void)
{
CLRWDT();
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////// TEST POWER OUTPUT1 ON //
ALLOFF; //
rxtxdatabuf[6]=0xbb; //
rxtxdatabuf[11]=ACCOUNT_CHKSUM(11); //
UART_T (fe,3); //
UART_T (rxtxdatabuf,13); //
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
/*
ALLOFF;
CLRWDT();
whichway = 0x0;
systemflg &= (~0x01);
rxtxdatabuf[6]=0xbb;
rxtxdatabuf[11]=ACCOUNT_CHKSUM(11);
UART_T (fe,3);
UART_T (rxtxdatabuf,13);
CLRWDT();
*/
}
void SYS_TELEOFF(void)
{
CLRWDT();
ALLOFF;
UART_T (theadd,4);
DELAY_ms(2);
UART_T (h0,5); //sent atcommand to off telehpone
LED_ON;
DELAY_ms(50);
LED_OFF;
DELAY_ms(50);
LED_ON;
DELAY_ms(50);
LED_OFF;
DELAY_ms(50);
LED_ON;
DELAY_ms(50);
LED_OFF; //LED ON 3
MODPOWOFF; //off modem power
systemflg &= (~0x40); //set system bit6 to exit modem poweron state
CLRWDT();
}
void SYS_DOWNLOAD_ADDR(void)
{
CLRWDT();
uchar temp4;
READ_E2PROM(&addr_counter,E2_ADDR_COUNTER,1);
CLRWDT();
if((addr_counter=='x')||(addr_counter==0xff))
addr_counter=0x00;
if(addr_counter == 50)
return;
temp4=E2_ADDR_FRIST_ADDR+addr_counter*4;
WRITE_1_BYTE_E2PROM(rxtxdatabuf+11,temp4,0X04);
CLRWDT();
addr_counter++;
CLRWDT();
DELAY_ms(2);
WRITE_E2PROM(&addr_counter,E2_ADDR_COUNTER,0X01);
CLRWDT();
rxtxdatabuf[6]=0xbb;
rxtxdatabuf[7]=0X03;
rxtxdatabuf[11]=ACCOUNT_CHKSUM(11);
rxtxdatabuf[12]=0X16;
UART_T (fe,3);
UART_T (rxtxdatabuf,13);
CLRWDT();
}
void SYS_UPLOAD_ADDR(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -