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

📄 counter.lis

📁 AVRkaifashili.rar
💻 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 + -