📄 interrupt.s
字号:
.module interrupt.c
.area vector(rom, abs)
.org 36
rjmp _uart0_rx_isr
.area text(rom, con, rel)
.dbfile E:\RXTest\interrupt.c
.dbfunc e uart0_rx_isr _uart0_rx_isr fV
; Temp_UDR0 -> R16
; Temp_UCSR0A -> R18
.even
_uart0_rx_isr::
st -y,R2
st -y,R3
st -y,R16
st -y,R18
st -y,R24
st -y,R25
st -y,R30
st -y,R31
in R2,0x3f
st -y,R2
.dbline -1
.dbline 7
; #define INT_C
;
; #include "allheads.h"
;
; #pragma interrupt_handler uart0_rx_isr:19
; void uart0_rx_isr(void)
; {
.dbline 10
; char Temp_UDR0;
; uchar Temp_UCSR0A;
; Temp_UCSR0A=UCSR0A;
lds R18,192
.dbline 11
; Temp_UDR0=UDR0;
lds R16,198
.dbline 12
; if(!(Temp_UCSR0A&((1<<FE0)|(1<<UPE0)))){
mov R24,R18
andi R24,20
brne L10
.dbline 12
.dbline 13
; GPS_Rx[write_Count ]=Temp_UDR0;
ldi R24,<_GPS_Rx
ldi R25,>_GPS_Rx
lds R30,_write_Count
lds R31,_write_Count+1
add R30,R24
adc R31,R25
std z+0,R16
.dbline 15
; // writeCount++;
; if(++write_Count>199){write_Count=0;}//ptr=GPS_Rx;
lds R24,_write_Count
lds R25,_write_Count+1
adiw R24,1
movw R2,R24
sts _write_Count+1,R3
sts _write_Count,R2
ldi R24,199
ldi R25,0
cp R24,R2
cpc R25,R3
brge L12
.dbline 15
.dbline 15
clr R2
clr R3
sts _write_Count+1,R3
sts _write_Count,R2
.dbline 15
L12:
.dbline 16
L10:
.dbline -2
L9:
ld R2,y+
out 0x3f,R2
ld R31,y+
ld R30,y+
ld R25,y+
ld R24,y+
ld R18,y+
ld R16,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbsym r Temp_UDR0 16 c
.dbsym r Temp_UCSR0A 18 c
.dbend
.area vector(rom, abs)
.org 18
rjmp _timer2_ovf_isr
.area text(rom, con, rel)
.dbfile E:\RXTest\interrupt.c
.dbfunc e timer2_ovf_isr _timer2_ovf_isr fV
.even
_timer2_ovf_isr::
rcall push_lset
.dbline -1
.dbline 22
; }
; }
;
; //时间基准:1MS 8MHZ晶振64分频..
; #pragma interrupt_handler timer2_ovf_isr:10
; void timer2_ovf_isr(void)
; {
.dbline 23
; TCNT2 = 0x83;
ldi R24,131
sts 178,R24
.dbline 24
; if(++Count_ms>=100){// 0.1s
lds R24,_Count_ms
subi R24,255 ; addi 1
mov R2,R24
sts _Count_ms,R2
cpi R24,100
brlo L15
.dbline 24
.dbline 25
; Count_ms=0;
clr R2
sts _Count_ms,R2
.dbline 26
; Fbit.Time_ms=TRUE;
lds R24,_Fbit
ori R24,2
sts _Fbit,R24
.dbline 27
; Fbit.key_count=TRUE;}
ori R24,4
sts _Fbit,R24
.dbline 27
L15:
.dbline 29
; //Fbit.Scan_IRQ=TRUE;}
; Count_2ms++;
lds R24,_Count_2ms
lds R25,_Count_2ms+1
adiw R24,1
sts _Count_2ms+1,R25
sts _Count_2ms,R24
.dbline 31
;
; if(!IRQ) {
sbic 0x9,5
rjmp L17
.dbline 31
.dbline 32
; Pulse_Data=(uchar)(60000/Count_2ms);
movw R18,R24
ldi R16,60000
ldi R17,234
rcall div16u
sts _Pulse_Data,R16
.dbline 33
; if(++Idx_Plus>=10)Idx_Plus=0;
lds R24,_Idx_Plus
subi R24,255 ; addi 1
mov R2,R24
sts _Idx_Plus,R2
cpi R24,10
brlo L19
.dbline 33
clr R2
sts _Idx_Plus,R2
L19:
.dbline 34
; Buf_plus[Idx_Plus]=Pulse_Data;
ldi R24,<_Buf_plus
ldi R25,>_Buf_plus
lds R30,_Idx_Plus
clr R31
add R30,R24
adc R31,R25
lds R2,_Pulse_Data
std z+0,R2
.dbline 35
; Pulse_Data=0;
clr R2
sts _Pulse_Data,R2
.dbline 36
; if(++Count_Plus>=10){Fbit.Timer_Start=TRUE;
lds R24,_Count_Plus
subi R24,255 ; addi 1
mov R2,R24
sts _Count_Plus,R2
cpi R24,10
brlo L21
.dbline 36
.dbline 36
lds R24,_Fbit
lds R25,_Fbit+1
ori R25,32
sts _Fbit+1,R25
sts _Fbit,R24
.dbline 37
; Count_Plus=0;}
clr R2
sts _Count_Plus,R2
.dbline 37
L21:
.dbline 38
rcall _Read_FIFO
.dbline 39
lds R24,_Fbit
lds R25,_Fbit+1
ori R25,16
sts _Fbit+1,R25
sts _Fbit,R24
.dbline 40
clr R2
clr R3
sts _Count_2ms+1,R3
sts _Count_2ms,R2
.dbline 41
L17:
.dbline -2
L14:
rcall pop_lset
.dbline 0 ; func end
reti
.dbend
.dbfunc e Read_byte _Read_byte fc
; temp -> R20
.even
_Read_byte::
rcall push_gset1
.dbline -1
.dbline 70
; 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;
.dbline 71
; if(read_Count == write_Count){delay_ms(5);}
lds R2,_write_Count
lds R3,_write_Count+1
lds R4,_read_Count
lds R5,_read_Count+1
cp R4,R2
cpc R5,R3
brne L24
.dbline 71
.dbline 71
ldi R16,5
ldi R17,0
rcall _delay_ms
.dbline 71
L24:
.dbline 72
; temp = GPS_Rx[read_Count];
ldi R24,<_GPS_Rx
ldi R25,>_GPS_Rx
lds R30,_read_Count
lds R31,_read_Count+1
add R30,R24
adc R31,R25
ldd R20,z+0
.dbline 73
; ++read_Count;
lds R24,_read_Count
lds R25,_read_Count+1
adiw R24,1
sts _read_Count+1,R25
sts _read_Count,R24
.dbline 74
; if(read_Count >199){read_Count = 0;}
ldi R24,199
ldi R25,0
lds R2,_read_Count
lds R3,_read_Count+1
cp R24,R2
cpc R25,R3
brge L26
.dbline 74
.dbline 74
clr R2
clr R3
sts _read_Count+1,R3
sts _read_Count,R2
.dbline 74
L26:
.dbline 75
; return temp;
mov R16,R20
.dbline -2
L23:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbend
.dbfunc e Clear_GpsData _Clear_GpsData fV
; j -> R16
.even
_Clear_GpsData::
.dbline -1
.dbline 79
; }
;
; void Clear_GpsData(void)
; {
.dbline 81
; uchar j;
; for(j=0; j<26; j++)
clr R16
rjmp L32
L29:
.dbline 82
.dbline 83
ldi R24,<_JWDINFO
ldi R25,>_JWDINFO
mov R30,R16
clr R31
add R30,R24
adc R31,R25
ldi R24,48
std z+0,R24
.dbline 84
L30:
.dbline 81
inc R16
L32:
.dbline 81
cpi R16,26
brlo L29
.dbline -2
L28:
.dbline 0 ; func end
ret
.dbsym r j 16 c
.dbend
.dbfunc e Read_GpsData _Read_GpsData fV
; temp -> R20
.even
_Read_GpsData::
rcall push_gset1
.dbline -1
.dbline 89
; {
; 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)
; {
.dbline 90
; uchar temp = 0;
clr R20
.dbline 91
; temp = Read_byte();
rcall _Read_byte
mov R20,R16
.dbline 92
; if(temp=='$')
cpi R16,36
brne L34
.dbline 93
; {
.dbline 94
; temp = Read_byte();
rcall _Read_byte
mov R20,R16
.dbline 95
; if(temp == 'G')
cpi R16,71
brne L36
.dbline 96
; {
.dbline 97
; temp = Read_byte();
rcall _Read_byte
mov R20,R16
.dbline 98
; if(temp == 'P')
cpi R16,80
brne L38
.dbline 99
; {
.dbline 100
; temp = Read_byte();
rcall _Read_byte
mov R20,R16
.dbline 101
; if(temp == 'G')
cpi R16,71
brne L40
.dbline 102
; {
.dbline 103
; temp = Read_byte();
rcall _Read_byte
mov R20,R16
.dbline 104
; if(temp == 'L')
cpi R16,76
brne L42
.dbline 105
; {
.dbline 106
; temp = Read_byte();
rcall _Read_byte
mov R20,R16
.dbline 107
; if(temp == 'L')
cpi R16,76
brne L44
.dbline 108
; { LED1_ON;
.dbline 108
cbi 0x5,0
.dbline 109
; Parse_GpsData();
rcall _Parse_GpsData
.dbline 111
; // LED1_OFF;
; }
L44:
.dbline 112
; }
L42:
.dbline 113
; }
L40:
.dbline 114
; }
L38:
.dbline 115
; }
L36:
.dbline 116
L34:
.dbline -2
L33:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbend
.dbfunc e Parse_GpsData _Parse_GpsData fV
; temp -> R20
; i -> R20
.even
_Parse_GpsData::
rcall push_gset1
.dbline -1
.dbline 121
; }
; }
;
;
; void Parse_GpsData(void)
; { uchar i, temp;
.dbline 122
; Clear_GpsData();
rcall _Clear_GpsData
.dbline 123
; Read_byte();
rcall _Read_byte
.dbline 124
; temp = Read_byte();
rcall _Read_byte
mov R20,R16
.dbline 125
; if(',' != temp) {
cpi R16,44
breq L47
.dbline 125
.dbline 126
; JWDINFO[0] = temp;
sts _JWDINFO,R20
.dbline 127
; for(i=0; i<25; i++)
clr R20
rjmp L52
L49:
.dbline 128
.dbline 129
rcall _Read_byte
ldi R24,<_JWDINFO+1
ldi R25,>_JWDINFO+1
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R16
.dbline 130
L50:
.dbline 127
inc R20
L52:
.dbline 127
cpi R20,25
brlo L49
.dbline 131
; {
; JWDINFO[i+1] = Read_byte();
; }
; if(((JWDINFO[11]=='S')||(JWDINFO[11]=='N'))&&((JWDINFO[25]=='E')||(JWDINFO[25]=='W')))
lds R24,_JWDINFO+11
cpi R24,83
breq L60
cpi R24,78
brne L54
L60:
lds R24,_JWDINFO+25
cpi R24,69
breq L61
cpi R24,87
brne L54
L61:
.dbline 132
; { JWD_ptr=JWDINFO;
.dbline 132
ldi R24,<_JWDINFO
ldi R25,>_JWDINFO
sts _JWD_ptr+1,R25
sts _JWD_ptr,R24
.dbline 133
; Fbit.Send_GInfoFlag=TRUE;}
lds R24,_Fbit+2
ori R24,1
sts _Fbit+2,R24
.dbline 133
L54:
.dbline 135
L47:
.dbline -2
L46:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbsym r i 20 c
.dbend
.dbfunc e Send_GpsInfo _Send_GpsInfo fV
; i -> R20
.even
_Send_GpsInfo::
rcall push_gset1
.dbline -1
.dbline 138
; //else{Clear_GpsData();}
; }
; }
;
; void Send_GpsInfo(void){
.dbline 140
; uchar i;
; if(!Fbit.Send_GInfoFlag)return;
lds R24,_Fbit+2
andi R24,1
brne L64
.dbline 140
rjmp L63
L64:
.dbline 141
; Fbit.Send_GInfoFlag=FALSE;
lds R24,_Fbit+2
andi R24,254
sts _Fbit+2,R24
.dbline 142
; JWD_ptr=JWDINFO;
ldi R24,<_JWDINFO
ldi R25,>_JWDINFO
sts _JWD_ptr+1,R25
sts _JWD_ptr,R24
.dbline 143
clr R20
rjmp L71
L68:
.dbline 143
.dbline 144
lds R30,_JWD_ptr
lds R31,_JWD_ptr+1
ldd R16,z+0
clr R17
rcall _CharTOASC
.dbline 145
ldi R24,2
mul R24,R20
movw R30,R0
ldi R24,<_DJWDINFO
ldi R25,>_DJWDINFO
add R30,R24
adc R31,R25
lds R2,_comm_t
std z+0,R2
.dbline 146
ldi R24,2
mul R24,R20
movw R30,R0
ldi R24,<_DJWDINFO+1
ldi R25,>_DJWDINFO+1
add R30,R24
adc R31,R25
lds R2,_comm_b
std z+0,R2
.dbline 147
lds R24,_JWD_ptr
lds R25,_JWD_ptr+1
adiw R24,1
sts _JWD_ptr+1,R25
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -