📄 interrupt.c
字号:
#define INT_C
#include "allheads.h"
#pragma interrupt_handler uart0_rx_isr:19
void uart0_rx_isr(void)
{
char Temp_UDR0;
uchar Temp_UCSR0A;
Temp_UCSR0A=UCSR0A;
Temp_UDR0=UDR0;
if(!(Temp_UCSR0A&((1<<FE0)|(1<<UPE0)))){
GPS_Rx[write_Count ]=Temp_UDR0;
// writeCount++;
if(++write_Count>199){write_Count=0;}//ptr=GPS_Rx;
}
}
//时间基准:1MS 8MHZ晶振64分频..
#pragma interrupt_handler timer2_ovf_isr:10
void timer2_ovf_isr(void)
{
TCNT2 = 0x83;
if(++Count_ms>=100){// 0.1s
Count_ms=0;
Fbit.Time_ms=TRUE;
Fbit.key_count=TRUE;}
//Fbit.Scan_IRQ=TRUE;}
Count_2ms++;
if(!IRQ) {
Pulse_Data=(uchar)(60000/Count_2ms);
if(++Idx_Plus>=10)Idx_Plus=0;
Buf_plus[Idx_Plus]=Pulse_Data;
Pulse_Data=0;
if(++Count_Plus>=10){Fbit.Timer_Start=TRUE;
Count_Plus=0;}
Read_FIFO();
Fbit.Rx_f=TRUE;
Count_2ms=0;
}
}
/*
// Timer 0 overflow interrupt service routine
#pragma interrupt_handler timer0_ovf_isr:17
void timer0_ovf_isr(void){//2 //2ms
TCNT0=0x83;//B2;
if(++Count_ms>=100){// 0.1s
Count_ms=0;
Fbit.Time_ms=TRUE;
Fbit.key_count=TRUE;}
Count_2ms++;
if(!IRQ) {
Pulse_Data=(uchar)(60000/Count_2ms);
if(++Idx_Plus>=10)Idx_Plus=0;
//Buf_plus[Idx_Plus]=T_Num[Idx_Plus];
Buf_plus[Idx_Plus]=Pulse_Data;
Pulse_Data=0;
if(++Count_Plus>=10){Fbit.Timer_Start=TRUE;
Count_Plus=0;}
Read_FIFO();
Fbit.Rx_f=TRUE;
Count_2ms=0;
}
}*/
uchar Read_byte(void)
{ uchar temp;
if(read_Count == write_Count){delay_ms(5);}
temp = GPS_Rx[read_Count];
++read_Count;
if(read_Count >199){read_Count = 0;}
return temp;
}
void Clear_GpsData(void)
{
uchar j;
for(j=0; j<26; j++)
{
JWDINFO[j] ='0';
}
}
//$PTNLRTF,A,A,273306,04,3,2222.28064,N,11332.80025,E,00011,+000.000,+000.000,+000.000*55
void Read_GpsData(void)
{
uchar temp = 0;
temp = Read_byte();
if(temp=='$')
{
temp = Read_byte();
if(temp == 'G')
{
temp = Read_byte();
if(temp == 'P')
{
temp = Read_byte();
if(temp == 'G')
{
temp = Read_byte();
if(temp == 'L')
{
temp = Read_byte();
if(temp == 'L')
{ Parse_GpsData();
// LED1_OFF;
}
}
}
}
}
}
}
void Parse_GpsData(void)
{ uchar i, temp;
Clear_GpsData();
Read_byte();
temp = Read_byte();
if(',' != temp) {
JWDINFO[0] = temp;
for(i=0; i<25; i++)
{
JWDINFO[i+1] = Read_byte();
}
if(((JWDINFO[11]=='S')||(JWDINFO[11]=='N'))&&((JWDINFO[25]=='E')||(JWDINFO[25]=='W')))
{ JWD_ptr=JWDINFO;
Fbit.Send_GInfoFlag=TRUE;}
//else{Clear_GpsData();}
}
}
void Send_GpsInfo(void){
uchar i;
if(!Fbit.Send_GInfoFlag)return;
Fbit.Send_GInfoFlag=FALSE;
JWD_ptr=JWDINFO;
for(i=0;i<26;i++){
CharTOASC(*JWD_ptr);
DJWDINFO[i*2]=comm_t;
DJWDINFO[(i*2)+1]=comm_b;
JWD_ptr++;
}
DJWDINFO[52]=0;
DJWD_ptr=DJWDINFO;
// Send_Test();
}
/*void Send_Test(void){
uchar i;
// (!Fbit.Send_GInfoFlag)return;
// Fbit.Send_GInfoFlag=FALSE;
while(*DJWD_ptr){
PSendChar(*DJWD_ptr);
DJWD_ptr++;
}
PSendChar(0x0d);
//EN_RxGps;
}*/
/*void Parse_GpsData(void)
{ uchar i;
uchar temp;
Clear_GpsData();
//Read_byte();
//temp = Read_byte();
if(',' != temp) {
WD[0] = temp;
for(i=0; i<3; i++)
{
WD[i+1] = Read_byte();
}
Read_byte(); //.
for(i=0; i<5; i++)
{
WD[4+i] = Read_byte();
}
Read_byte(); //,
}
// END WD,START SN.............................................................................
temp = Read_byte(); //S/N
if(',' != temp)
{
SN= temp;
Read_byte();// ,
}
//END SN.START JD................................................................................
temp = Read_byte();
if(',' != temp)
{
JD[0] = temp;
for(i=0; i<4; i++)
{
JD[i+1] = Read_byte();
}
Read_byte();
for(i=0; i<5; i++)
{
JD[5+i] = Read_byte();
}
Read_byte();
}
//......................................................................................................................................
temp = Read_byte();
if(',' != temp)
{ EW = temp;
Read_byte();
}*/
// Fbit.Send_GInfoFlag=TRUE;
// }
void Timer_Function(void){
if(!Fbit.Time_ms)return;
Fbit.Time_ms=FALSE;
if(++Flag_LED>40){Flag_LED=0;
if(Fbit.Init_com){Fbit.Com_start=TRUE;
Fbit.Init_com=FALSE;}
}
}
void Key_Process(void){
uchar temp;
if(!Fbit.En_keyproc)return;
Fbit.En_keyproc=FALSE;
temp=Key_Value;
switch(temp){
case 6:
Fbit.En_Tcp=TRUE;//connect to PC;
Idx_TCP=ctcp0;
break;
case 5:
Fbit.En_SendData=TRUE;
break;
case 3:
// Fbit.Send_GInfoFlag=TRUE;
break;
default:
break;
}
}
void Scan_Key(void){
if(!Fbit.key_count)return;
Fbit.key_count=FALSE;
Key_Value=(PINC&0x07);
Delay(50);
if( Key_Value>=0x07){Fbit.En_keyproc=TRUE;}
else{Key_Process();}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -