?? counter.lis
字號:
.module Counter.c
.area data(ram, con, rel)
0000 _Table::
0000 .blkb 2
.area idata
0000 3F06 .byte 63,6
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 5B4F .byte 91,'O
.area data(ram, con, rel)
0004 .blkb 2
.area idata
0004 666D .byte 'f,'m
.area data(ram, con, rel)
0006 .blkb 2
.area idata
0006 7D07 .byte 125,7
.area data(ram, con, rel)
0008 .blkb 2
.area idata
0008 7F6F .byte 127,'o
.area data(ram, con, rel)
000A .dbfile C:\DOCUME~1\Administrator\桌面\張軍\AVR\AVR單片機系統開發實例稿\第二章\第二章程序\定時計數器的C語言編程\基于TC0的計數器設計\Counter.c
000A .dbsym e Table _Table A[10:10]c
000A _Data::
000A .blkb 2
.area idata
000A 0000 .byte 0,0
.area data(ram, con, rel)
000C .dbfile C:\DOCUME~1\Administrator\桌面\張軍\AVR\AVR單片機系統開發實例稿\第二章\第二章程序\定時計數器的C語言編程\基于TC0的計數器設計\Counter.c
000C .blkb 2
.area idata
000C 0000 .byte 0,0
.area data(ram, con, rel)
000E .dbfile C:\DOCUME~1\Administrator\桌面\張軍\AVR\AVR單片機系統開發實例稿\第二章\第二章程序\定時計數器的C語言編程\基于TC0的計數器設計\Counter.c
000E .dbsym e Data _Data A[4:4]c
000E _CNT::
000E .blkb 2
.area idata
000E 0000 .word 0
.area data(ram, con, rel)
0010 .dbfile C:\DOCUME~1\Administrator\桌面\張軍\AVR\AVR單片機系統開發實例稿\第二章\第二章程序\定時計數器的C語言編程\基于TC0的計數器設計\Counter.c
0010 .dbsym e CNT _CNT i
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\張軍\AVR\AVR單片機系統開發實例稿\第二章\第二章程序\定時計數器的C語言編程\基于TC0的計數器設計\Counter.c
0000 .dbfunc e DelayMs _DelayMs fV
0000 ; j -> R20,R21
0000 ; i -> R16,R17
.even
0000 _DelayMs::
0000 00D0 rcall push_gset1
0002 .dbline -1
0002 .dbline 14
0002 ; //******************************FileName: Counter.C*************************//
0002 ; //******************************ICCAVR V6.30編譯***************************//
0002 ;
0002 ; #include <io8535v.h>
0002 ; #define uchar unsigned char
0002 ; #define uint unsigned int
0002 ;
0002 ; //數碼管字型表,對應0,1,2,3,4,5,6,7,8,9//
0002 ; uchar Table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
0002 ; uchar Data[4]={0,0,0,0}; //顯示初始值:0 0 0 0
0002 ; uint CNT=0; //初始計數值:0
0002 ;
0002 ; void DelayMs(uint i) //Ms級延時,參數i為延時時間
0002 ; {uint j;
0002 .dbline 15
0002 ; for(;i!=0;i--)
0002 0AC0 rjmp L5
0004 L2:
0004 .dbline 16
0004 .dbline 16
0004 40E4 ldi R20,8000
0006 5FE1 ldi R21,31
0008 02C0 rjmp L9
000A L6:
000A .dbline 16
000A .dbline 16
000A .dbline 16
000A L7:
000A .dbline 16
000A 4150 subi R20,1
000C 5040 sbci R21,0
000E L9:
000E .dbline 16
000E 4030 cpi R20,0
0010 4507 cpc R20,R21
0012 D9F7 brne L6
0014 X0:
0014 .dbline 16
0014 L3:
0014 .dbline 15
0014 0150 subi R16,1
0016 1040 sbci R17,0
0018 L5:
0018 .dbline 15
0018 0030 cpi R16,0
001A 0107 cpc R16,R17
001C 99F7 brne L2
001E X1:
001E .dbline -2
001E .dbline 17
001E ; {for(j=8000;j!=0;j--) {;}}
001E ; }
001E L1:
001E 00D0 rcall pop_gset1
0020 .dbline 0 ; func end
0020 0895 ret
0022 .dbsym r j 20 i
0022 .dbsym r i 16 i
0022 .dbend
0022 .dbfunc e Display _Display fV
0022 ; sel -> R20
0022 ; i -> R22
0022 ; p -> R10,R11
.even
0022 _Display::
0022 00D0 rcall push_gset3
0024 A02E mov R10,R16
0026 B12E mov R11,R17
0028 .dbline -1
0028 .dbline 20
0028 ;
0028 ; void Display(uchar *p) //動態顯示函數,參數p為待顯示的數組名
0028 ; {uchar i,sel=0x01;
0028 .dbline 20
0028 41E0 ldi R20,1
002A .dbline 21
002A ; for(i=0;i<4;i++)
002A 6627 clr R22
002C 12C0 rjmp L14
002E L11:
002E .dbline 22
002E .dbline 22
002E 45BB out 0x15,R20
0030 .dbline 23
0030 E62F mov R30,R22
0032 FF27 clr R31
0034 EA0D add R30,R10
0036 FB1D adc R31,R11
0038 E081 ldd R30,z+0
003A FF27 clr R31
003C 80E0 ldi R24,<_Table
003E 90E0 ldi R25,>_Table
0040 E80F add R30,R24
0042 F91F adc R31,R25
0044 2080 ldd R2,z+0
0046 2BBA out 0x1b,R2
0048 .dbline 24
0048 02E0 ldi R16,2
004A 10E0 ldi R17,0
004C D9DF rcall _DelayMs
004E .dbline 25
004E 440F lsl R20
0050 .dbline 26
0050 L12:
0050 .dbline 21
0050 6395 inc R22
0052 L14:
0052 .dbline 21
0052 6430 cpi R22,4
0054 60F3 brlo L11
0056 .dbline -2
0056 .dbline 27
0056 ; {PORTC=sel; //選通最右邊的數碼管
0056 ; PORTA=Table[p[i]]; //送字型碼
0056 ; DelayMs(2); //顯示延時
0056 ; sel=sel<<1; //移位以顯示前一位
0056 ; }
0056 ; }
0056 L10:
0056 00D0 rcall pop_gset3
0058 .dbline 0 ; func end
0058 0895 ret
005A .dbsym r sel 20 c
005A .dbsym r i 22 c
005A .dbsym r p 10 pc
005A .dbend
005A .dbfunc e Process _Process fV
005A ; p -> R22,R23
005A ; i -> R20
.even
005A _Process::
005A 00D0 rcall push_gset2
005C 622F mov R22,R18
005E 732F mov R23,R19
0060 402F mov R20,R16
0062 .dbline -1
0062 .dbline 32
0062 ;
0062 ; //計數值處理函數。參數i:計數值;參數p:處理數據存放的數組名//
0062 ; //功能:此函數用于將計數值拆分為BCD碼的千,百,十,一數據,用于查表顯示//
0062 ; void Process(uchar i,uchar *p)
0062 ; {p[0]=i/1000;
0062 .dbline 32
0062 28EE ldi R18,1000
0064 33E0 ldi R19,3
0066 042F mov R16,R20
0068 1127 clr R17
006A 00D0 rcall div16s
006C E62F mov R30,R22
006E F72F mov R31,R23
0070 0083 std z+0,R16
0072 .dbline 33
0072 ; i=i%1000;
0072 28EE ldi R18,1000
0074 33E0 ldi R19,3
0076 042F mov R16,R20
0078 1127 clr R17
007A 00D0 rcall mod16s
007C 402F mov R20,R16
007E .dbline 34
007E ; p[1]=i/100;
007E 14E6 ldi R17,100
0080 00D0 rcall div8u
0082 E62F mov R30,R22
0084 F72F mov R31,R23
0086 0183 std z+1,R16
0088 .dbline 35
0088 ; i=i%100;
0088 14E6 ldi R17,100
008A 042F mov R16,R20
008C 00D0 rcall mod8u
008E 402F mov R20,R16
0090 .dbline 36
0090 ; p[2]=i/10;
0090 1AE0 ldi R17,10
0092 00D0 rcall div8u
0094 E62F mov R30,R22
0096 F72F mov R31,R23
0098 0283 std z+2,R16
009A .dbline 37
009A ; i=i%10;
009A 1AE0 ldi R17,10
009C 042F mov R16,R20
009E 00D0 rcall mod8u
00A0 402F mov R20,R16
00A2 .dbline 38
00A2 ; p[3]=i;
00A2 E62F mov R30,R22
00A4 F72F mov R31,R23
00A6 4383 std z+3,R20
00A8 .dbline -2
00A8 .dbline 39
00A8 ; }
00A8 L15:
00A8 00D0 rcall pop_gset2
00AA .dbline 0 ; func end
00AA 0895 ret
00AC .dbsym r p 22 pc
00AC .dbsym r i 20 c
00AC .dbend
00AC .dbfunc e Init_IO _Init_IO fV
.even
00AC _Init_IO::
00AC .dbline -1
00AC .dbline 42
00AC ;
00AC ; void Init_IO(void) //初始化I/O口
00AC ; {DDRA=0xff; //設置A口為推挽1輸出
00AC .dbline 42
00AC 8FEF ldi R24,255
00AE 8ABB out 0x1a,R24
00B0 .dbline 43
00B0 ; PORTA=0xff;
00B0 8BBB out 0x1b,R24
00B2 .dbline 44
00B2 ; DDRB=0x00; //設置B口為不帶上拉電阻輸入
00B2 2224 clr R2
00B4 27BA out 0x17,R2
00B6 .dbline 45
00B6 ; PORTB=0x00;
00B6 28BA out 0x18,R2
00B8 .dbline 46
00B8 ; DDRC=0xff; //設置C口為推挽1輸出;
00B8 84BB out 0x14,R24
00BA .dbline 47
00BA ; PORTC=0xff;
00BA 85BB out 0x15,R24
00BC .dbline -2
00BC .dbline 48
00BC ; }
00BC L16:
00BC .dbline 0 ; func end
00BC 0895 ret
00BE .dbend
00BE .dbfunc e main _main fV
00BE ; Load -> R20
.even
00BE _main::
00BE .dbline -1
00BE .dbline 51
00BE ;
00BE ; void main(void)
00BE ; {uchar Load;
00BE .dbline 52
00BE ; Init_IO(); //初始化I/O口
00BE F6DF rcall _Init_IO
00C0 .dbline 53
00C0 ; PORTA=0xff; //點亮以測試所有的數碼管
00C0 8FEF ldi R24,255
00C2 8BBB out 0x1b,R24
00C4 .dbline 54
00C4 ; PORTC=0x00;
00C4 2224 clr R2
00C6 25BA out 0x15,R2
00C8 .dbline 55
00C8 ; DelayMs(3000); //延時
00C8 08EB ldi R16,3000
00CA 1BE0 ldi R17,11
00CC 99DF rcall _DelayMs
00CE .dbline 56
00CE ; PORTC=0xff; //熄滅所有的數碼管
00CE 8FEF ldi R24,255
00D0 85BB out 0x15,R24
00D2 .dbline 57
00D2 ; TCCR0=0x06; //T/C0工作于計數方式,下降沿計數
00D2 86E0 ldi R24,6
00D4 83BF out 0x33,R24
00D6 .dbline 58
00D6 ; TCNT0=CNT; //計數初始值0
00D6 20900E00 lds R2,_CNT
00DA 30900F00 lds R3,_CNT+1
00DE 22BE out 0x32,R2
00E0 08C0 rjmp L19
00E2 L18:
00E2 .dbline 60
00E2 .dbline 60
00E2 42B7 in R20,0x32
00E4 .dbline 61
00E4 20E0 ldi R18,<_Data
00E6 30E0 ldi R19,>_Data
00E8 042F mov R16,R20
00EA B7DF rcall _Process
00EC .dbline 62
00EC 00E0 ldi R16,<_Data
00EE 10E0 ldi R17,>_Data
00F0 98DF rcall _Display
00F2 .dbline 63
00F2 L19:
00F2 .dbline 59
00F2 F7CF rjmp L18
00F4 X2:
00F4 .dbline -2
00F4 .dbline 64
00F4 ; while(1)
00F4 ; {Load=TCNT0;
00F4 ; Process(Load,Data); //計數值處理
00F4 ; Display(Data); //動態掃描顯示
00F4 ; }
00F4 ; }
00F4 L17:
00F4 .dbline 0 ; func end
00F4 0895 ret
00F6 .dbsym r Load 20 c
00F6 .dbend
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -