📄 11.lis
字号:
.module _11.c
.area data(ram, con, rel)
0000 _adc::
0000 .blkb 2
.area idata
0000 3303 .word 819
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 6602 .word 614
.area data(ram, con, rel)
0004 .blkb 2
.area idata
0004 9901 .word 409
.area data(ram, con, rel)
0006 .blkb 2
.area idata
0006 CC00 .word 204
.area data(ram, con, rel)
0008 .dbfile D:\xij\demo\demo_diy02-8a\1\C语言\02-8a-11\11.c
0008 .dbsym e adc _adc A[8:4]i
.area text(rom, con, rel)
0000 .dbfile D:\xij\demo\demo_diy02-8a\1\C语言\02-8a-11\11.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 20
0000 ; //ICC-AVR application builder : 2005-3-15 10:10:23
0000 ; // Target : M48
0000 ; // Crystal: 8.0000Mhz
0000 ;
0000 ; #include <iom48v.h>
0000 ; #include <macros.h>
0000 ; unsigned int adc_w;
0000 ; unsigned int adc_old,bjz;
0000 ; unsigned char ad_high,ad_low;
0000 ; unsigned int adc[4]= {0x333,0x266,0x199,0xcc};
0000 ; void alarm(void);
0000 ;
0000 ; /*
0000 ; #define adc_4 0x333;
0000 ; #define adc_3 0x266;
0000 ; #define adc_2 0x199;
0000 ; #define adc_1 0xcc;
0000 ; */
0000 ; void port_init(void)
0000 ; {
0000 .dbline 21
0000 ; PORTB = 0xFF;
0000 8FEF ldi R24,255
0002 85B9 out 0x5,R24
0004 .dbline 22
0004 ; DDRB = 0x07;
0004 87E0 ldi R24,7
0006 84B9 out 0x4,R24
0008 .dbline 23
0008 ; PORTC = 0x7F; //m103 output only
0008 8FE7 ldi R24,127
000A 88B9 out 0x8,R24
000C .dbline 24
000C ; DDRC = 0x00;
000C 2224 clr R2
000E 27B8 out 0x7,R2
0010 .dbline 25
0010 ; PORTD = 0xFF;
0010 8FEF ldi R24,255
0012 8BB9 out 0xb,R24
0014 .dbline 26
0014 ; DDRD = 0xFF;
0014 8AB9 out 0xa,R24
0016 .dbline -2
0016 L1:
0016 .dbline 0 ; func end
0016 0895 ret
0018 .dbend
0018 .dbfunc e adc_init _adc_init fV
.even
0018 _adc_init::
0018 .dbline -1
0018 .dbline 32
0018 ; }
0018 ;
0018 ; //ADC initialize
0018 ; // Conversion time: 13uS
0018 ; void adc_init(void)
0018 ; {
0018 .dbline 33
0018 ; ADCSRA = 0x00; //disable adc
0018 2224 clr R2
001A 20927A00 sts 122,R2
001E .dbline 34
001E ; ADMUX = 0x40; //select adc input 0
001E 80E4 ldi R24,64
0020 80937C00 sts 124,R24
0024 .dbline 35
0024 ; ACSR = 0x80;
0024 80E8 ldi R24,128
0026 80BF out 0x30,R24
0028 .dbline 36
0028 ; ADCSRB = 0x00;
0028 20927B00 sts 123,R2
002C .dbline 37
002C ; ADCSRA = 0xCB;
002C 8BEC ldi R24,203
002E 80937A00 sts 122,R24
0032 .dbline -2
0032 L2:
0032 .dbline 0 ; func end
0032 0895 ret
0034 .dbend
.area vector(rom, abs)
.org 42
002A 1AC0 rjmp _adc_isr
.area text(rom, con, rel)
0034 .dbfile D:\xij\demo\demo_diy02-8a\1\C语言\02-8a-11\11.c
0034 .dbfunc e adc_isr _adc_isr fV
.even
0034 _adc_isr::
0034 2A92 st -y,R2
0036 3A92 st -y,R3
0038 8A93 st -y,R24
003A 2FB6 in R2,0x3f
003C 2A92 st -y,R2
003E .dbline -1
003E .dbline 43
003E ;
003E ; }
003E ;
003E ; #pragma interrupt_handler adc_isr:22
003E ; void adc_isr(void)
003E ; {
003E .dbline 44
003E ; adc_w = ADC;
003E 20907800 lds R2,120
0042 30907900 lds R3,120+1
0046 30920700 sts _adc_w+1,R3
004A 20920600 sts _adc_w,R2
004E .dbline 45
004E ; ADMUX = 0x40;
004E 80E4 ldi R24,64
0050 80937C00 sts 124,R24
0054 .dbline 46
0054 ; ADCSRA = 0xCB;
0054 8BEC ldi R24,203
0056 80937A00 sts 122,R24
005A .dbline -2
005A L3:
005A 2990 ld R2,y+
005C 2FBE out 0x3f,R2
005E 8991 ld R24,y+
0060 3990 ld R3,y+
0062 2990 ld R2,y+
0064 .dbline 0 ; func end
0064 1895 reti
0066 .dbend
0066 .dbfunc e init_devices _init_devices fV
.even
0066 _init_devices::
0066 .dbline -1
0066 .dbline 56
0066 ; //ad_high = adch;
0066 ; //ad_low = adcl;
0066 ; //conversion complete, read value (int) using...
0066 ; // value=ADCL; //Read 8 low bits first (important)
0066 ; // value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
0066 ; }
0066 ;
0066 ; //call this routine to initialize all peripherals
0066 ; void init_devices(void)
0066 ; {
0066 .dbline 58
0066 ; //stop errant interrupts until set up
0066 ; CLI(); //disable all interrupts
0066 F894 cli
0068 .dbline 59
0068 ; port_init();
0068 CBDF rcall _port_init
006A .dbline 60
006A ; adc_init();
006A D6DF rcall _adc_init
006C .dbline 62
006C ;
006C ; MCUCR = 0x00;
006C 2224 clr R2
006E 25BE out 0x35,R2
0070 .dbline 63
0070 ; EICRA = 0x00; //extended ext ints
0070 20926900 sts 105,R2
0074 .dbline 64
0074 ; EIMSK = 0x00;
0074 2DBA out 0x1d,R2
0076 .dbline 66
0076 ;
0076 ; TIMSK0 = 0x00; //timer 0 interrupt sources
0076 20926E00 sts 110,R2
007A .dbline 67
007A ; TIMSK1 = 0x00; //timer 1 interrupt sources
007A 20926F00 sts 111,R2
007E .dbline 68
007E ; TIMSK2 = 0x00; //timer 2 interrupt sources
007E 20927000 sts 112,R2
0082 .dbline 70
0082 ;
0082 ; PCMSK0 = 0x00; //pin change mask 0
0082 20926B00 sts 107,R2
0086 .dbline 71
0086 ; PCMSK1 = 0x00; //pin change mask 1
0086 20926C00 sts 108,R2
008A .dbline 72
008A ; PCMSK2 = 0x00; //pin change mask 2
008A 20926D00 sts 109,R2
008E .dbline 73
008E ; PCICR = 0x00; //pin change enable
008E 20926800 sts 104,R2
0092 .dbline 74
0092 ; PRR = 0x00; //power controller
0092 20926400 sts 100,R2
0096 .dbline 75
0096 ; SEI(); //re-enable interrupts
0096 7894 sei
0098 .dbline -2
0098 L4:
0098 .dbline 0 ; func end
0098 0895 ret
009A .dbend
009A .dbfunc e display _display fV
009A ; i -> R20,R21
009A ; com -> R22,R23
.even
009A _display::
009A 00D0 rcall push_gset2
009C B801 movw R22,R16
009E .dbline -1
009E .dbline 81
009E ; //all peripherals are now initialized
009E ; }
009E ;
009E ; /*显示函数*/
009E ; void display(unsigned int com)
009E ; {
009E 2FC0 rjmp L7
00A0 L6:
00A0 .dbline 84
00A0 ; unsigned int i;
00A0 ; while(bjz != com)
00A0 ; {
00A0 .dbline 85
00A0 ; bjz = com;
00A0 70930300 sts _bjz+1,R23
00A4 60930200 sts _bjz,R22
00A8 .dbline 86
00A8 ; if(com > adc[1])
00A8 20900200 lds R2,_adc+2
00AC 30900300 lds R3,_adc+2+1
00B0 2616 cp R2,R22
00B2 3706 cpc R3,R23
00B4 68F4 brsh L9
00B6 .dbline 87
00B6 ; {
00B6 .dbline 88
00B6 ; i = com;
00B6 AB01 movw R20,R22
00B8 .dbline 89
00B8 ; if(i > adc[0])
00B8 20900000 lds R2,_adc
00BC 30900100 lds R3,_adc+1
00C0 2616 cp R2,R22
00C2 3706 cpc R3,R23
00C4 10F4 brsh L12
00C6 .dbline 90
00C6 ; {alarm();}
00C6 .dbline 90
00C6 39D0 rcall _alarm
00C8 .dbline 90
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -