📄 wnt10.c
字号:
unsigned char bdata SYS_RUN_STATUS = 0; // MCU Event Flag.
sbit Ex386PwrDwn = SYS_RUN_STATUS^7; //
sbit RecChnTxDly = SYS_RUN_STATUS^6; // Voice Record Channal Switch Delay.
sbit ExPwrLastSTA = SYS_RUN_STATUS^5; //
sbit ExPwrCurrSTA = SYS_RUN_STATUS^4; //
sbit TempLastSTA = SYS_RUN_STATUS^3; //
sbit TempCurrSTA = SYS_RUN_STATUS^2; //
sbit BattLastSTA = SYS_RUN_STATUS^1; //
sbit BattCurrSTA = SYS_RUN_STATUS^0; //
void RstSTATUS(void)
{
unsigned char ucTMP;
SFRPAGE = 0x00; // Sfr Page 0.
ucTMP = RSTSRC;
if( ucTMP & 0x01 ) // External PIN RST.
{
McuExRST = 1; // .
Blink(100,250,1);
}
if( ucTMP & 0x02 ) // Power On RST.
{
McuPwrOnRST = 1; // .
Blink(100,250,2);
}
if( ucTMP & 0x04 ) // Miss Clock RST.
{
McuMisClkRST = 1; // .
Blink(100,250,3);
}
if( ucTMP & 0x08 ) // WDT Time Out RST.
{
McuWdtRST = 1; // .
Blink(100,250,4);
}
}
void TstLED(void)
{
unsigned char i,ucTMP;
ucTMP = 0x04;
for(i=0;i<6;i++) // LED0 --> LED5
{
P1 = P1 | ucTMP;
DmS(250);
DmS(250);
ucTMP = ucTMP << 1;
}
P1 = P1 & 0x03; // all LEDs LightOff.
DmS(250);
DmS(250);
P1 = P1 | 0xfc; // all LEDs LightOn.
DmS(250);
DmS(250);
P1 = P1 & 0x03; // all LEDs LightOff.
for(i=0;i<10;i++) // LED0 Blink 10 times.
{
LED0 = ~LED0;
D1S(1);
}
LED0 = 1; // LED0 LightOn.
}
void Blink(unsigned char OnTime,unsigned char OffTime,unsigned char Num)
{ // 指示灯亮 指示灯灭 闪烁次数
unsigned char i,ucTMP;
SFRPAGE = 0x0F;
ucTMP = P4;
for(i=0;i<Num;i++)
{
P4 = ucTMP & 0xef; // iLED = 0;
DmS(OnTime);
P4 = ucTMP | 0x10; // iLED = 1;
DmS(OffTime);
}
SFRPAGE = 0x00;
}
void FraFormat(void)
{
AlmDATA[0] = FraSAT0; // 0x55.
AlmDATA[1] = FraSAT1; // 0xAA.
AlmDATA[2] = AlmFraCTL; // 0x04.
AlmDATA[3] = 0x00; // Frame Index high byte.
AlmDATA[4] = 0x00; // Frame Index low byte.
AlmDATA[5] = AlmFraLeng; // Alarm Info data: 1 bytes.
AlmDATA[7] = 0x00; // XOR, not used.
AlmDATA[8] = FraEND; // 0x88.
GpsDATA[0] = FraSAT0; // 0x55.
GpsDATA[1] = FraSAT1; // 0xAA.
GpsDATA[2] = GpsFraCTL; // 0x05.
GpsDATA[3] = 0x00; // Frame Index high byte.
GpsDATA[4] = 0x00; // Frame Index low byte.
GpsDATA[5] = GpsFraLeng; // Gps Info data: 39 bytes.
GpsDATA[43] = 0x00; // XOR, not used.
GpsDATA[44] = FraEND; // 0x88.
StaDATA[0] = FraSAT0; // 0x55.
StaDATA[1] = FraSAT1; // 0xAA.
StaDATA[2] = StaFraCTL; // 0x06.
StaDATA[3] = 0x00; // Frame Index high byte.
StaDATA[4] = 0x00; // Frame Index low byte.
StaDATA[5] = StaFraLeng; // MCU Status Changed Info data: 1 bytes.
StaDATA[7] = 0x00; // XOR, not used.
StaDATA[8] = FraEND; // 0x88.
SysDATA[0] = FraSAT0; // 0x55.
SysDATA[1] = FraSAT1; // 0xAA.
SysDATA[2] = SysFraCTL; // 0x07.
SysDATA[3] = 0x00; // Frame Index high byte.
SysDATA[4] = 0x00; // Frame Index low byte.
SysDATA[5] = SysFraLeng; // MCU Status Info data Length: 9 bytes.
SysDATA[15] = 0x00; // XOR, not used.
SysDATA[16] = FraEND; // 0x88.
RecDATA[0] = FraSAT0; // 0x55.
RecDATA[1] = FraSAT1; // 0xAA.
RecDATA[2] = 0x01; // 0x01/0x02/0x03.
RecDATA[5] = 200; // Voice Record data Length: 200 bytes.
RecDATA[206] = 0x00; // XOR, not used.
RecDATA[207] = FraEND; // 0x88.
AckDATA[0] = FraSAT0; // 0x55.
AckDATA[1] = FraSAT1; // 0xAA.
AckDATA[2] = 0x80; // 0x80/0xC0/0xE0.
AckDATA[3] = FraEND; // 0x88.
}
void UART1_ISR(void) interrupt 20
{
unsigned char ucTMP,CurrSramPage;
SFRPAGE = 0x0F; // P4 Page.
CurrSramPage = P4; // Save P4 Value.
ExSRAM_PageSetting(0); // Use SRAM Page 0;
SFRPAGE = UART1_PAGE;
RI1 = 0; // Clear the UART1 Interrupt Flag.
ucTMP = SBUF1;
if( GPS_HEAD_OK )
{
if( ucTMP == ',' ) // Should Process the Perious GPS DATA.
{
GpsFlaCNT++;
switch( GpsFlaCNT )
{
case 1: GpsDatPtr = 7; // Gps TIME: 7~12.
break;
case 3: GpsDatPtr = 13; // Gps Latitude: 13~21.
break;
case 5: GpsDatPtr = 22; // Gps Longtitude: 22~31.
break;
case 7: GpsDatPtr = 32; // Gps Speed: 32~36.
break;
case 9: GpsDatPtr = 37; // Gps DATE: 37~42.
break;
default: break;
}
}
else
{
switch( GpsFlaCNT )
{
case 1: GpsDATA[GpsDatPtr++] = ucTMP; // Gps DATE.
break;
case 2: if( ucTMP=='V' ) // Gps Valid Flag.
GpsDATA[6] = GpsDATA[6] & 0x7f; // GpsInfo Invalid.
break;
case 3: GpsDATA[GpsDatPtr++] = ucTMP; // Gps Latitude.
break;
case 4: if( ucTMP=='S' ) // Gps Latitude hemisphere.
GpsDATA[6] = GpsDATA[6] | 0x02; // 'S'hemisphere.
break;
case 5: GpsDATA[GpsDatPtr++] = ucTMP; // Gps Longtitude.
break;
case 6: if( ucTMP=='W' ) // Gps Longtitude hemisphere.
GpsDATA[6] = GpsDATA[6] | 0x01; // 'W'hemisphere.
break;
case 7: GpsDATA[GpsDatPtr++] = ucTMP; // Gps Speed.
break;
case 9: GpsDATA[GpsDatPtr++] = ucTMP; // Gps DATE.
break;
case 10: GPS_HEAD_MATCH = 0; // Gps Info Recieved Success.
GpsFlaCNT = 0; // Begin from 2.
if( SysStandby == 0 ) // System Operating Normal.
GpsDatReady = 1; // Gps Data Ready to TX.
LED2 = 0; // GPS Light Off.
break;
default: break;
}
}
}
else
{
switch( GPS_HEAD_MATCH )
{
case 0x00: if( ucTMP =='$' ) // Recv DATA Equal '$' ?
GPS_HEAD_S = 1;
break;
case 0x01: if( ucTMP =='G' ) // Last DATA Equal '$'
GPS_HEAD_G = 1; // Recv DATA Equal 'G' ?
else
GPS_HEAD_MATCH = 0x00;
break;
case 0x03: if( ucTMP =='P' ) // Last DATA Equal 'G'
GPS_HEAD_P = 1; // Recv DATA Equal 'P' ?
else
GPS_HEAD_MATCH = 0x00;
break;
case 0x07: if( ucTMP =='R' ) // Last DATA Equal 'P'
GPS_HEAD_R = 1; // Recv DATA Equal 'R' ?
else
GPS_HEAD_MATCH = 0x00;
break;
case 0x0f: if( ucTMP =='M' ) // Last DATA Equal 'R'
GPS_HEAD_M = 1; // Recv DATA Equal 'M' ?
else
GPS_HEAD_MATCH = 0x00;
break;
case 0x1f: if( ucTMP =='C' ) // Last DATA Equal 'M'
{
GPS_HEAD_OK = 1; // All Chars Match
GpsDATA[6] = 0x80; // Init: GpsInfo Valid,N,E
LED2 = 1; // *** GPS LED LightOn ***;
}
else
GPS_HEAD_MATCH = 0x00; //
break;
default: break;
}
}
SFRPAGE = 0x0F; // P4 Page.
P4 = CurrSramPage; // Restore P4 Value.
SFRPAGE = 0x00;
}
void UART0_ISR(void) interrupt 4
{
unsigned char ucTMP,CurrSramPage;
SFRPAGE = 0x0F; // P4 Page.
CurrSramPage = P4; // Save P4 Value.
ExSRAM_PageSetting(0); // Use SRAM Page 0;
SFRPAGE = UART0_PAGE;
if( TI0 ) // TX Interrupt.
{
TI0 = 0; // Clear the UART0 Interrupt Flag.
if( UART0_TX_Paus == 0 ) // UART0 TX need Pause ?
{
if( UART0_TX_CNT < UART0_TX_NUM ) // Current Frame Send OVER ?
{
SBUF0 = *( TxDATA + UART0_TX_CNT );
UART0_TX_CNT++;
}
else
{
switch( UART0_TX_TASK )
{
case 1: AlmDatReady = 0;
break;
case 2: GpsDatReady = 0;
break;
case 3: StaDatReady = 0;
break;
case 4: SysDatReady = 0;
MCU_Ex386_STATUS = MCU_Ex386_STATUS & 0xE0;
break;
case 5: AckDatReady = 0;
break;
case 6: RecDatReady = 0;
break;
default: break;
}
McuTxCNT++; // MCU Frame Send Counting.
UART0_TX_CNT = 255;
UART0_TX_Busy = 0;
}
}
}
if( RI0 ) // Byte Process Methode.
{
ucTMP = SBUF0;
RI0 = 0; // Clear the UART0 Interrupt Flag.
if( UART0_FraHEAD_OK ) //
{
/********************************************
*** 386Ex STATUS Information DATA Frame ***
********************************************/
if( UART0_RX_DTYPE == 1 ) // 386Ex STATUS Information Frame.
{
UART0_RX_CNT++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -