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

📄 interrupt.s

📁 国内某测温系统信号处理处理板的代码
💻 S
字号:
	.module interrupt.c
	.area vector(rom, abs)
	.org 12
	rjmp _timer1_ovf_isr
	.org 18
	rjmp _uart0_rx_isr
	.org 22
	rjmp _uart0_tx_isr
	.org 24
	rjmp _ana_comp_isr
	.area text(rom, con, rel)
	.dbfile E:\任务\RASS\rass_soft\interrupt.c
	.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
	.even
_timer1_ovf_isr::
	rcall push_lset
	.dbline -1
	.dbline 16
; #include "config.h"
; 
; extern unsigned char dp2rass[5];
; extern unsigned char rass2dp;
; extern unsigned int test_freq;
; extern unsigned char rxed_flag;
; extern unsigned int seed;
; extern unsigned char timer1;
; extern unsigned int TCNT1_H;
; extern unsigned int TCNT1_L;
; extern unsigned int D15_0;
; 
; 
; //#pragma interrupt_handler timer1_ovf_isr:7
; void timer1_ovf_isr(void)
; {
	.dbline 18
; 	//在这里改变频率
;  timer1=1;
	ldi R24,1
	sts _timer1,R24
	.dbline 19
;  TCNT1H = TCNT1_H; //reload counter high value
	lds R2,_TCNT1_H
	lds R3,_TCNT1_H+1
	out 0x2d,R2
	.dbline 20
;  TCNT1L = TCNT1_L; //reload counter low value
	lds R2,_TCNT1_L
	lds R3,_TCNT1_L+1
	out 0x2c,R2
	.dbline 21
;  ml2035(D15_0,1);
	ldi R18,1
	ldi R19,0
	lds R16,_D15_0
	lds R17,_D15_0+1
	rcall _ml2035
	.dbline 22
;  SEI();
	sei
	.dbline -2
L1:
	rcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.area data(ram, con, rel)
	.dbfile E:\任务\RASS\rass_soft\interrupt.c
L3:
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile E:\任务\RASS\rass_soft\interrupt.c
	.area text(rom, con, rel)
	.dbfile E:\任务\RASS\rass_soft\interrupt.c
	.dbfunc e uart0_rx_isr _uart0_rx_isr fV
	.dbsym s rxnum L3 I
;            mid -> R16
	.even
_uart0_rx_isr::
	st -y,R2
	st -y,R3
	st -y,R16
	st -y,R24
	st -y,R25
	st -y,R30
	st -y,R31
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 29
; }
; 
; 
; 
; //#pragma interrupt_handler uart0_rx_isr:10
; void uart0_rx_isr(void)
; {
	.dbline 33
;  //uart has received a character in UDR
;  static int rxnum=0;
;  unsigned char mid;
;  mid=UDR;
	in R16,0xc
	.dbline 36
;  
;  
;  if(!(mid&0x01))//判断是命令还是数据请求,是请求,则
	sbrc R16,0
	rjmp L4
	.dbline 37
; 	 {
	.dbline 38
; 	 	rxed_flag=1;
	ldi R24,1
	sts _rxed_flag,R24
	.dbline 39
; 	 	dp2rass[0]=mid;
	sts _dp2rass,R16
	.dbline 40
; 		return;
	rjmp L2
L4:
	.dbline 43
; 	 }
; 			           
;  dp2rass[rxnum++]=mid;
	lds R2,L3
	lds R3,L3+1
	movw R24,R2
	adiw R24,1
	sts L3+1,R25
	sts L3,R24
	ldi R24,<_dp2rass
	ldi R25,>_dp2rass
	movw R30,R2
	add R30,R24
	adc R31,R25
	std z+0,R16
	.dbline 44
;  PORTC ^=1<<pc0;
	ldi R24,1
	in R2,0x15
	eor R2,R24
	out 0x15,R2
	.dbline 45
;  if(rxnum>4)
	ldi R24,4
	ldi R25,0
	lds R2,L3
	lds R3,L3+1
	cp R24,R2
	cpc R25,R3
	brge L6
	.dbline 46
;  	{
	.dbline 47
;  		rxnum=0;
	clr R2
	clr R3
	sts L3+1,R3
	sts L3,R2
	.dbline 48
;  		PORTC &=~(1<<pc0);
	cbi 0x15,0
	.dbline 49
;  		rxed_flag=1;
	ldi R24,1
	sts _rxed_flag,R24
	.dbline 50
;  	}
L6:
	.dbline 51
;  SEI();
	sei
	.dbline -2
L2:
	ld R2,y+
	out 0x3f,R2
	ld R31,y+
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R16,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbsym r mid 16 c
	.dbend
	.dbfunc e uart0_tx_isr _uart0_tx_isr fV
	.even
_uart0_tx_isr::
	rcall push_lset
	.dbline -1
	.dbline 58
; }
; 
; 
; 
; //#pragma interrupt_handler uart0_tx_isr:12
; void uart0_tx_isr(void)
; {
	.dbline 61
;  //character has been transmitted
;  //use pc0 to show transmitter over
;  PORTC |=1<<pc1;
	sbi 0x15,1
	.dbline 62
;  delay_us(100);
	ldi R16,100
	rcall _delay_us
	.dbline 63
;  PORTC &=~(1<<pc1);
	cbi 0x15,1
	.dbline 64
;  SEI();
	sei
	.dbline -2
L8:
	rcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.area data(ram, con, rel)
	.dbfile E:\任务\RASS\rass_soft\interrupt.c
L12:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\任务\RASS\rass_soft\interrupt.c
	.area text(rom, con, rel)
	.dbfile E:\任务\RASS\rass_soft\interrupt.c
	.dbfunc e ana_comp_isr _ana_comp_isr fV
	.dbsym s ana_num L12 c
;      dert_freq -> R20,R21
;      dert_time -> R20,R21
;        ana_com -> y+0
	.even
_ana_comp_isr::
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R16
	st -y,R17
	st -y,R18
	st -y,R19
	st -y,R24
	st -y,R25
	st -y,R30
	st -y,R31
	in R2,0x3f
	st -y,R2
	rcall push_gset2
	sbiw R28,4
	.dbline -1
	.dbline 70
; }
; 
; 
; //#pragma interrupt_handler ana_comp_isr:13
; void ana_comp_isr(void)
; {
	.dbline 72
;  //analog comparator compare event
;  rass2dp=0;
	clr R2
	sts _rass2dp,R2
	.dbline 73
;  PORTC ^=1<<pc2;
	ldi R24,4
	in R2,0x15
	eor R2,R24
	out 0x15,R2
	.dbline 74
;  if(ana_freq)
	rjmp L10
X0:
	.dbline 75
;  	{
	.dbline 82
; 	  //unsigned int test_freq;
;     unsigned int ana_com[2];
;     unsigned int dert_time;
;     static unsigned char ana_num=0;
;     unsigned int dert_freq;
;     
;  		ana_com[ana_num++]=(TCNT1H<<8)+TCNT1L;
	lds R2,L12
	clr R3
	mov R24,R2
	subi R24,255    ; addi 1
	sts L12,R24
	ldi R16,2
	ldi R17,0
	movw R18,R2
	rcall empy16s
	movw R30,R16
	movw R24,R28
	add R30,R24
	adc R31,R25
	in R2,0x2c
	in R3,0x2d
	std z+1,R3
	std z+0,R2
	.dbline 83
;  		if(ana_num>1)
	ldi R24,1
	lds R2,L12
	cp R24,R2
	brlo X1
	rjmp L13
X1:
	.dbline 84
;  			{
	.dbline 85
;  				ana_num=0;
	clr R2
	sts L12,R2
	.dbline 86
;  				if(ana_com[0]<ana_com[1])
	ldd R2,y+2
	ldd R3,y+3
	ldd R4,y+0
	ldd R5,y+1
	cp R4,R2
	cpc R5,R3
	brsh L15
	.dbline 87
;  					dert_time=ana_com[1]-ana_com[0];
	movw R20,R2
	sub R20,R4
	sbc R21,R5
	rjmp L16
L15:
	.dbline 89
;  				else
;  					dert_time=ana_com[1]+0xffff-ana_com[0];
	ldd R2,y+0
	ldd R3,y+1
	ldd R20,y+2
	ldd R21,y+3
	subi R20,1  ; offset = 65535
	sbci R21,0
	sub R20,R2
	sbc R21,R3
L16:
	.dbline 90
;  				test_freq =7200/(dert_time+1);
	movw R18,R20
	subi R18,255  ; offset = 1
	sbci R19,255
	ldi R16,7200
	ldi R17,28
	rcall div16u
	sts _test_freq+1,R17
	sts _test_freq,R16
	.dbline 91
;  				dert_freq=(test_freq>seed)?(test_freq-seed):(seed-test_freq);
	lds R2,_seed
	lds R3,_seed+1
	movw R4,R16
	cp R2,R16
	cpc R3,R17
	brsh L20
	movw R22,R4
	sub R22,R2
	sbc R23,R3
	rjmp L21
L20:
	lds R2,_test_freq
	lds R3,_test_freq+1
	lds R22,_seed
	lds R23,_seed+1
	sub R22,R2
	sbc R23,R3
L21:
	movw R20,R22
	.dbline 92
;  				if(dert_freq<50)
	cpi R22,50
	ldi R30,0
	cpc R23,R30
	brsh L22
	.dbline 93
;  					rass2dp=0;
	clr R2
	sts _rass2dp,R2
	rjmp L23
L22:
	.dbline 95
;  				else
;  					rass2dp=1;
	ldi R24,1
	sts _rass2dp,R24
L23:
	.dbline 96
;  			 } 
L13:
	.dbline 97
L10:
	.dbline -2
L9:
	adiw R28,4
	rcall pop_gset2
	ld R2,y+
	out 0x3f,R2
	ld R31,y+
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R19,y+
	ld R18,y+
	ld R17,y+
	ld R16,y+
	ld R5,y+
	ld R4,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbsym r dert_freq 20 i
	.dbsym r dert_time 20 i
	.dbsym l ana_com 0 A[4:2]i
	.dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -