📄 11.s
字号:
.module _11.c
.area data(ram, con, rel)
_adc::
.blkb 2
.area idata
.word 819
.area data(ram, con, rel)
.blkb 2
.area idata
.word 614
.area data(ram, con, rel)
.blkb 2
.area idata
.word 409
.area data(ram, con, rel)
.blkb 2
.area idata
.word 204
.area data(ram, con, rel)
.dbfile D:\xij\demo\demo_diy02-8a\1\C语言\02-8a-11\11.c
.dbsym e adc _adc A[8:4]i
.area text(rom, con, rel)
.dbfile D:\xij\demo\demo_diy02-8a\1\C语言\02-8a-11\11.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 20
; //ICC-AVR application builder : 2005-3-15 10:10:23
; // Target : M48
; // Crystal: 8.0000Mhz
;
; #include <iom48v.h>
; #include <macros.h>
; unsigned int adc_w;
; unsigned int adc_old,bjz;
; unsigned char ad_high,ad_low;
; unsigned int adc[4]= {0x333,0x266,0x199,0xcc};
; void alarm(void);
;
; /*
; #define adc_4 0x333;
; #define adc_3 0x266;
; #define adc_2 0x199;
; #define adc_1 0xcc;
; */
; void port_init(void)
; {
.dbline 21
; PORTB = 0xFF;
ldi R24,255
out 0x5,R24
.dbline 22
; DDRB = 0x07;
ldi R24,7
out 0x4,R24
.dbline 23
; PORTC = 0x7F; //m103 output only
ldi R24,127
out 0x8,R24
.dbline 24
; DDRC = 0x00;
clr R2
out 0x7,R2
.dbline 25
; PORTD = 0xFF;
ldi R24,255
out 0xb,R24
.dbline 26
; DDRD = 0xFF;
out 0xa,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e adc_init _adc_init fV
.even
_adc_init::
.dbline -1
.dbline 32
; }
;
; //ADC initialize
; // Conversion time: 13uS
; void adc_init(void)
; {
.dbline 33
; ADCSRA = 0x00; //disable adc
clr R2
sts 122,R2
.dbline 34
; ADMUX = 0x40; //select adc input 0
ldi R24,64
sts 124,R24
.dbline 35
; ACSR = 0x80;
ldi R24,128
out 0x30,R24
.dbline 36
; ADCSRB = 0x00;
sts 123,R2
.dbline 37
; ADCSRA = 0xCB;
ldi R24,203
sts 122,R24
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 42
rjmp _adc_isr
.area text(rom, con, rel)
.dbfile D:\xij\demo\demo_diy02-8a\1\C语言\02-8a-11\11.c
.dbfunc e adc_isr _adc_isr fV
.even
_adc_isr::
st -y,R2
st -y,R3
st -y,R24
in R2,0x3f
st -y,R2
.dbline -1
.dbline 43
;
; }
;
; #pragma interrupt_handler adc_isr:22
; void adc_isr(void)
; {
.dbline 44
; adc_w = ADC;
lds R2,120
lds R3,120+1
sts _adc_w+1,R3
sts _adc_w,R2
.dbline 45
; ADMUX = 0x40;
ldi R24,64
sts 124,R24
.dbline 46
; ADCSRA = 0xCB;
ldi R24,203
sts 122,R24
.dbline -2
L3:
ld R2,y+
out 0x3f,R2
ld R24,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 56
; //ad_high = adch;
; //ad_low = adcl;
; //conversion complete, read value (int) using...
; // value=ADCL; //Read 8 low bits first (important)
; // value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
; }
;
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
.dbline 58
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 59
; port_init();
rcall _port_init
.dbline 60
; adc_init();
rcall _adc_init
.dbline 62
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 63
; EICRA = 0x00; //extended ext ints
sts 105,R2
.dbline 64
; EIMSK = 0x00;
out 0x1d,R2
.dbline 66
;
; TIMSK0 = 0x00; //timer 0 interrupt sources
sts 110,R2
.dbline 67
; TIMSK1 = 0x00; //timer 1 interrupt sources
sts 111,R2
.dbline 68
; TIMSK2 = 0x00; //timer 2 interrupt sources
sts 112,R2
.dbline 70
;
; PCMSK0 = 0x00; //pin change mask 0
sts 107,R2
.dbline 71
; PCMSK1 = 0x00; //pin change mask 1
sts 108,R2
.dbline 72
; PCMSK2 = 0x00; //pin change mask 2
sts 109,R2
.dbline 73
; PCICR = 0x00; //pin change enable
sts 104,R2
.dbline 74
; PRR = 0x00; //power controller
sts 100,R2
.dbline 75
; SEI(); //re-enable interrupts
sei
.dbline -2
L4:
.dbline 0 ; func end
ret
.dbend
.dbfunc e display _display fV
; i -> R20,R21
; com -> R22,R23
.even
_display::
rcall push_gset2
movw R22,R16
.dbline -1
.dbline 81
; //all peripherals are now initialized
; }
;
; /*显示函数*/
; void display(unsigned int com)
; {
rjmp L7
L6:
.dbline 84
; unsigned int i;
; while(bjz != com)
; {
.dbline 85
; bjz = com;
sts _bjz+1,R23
sts _bjz,R22
.dbline 86
; if(com > adc[1])
lds R2,_adc+2
lds R3,_adc+2+1
cp R2,R22
cpc R3,R23
brsh L9
.dbline 87
; {
.dbline 88
; i = com;
movw R20,R22
.dbline 89
; if(i > adc[0])
lds R2,_adc
lds R3,_adc+1
cp R2,R22
cpc R3,R23
brsh L12
.dbline 90
; {alarm();}
.dbline 90
rcall _alarm
.dbline 90
rjmp L10
L12:
.dbline 92
; else
; PORTB = 0XFB;
ldi R24,251
out 0x5,R24
.dbline 93
; }
rjmp L10
L9:
.dbline 95
; else
; {
.dbline 96
; i = com;
movw R20,R22
.dbline 97
; if(i > adc[2])
lds R2,_adc+4
lds R3,_adc+4+1
cp R2,R22
cpc R3,R23
brsh L14
.dbline 98
; PORTB = 0XFD;
ldi R24,253
out 0x5,R24
rjmp L15
L14:
.dbline 100
; else
; {
.dbline 101
; if(i>adc[3])
lds R2,_adc+6
lds R3,_adc+6+1
cp R2,R20
cpc R3,R21
brsh L17
.dbline 102
; PORTB = 0XFE;
ldi R24,254
out 0x5,R24
rjmp L18
L17:
.dbline 104
; else
; PORTB = 0XFF;
ldi R24,255
out 0x5,R24
L18:
.dbline 105
; }
L15:
.dbline 106
; }
L10:
.dbline 107
L7:
.dbline 83
lds R2,_bjz
lds R3,_bjz+1
cp R2,R22
cpc R3,R23
brne L6
.dbline -2
L5:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r com 22 i
.dbend
.dbfunc e delay_us _delay_us fV
; time -> R16,R17
.even
_delay_us::
.dbline -1
.dbline 111
; }
; }
;
; void delay_us(int time)
; { //微秒延时
L21:
.dbline 113
; do
; {
.dbline 114
; time--;
subi R16,1
sbci R17,0
.dbline 115
; }
L22:
.dbline 116
; while (time>1);
ldi R24,1
ldi R25,0
cp R24,R16
cpc R25,R17
brlt L21
.dbline -2
L20:
.dbline 0 ; func end
ret
.dbsym r time 16 I
.dbend
.dbfunc e delay_ms _delay_ms fV
; time -> R20,R21
.even
_delay_ms::
rcall push_gset1
movw R20,R16
.dbline -1
.dbline 120
; }
;
; void delay_ms(unsigned int time)
; { //毫秒延时
rjmp L26
L25:
.dbline 122
.dbline 123
ldi R16,1000
ldi R17,3
rcall _delay_us
.dbline 124
subi R20,1
sbci R21,0
.dbline 125
L26:
.dbline 121
; while(time!=0)
cpi R20,0
cpc R20,R21
brne L25
X0:
.dbline -2
L24:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r time 20 i
.dbend
.dbfunc e alarm _alarm fV
.even
_alarm::
.dbline -1
.dbline 131
; {
; delay_us(1000);
; time--;
; }
; }
;
;
; /*报警函数*/
; void alarm(void)
; {
rjmp L30
L29:
.dbline 132
; while(1){
.dbline 134
; //i=PIND&0x04; //读出PD2口状态
; if(adc_old >= adc[0])
lds R2,_adc
lds R3,_adc+1
lds R4,_adc_old
lds R5,_adc_old+1
cp R4,R2
cpc R5,R3
brlo L32
.dbline 135
; {PORTD^=0x08;
.dbline 135
ldi R24,8
in R2,0xb
eor R2,R24
out 0xb,R2
.dbline 136
; delay_ms(100);
ldi R16,100
ldi R17,0
rcall _delay_ms
.dbline 137
; }
rjmp L33
L32:
.dbline 139
; else
; PORTD=0XFF;
ldi R24,255
out 0xb,R24
L33:
.dbline 140
L30:
.dbline 132
rjmp L29
X1:
.dbline -2
L28:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 144
; }
; }
;
; void main()
; {
.dbline 145
; init_devices();
rcall _init_devices
rjmp L36
L35:
.dbline 146
; while(1){
.dbline 147
; if(adc_w != adc_old){
lds R2,_adc_old
lds R3,_adc_old+1
lds R4,_adc_w
lds R5,_adc_w+1
cp R4,R2
cpc R5,R3
breq L38
.dbline 147
.dbline 148
; adc_old = adc_w;
movw R2,R4
sts _adc_old+1,R3
sts _adc_old,R2
.dbline 149
; display(adc_old);
lds R16,_adc_old
lds R17,_adc_old+1
rcall _display
.dbline 150
; }
L38:
.dbline 151
L36:
.dbline 146
rjmp L35
X2:
.dbline -2
L34:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile D:\xij\demo\demo_diy02-8a\1\C语言\02-8a-11\11.c
_ad_low::
.blkb 1
.dbsym e ad_low _ad_low c
_ad_high::
.blkb 1
.dbsym e ad_high _ad_high c
_bjz::
.blkb 2
.dbsym e bjz _bjz i
_adc_old::
.blkb 2
.dbsym e adc_old _adc_old i
_adc_w::
.blkb 2
.dbsym e adc_w _adc_w i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -