⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tco1.lis

📁 这是AVRATmage8单片机定时器0的作用很好的入门例子,适用用初学者.这
💻 LIS
字号:
                        .module TCO1.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 F:\mega8\icc\TCO1\TCO1.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 F:\mega8\icc\TCO1\TCO1.C
 000C                   .blkb 2
                        .area idata
 000C 0000              .byte 0,0
                        .area data(ram, con, rel)
 000E                   .dbfile F:\mega8\icc\TCO1\TCO1.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 F:\mega8\icc\TCO1\TCO1.C
 0010                   .dbsym e CNT _CNT i
                        .area text(rom, con, rel)
 0000                   .dbfile F:\mega8\icc\TCO1\TCO1.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 <iom8v.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 40E2              ldi R20,800
 0006 53E0              ldi R21,3
 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           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 5801              movw R10,R16
 0026                   .dbline -1
 0026                   .dbline 20
 0026           ;   {for(j=800;j!=0;j--) {;}}
 0026           ; }
 0026           ; 
 0026           ; void Display(uchar *p)         //动态显示函数,参数p为待显示的数组名
 0026           ; {uchar i,sel=0x01;           
 0026                   .dbline 20
 0026 41E0              ldi R20,1
 0028                   .dbline 21
 0028           ;  for(i=0;i<4;i++)
 0028 6627              clr R22
 002A 14C0              rjmp L14
 002C           L11:
 002C                   .dbline 22
 002C                   .dbline 22
 002C 242E              mov R2,R20
 002E 2094              com R2
 0030 25BA              out 0x15,R2
 0032                   .dbline 23
 0032 E62F              mov R30,R22
 0034 FF27              clr R31
 0036 EA0D              add R30,R10
 0038 FB1D              adc R31,R11
 003A E081              ldd R30,z+0
 003C FF27              clr R31
 003E 80E0              ldi R24,<_Table
 0040 90E0              ldi R25,>_Table
 0042 E80F              add R30,R24
 0044 F91F              adc R31,R25
 0046 2080              ldd R2,z+0
 0048 22BA              out 0x12,R2
 004A                   .dbline 24
 004A 02E0              ldi R16,2
 004C 10E0              ldi R17,0
 004E D8DF              rcall _DelayMs
 0050                   .dbline 25
 0050 440F              lsl R20
 0052                   .dbline 26
 0052           L12:
 0052                   .dbline 21
 0052 6395              inc R22
 0054           L14:
 0054                   .dbline 21
 0054 6430              cpi R22,4
 0056 50F3              brlo L11
 0058                   .dbline -2
 0058           L10:
 0058 00D0              rcall pop_gset3
 005A                   .dbline 0 ; func end
 005A 0895              ret
 005C                   .dbsym r sel 20 c
 005C                   .dbsym r i 22 c
 005C                   .dbsym r p 10 pc
 005C                   .dbend
 005C                   .dbfunc e Process _Process fV
 005C           ;              p -> R22,R23
 005C           ;              i -> R20
                        .even
 005C           _Process::
 005C 00D0              rcall push_gset2
 005E B901              movw R22,R18
 0060 402F              mov R20,R16
 0062                   .dbline -1
 0062                   .dbline 32
 0062           ;   {PORTC=~sel;                  //选通最右边的数码管
 0062           ;    PORTD=Table[p[i]];          //送字型码
 0062           ;    DelayMs(2);                 //显示延时    
 0062           ;    sel=sel<<1;                 //移位以显示前一位
 0062           ;   }
 0062           ; }
 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 FB01              movw R30,R22
 006E 0083              std z+0,R16
 0070                   .dbline 33
 0070           ;  i=i%1000;
 0070 28EE              ldi R18,1000
 0072 33E0              ldi R19,3
 0074 042F              mov R16,R20
 0076 1127              clr R17
 0078 00D0              rcall mod16s
 007A 402F              mov R20,R16
 007C                   .dbline 34
 007C           ;  p[1]=i/100;
 007C 14E6              ldi R17,100
 007E 00D0              rcall div8u
 0080 FB01              movw R30,R22
 0082 0183              std z+1,R16
 0084                   .dbline 35
 0084           ;  i=i%100;
 0084 14E6              ldi R17,100
 0086 042F              mov R16,R20
 0088 00D0              rcall mod8u
 008A 402F              mov R20,R16
 008C                   .dbline 36
 008C           ;  p[2]=i/10;
 008C 1AE0              ldi R17,10
 008E 00D0              rcall div8u
 0090 FB01              movw R30,R22
 0092 0283              std z+2,R16
 0094                   .dbline 37
 0094           ;  i=i%10;
 0094 1AE0              ldi R17,10
 0096 042F              mov R16,R20
 0098 00D0              rcall mod8u
 009A 402F              mov R20,R16
 009C                   .dbline 38
 009C           ;  p[3]=i;
 009C FB01              movw R30,R22
 009E 4383              std z+3,R20
 00A0                   .dbline -2
 00A0           L15:
 00A0 00D0              rcall pop_gset2
 00A2                   .dbline 0 ; func end
 00A2 0895              ret
 00A4                   .dbsym r p 22 pc
 00A4                   .dbsym r i 20 c
 00A4                   .dbend
 00A4                   .dbfunc e Init_IO _Init_IO fV
                        .even
 00A4           _Init_IO::
 00A4                   .dbline -1
 00A4                   .dbline 42
 00A4           ; }
 00A4           ; 
 00A4           ; void Init_IO(void)             //初始化I/O口
 00A4           ; {DDRD=0xff;                    //设置A口为推挽1输出
 00A4                   .dbline 42
 00A4 8FEF              ldi R24,255
 00A6 81BB              out 0x11,R24
 00A8                   .dbline 43
 00A8           ;  PORTD=0xff;
 00A8 82BB              out 0x12,R24
 00AA                   .dbline 44
 00AA           ;  DDRB=0x00;                    //设置B口为不带上拉电阻输入
 00AA 2224              clr R2
 00AC 27BA              out 0x17,R2
 00AE                   .dbline 45
 00AE           ;  PORTB=0x00;    
 00AE 28BA              out 0x18,R2
 00B0                   .dbline 46
 00B0           ;  DDRC=0xff;                    //设置C口为推挽1输出;             
 00B0 84BB              out 0x14,R24
 00B2                   .dbline 47
 00B2           ;  PORTC=0xff;
 00B2 85BB              out 0x15,R24
 00B4                   .dbline -2
 00B4           L16:
 00B4                   .dbline 0 ; func end
 00B4 0895              ret
 00B6                   .dbend
 00B6                   .dbfunc e main _main fV
 00B6           ;           Load -> R20
                        .even
 00B6           _main::
 00B6                   .dbline -1
 00B6                   .dbline 51
 00B6           ; }
 00B6           ; 
 00B6           ; void main(void)
 00B6           ; {uchar Load; 
 00B6                   .dbline 52
 00B6           ;  Init_IO();                    //初始化I/O口
 00B6 F6DF              rcall _Init_IO
 00B8                   .dbline 53
 00B8           ;  PORTD=0xff;                   //点亮以测试所有的数码管
 00B8 8FEF              ldi R24,255
 00BA 82BB              out 0x12,R24
 00BC                   .dbline 54
 00BC           ;  PORTC=0x00;                   
 00BC 2224              clr R2
 00BE 25BA              out 0x15,R2
 00C0                   .dbline 55
 00C0           ;  DelayMs(300);                //延时
 00C0 0CE2              ldi R16,300
 00C2 11E0              ldi R17,1
 00C4 9DDF              rcall _DelayMs
 00C6                   .dbline 56
 00C6           ;  PORTC=0xff;                   //熄灭所有的数码管
 00C6 8FEF              ldi R24,255
 00C8 85BB              out 0x15,R24
 00CA                   .dbline 57
 00CA           ;  TCCR0=0x05;                   //T/C0工作于计数方式,下降沿计数
 00CA 85E0              ldi R24,5
 00CC 83BF              out 0x33,R24
 00CE                   .dbline 58
 00CE           ;  TCNT0=CNT;                    //计数初始值0    
 00CE 20900E00          lds R2,_CNT
 00D2 30900F00          lds R3,_CNT+1
 00D6 22BE              out 0x32,R2
 00D8 08C0              rjmp L19
 00DA           L18:
 00DA                   .dbline 60
 00DA                   .dbline 60
 00DA 42B7              in R20,0x32
 00DC                   .dbline 61
 00DC 20E0              ldi R18,<_Data
 00DE 30E0              ldi R19,>_Data
 00E0 042F              mov R16,R20
 00E2 BCDF              rcall _Process
 00E4                   .dbline 62
 00E4 00E0              ldi R16,<_Data
 00E6 10E0              ldi R17,>_Data
 00E8 9CDF              rcall _Display
 00EA                   .dbline 63
 00EA           L19:
 00EA                   .dbline 59
 00EA F7CF              rjmp L18
 00EC           X2:
 00EC                   .dbline -2
 00EC           L17:
 00EC                   .dbline 0 ; func end
 00EC 0895              ret
 00EE                   .dbsym r Load 20 c
 00EE                   .dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -