?? adc.lis
字號:
.module adc.c
.area text(rom, con, rel)
0000 .dbfile ./74164.h
0000 .dbfunc e write164 _write164 fV
0000 ; ch -> R20
0000 ; i -> R22
0000 ; x -> R16
.even
0000 _write164::
0000 00D0 rcall push_gset2
0002 .dbline -1
0002 .dbline 2
0002 ; //ICC-AVR application builder : 2005-3-1 22:02:29
0002 ; // Target : M8
0002 .dbline 5
0002 ; // Crystal: 8.0000Mhz
0002 ;
0002 ; #include <iom8v.h>
0002 402F mov R20,R16
0004 .dbline 6
0004 ; #include <macros.h>
0004 C098 cbi 0x18,0
0006 .dbline 7
0006 ; #include <74164.h>
0006 9698 cbi 0x12,6
0008 .dbline 8
0008 6627 clr R22
000A 0AC0 rjmp L5
000C L2:
000C .dbline 8
000C ;
000C .dbline 9
000C ; unsigned char display[4]; // 顯示緩沖區
000C 47FF sbrs R20,7
000E 02C0 rjmp L6
0010 .dbline 10
0010 ; unsigned char dis; // 當前顯示
0010 979A sbi 0x12,7
0012 01C0 rjmp L7
0014 L6:
0014 .dbline 12
0014 ; unsigned int adc; // 保存AD轉換的值
0014 ; unsigned char time; // AD轉換的時間間隔
0014 9798 cbi 0x12,7
0016 L7:
0016 .dbline 13
0016 440F lsl R20
0018 .dbline 14
0018 969A sbi 0x12,6
001A .dbline 15
001A 0000 nop
001C .dbline 16
001C 9698 cbi 0x12,6
001E .dbline 17
001E L3:
001E .dbline 8
001E 6395 inc R22
0020 L5:
0020 .dbline 8
0020 6830 cpi R22,8
0022 A0F3 brlo L2
0024 .dbline 18
0024 ;
0024 ;
0024 ; //TIMER0 initialisation - prescale:256
0024 ; // WGM: Normal
0024 ; // desired value: 5mSec
0024 ; // actual value: 4.992mSec (0.2%)
0024 C09A sbi 0x18,0
0026 .dbline -2
0026 .dbline 19
0026 ; void timer0_init(void)
0026 L1:
0026 00D0 rcall pop_gset2
0028 .dbline 0 ; func end
0028 0895 ret
002A .dbsym r ch 20 c
002A .dbsym r i 22 c
002A .dbsym r x 16 c
002A .dbend
002A .dbfile D:\job\avrtest\web\example\ad\adc.c
002A .dbfunc e timer0_init _timer0_init fV
.even
002A _timer0_init::
002A .dbline -1
002A .dbline 20
002A ; {
002A .dbline 21
002A ; TCCR0 = 0x00; //stop
002A 2224 clr R2
002C 23BE out 0x33,R2
002E .dbline 22
002E ; TCNT0 = 0x64; //set count
002E 84E6 ldi R24,100
0030 82BF out 0x32,R24
0032 .dbline 23
0032 ; TCCR0 = 0x04; //start timer
0032 84E0 ldi R24,4
0034 83BF out 0x33,R24
0036 .dbline -2
0036 .dbline 24
0036 ; }
0036 L8:
0036 .dbline 0 ; func end
0036 0895 ret
0038 .dbend
.area vector(rom, abs)
.org 18
0012 1CC0 rjmp _timer0_ovf_isr
.area text(rom, con, rel)
0038 .dbfile D:\job\avrtest\web\example\ad\adc.c
0038 .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
0038 _timer0_ovf_isr::
0038 00D0 rcall push_lset
003A 00D0 rcall push_gset1
003C .dbline -1
003C .dbline 28
003C ;
003C ; #pragma interrupt_handler timer0_ovf_isr:10
003C ; void timer0_ovf_isr(void)
003C ; {
003C .dbline 29
003C ; TCNT0 = 0x64; //reload counter value
003C 84E6 ldi R24,100
003E 82BF out 0x32,R24
0040 .dbline 31
0040 ; // ad
0040 ; if(++time == 40){
0040 80910000 lds R24,_time
0044 8F5F subi R24,255 ; addi 1
0046 282E mov R2,R24
0048 20920000 sts _time,R2
004C 8832 cpi R24,40
004E 09F0 breq X2
0050 53C0 rjmp L10
0052 X2:
0052 .dbline 31
0052 .dbline 32
0052 ; time = 0;
0052 2224 clr R2
0054 20920000 sts _time,R2
0058 .dbline 33
0058 ; ADCSR = 0xC6; // 開始轉換
0058 86EC ldi R24,198
005A 86B9 out 0x6,R24
005C L12:
005C .dbline 34
005C L13:
005C .dbline 34
005C ; while(!(ADCSR & 0x10)); // 等待轉換完成
005C 349B sbis 0x6,4
005E FECF rjmp L12
0060 .dbline 35
0060 ; adc = ADCL;
0060 24B0 in R2,0x4
0062 3324 clr R3
0064 30920200 sts _adc+1,R3
0068 20920100 sts _adc,R2
006C .dbline 36
006C ; adc |= (int)(ADCH << 8); // 注意順序
006C 25B0 in R2,0x5
006E 3324 clr R3
0070 322C mov R3,R2
0072 2224 clr R2
0074 40900100 lds R4,_adc
0078 50900200 lds R5,_adc+1
007C 4228 or R4,R2
007E 5328 or R5,R3
0080 50920200 sts _adc+1,R5
0084 40920100 sts _adc,R4
0088 .dbline 37
0088 ; ADCSR = 0x10; // 停止
0088 80E1 ldi R24,16
008A 86B9 out 0x6,R24
008C .dbline 38
008C ; display[0] = adc%10;
008C 2AE0 ldi R18,10
008E 30E0 ldi R19,0
0090 8201 movw R16,R4
0092 00D0 rcall mod16u
0094 00930400 sts _display,R16
0098 .dbline 39
0098 ; adc = adc / 10;
0098 2AE0 ldi R18,10
009A 30E0 ldi R19,0
009C 00910100 lds R16,_adc
00A0 10910200 lds R17,_adc+1
00A4 00D0 rcall div16u
00A6 10930200 sts _adc+1,R17
00AA 00930100 sts _adc,R16
00AE .dbline 40
00AE ; display[1] = adc%10;
00AE 2AE0 ldi R18,10
00B0 30E0 ldi R19,0
00B2 00D0 rcall mod16u
00B4 00930500 sts _display+1,R16
00B8 .dbline 41
00B8 ; adc = adc / 10;
00B8 2AE0 ldi R18,10
00BA 30E0 ldi R19,0
00BC 00910100 lds R16,_adc
00C0 10910200 lds R17,_adc+1
00C4 00D0 rcall div16u
00C6 10930200 sts _adc+1,R17
00CA 00930100 sts _adc,R16
00CE .dbline 42
00CE ; display[2] = adc%10;
00CE 2AE0 ldi R18,10
00D0 30E0 ldi R19,0
00D2 00D0 rcall mod16u
00D4 00930600 sts _display+2,R16
00D8 .dbline 43
00D8 ; adc = adc / 10;
00D8 2AE0 ldi R18,10
00DA 30E0 ldi R19,0
00DC 00910100 lds R16,_adc
00E0 10910200 lds R17,_adc+1
00E4 00D0 rcall div16u
00E6 10930200 sts _adc+1,R17
00EA 00930100 sts _adc,R16
00EE .dbline 44
00EE ; display[3] = adc%10;
00EE 2AE0 ldi R18,10
00F0 30E0 ldi R19,0
00F2 00D0 rcall mod16u
00F4 00930700 sts _display+3,R16
00F8 .dbline 45
00F8 ; }
00F8 L10:
00F8 .dbline 48
00F8 40910300 lds R20,_dis
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -