⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interrupt.s

📁 与GPS模块连接
💻 S
📖 第 1 页 / 共 2 页
字号:
	.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 + -