📄 interrupt.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 + -