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

📄 tc0_counter.lst

📁 AVRkaifashili.rar
💻 LST
字号:
__text_start:
__start:
    0008 E5CF      LDI	R28,0x5F
    0009 E0D2      LDI	R29,2
    000A BFCD      OUT	0x3D,R28
    000B BFDE      OUT	0x3E,R29
    000C 51C0      SUBI	R28,0x10
    000D 40D0      SBCI	R29,0
    000E EA0A      LDI	R16,0xAA
    000F 8308      STD	Y+0,R16
    0010 2400      CLR	R0
    0011 E7E0      LDI	R30,0x70
    0012 E0F0      LDI	R31,0
    0013 E010      LDI	R17,0
    0014 37E0      CPI	R30,0x70
    0015 07F1      CPC	R31,R17
    0016 F011      BEQ	0x0019
    0017 9201      ST	R0,Z+
    0018 CFFB      RJMP	0x0014
    0019 8300      STD	Z+0,R16
    001A E0E0      LDI	R30,0
    001B E0F0      LDI	R31,0
    001C E6A0      LDI	R26,0x60
    001D E0B0      LDI	R27,0
    001E E010      LDI	R17,0
    001F 31E0      CPI	R30,0x10
    0020 07F1      CPC	R31,R17
    0021 F021      BEQ	0x0026
    0022 95C8      LPM
    0023 9631      ADIW	R30,1
    0024 920D      ST	R0,X+
    0025 CFF9      RJMP	0x001F
    0026 D060      RCALL	_main
_exit:
    0027 CFFF      RJMP	_exit
_DelayMs:
  j                    --> R20
  i                    --> R16
    0028 D0CF      RCALL	push_gset1
FILE: C:\DOCUME~1\Administrator\桌面\张军\AVR\AVR单片机系统开发实例稿\第二章\第二章程序\定时计数器的C语言编程\基于TC0的计数器设计\Counter.c
(0001) //******************************FileName: Counter.C*************************//
(0002) //******************************ICCAVR V6.30编译***************************//
(0003) 
(0004) #include <io8535v.h>                 
(0005) #define uchar unsigned char
(0006) #define uint  unsigned int
(0007) 
(0008) //数码管字型表,对应0,1,2,3,4,5,6,7,8,9//
(0009) uchar Table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
(0010) uchar Data[4]={0,0,0,0};       //显示初始值:0 0 0 0
(0011) uint  CNT=0;                    //初始计数值:0 
(0012) 
(0013) void DelayMs(uint i)           //Ms级延时,参数i为延时时间
(0014) {uint j;
(0015)  for(;i!=0;i--)
    0029 C00A      RJMP	0x0034
(0016)   {for(j=8000;j!=0;j--) {;}}
    002A E440      LDI	R20,0x40
    002B E15F      LDI	R21,0x1F
    002C C002      RJMP	0x002F
    002D 5041      SUBI	R20,1
    002E 4050      SBCI	R21,0
    002F 3040      CPI	R20,0
    0030 0745      CPC	R20,R21
    0031 F7D9      BNE	0x002D
    0032 5001      SUBI	R16,1
    0033 4010      SBCI	R17,0
    0034 3000      CPI	R16,0
    0035 0701      CPC	R16,R17
    0036 F799      BNE	0x002A
(0017) }
    0037 D0C3      RCALL	pop_gset1
    0038 9508      RET
_Display:
  sel                  --> R20
  i                    --> R22
  p                    --> R10
    0039 D0D8      RCALL	push_gset3
    003A 2EA0      MOV	R10,R16
    003B 2EB1      MOV	R11,R17
(0018) 
(0019) void Display(uchar *p)         //动态显示函数,参数p为待显示的数组名
(0020) {uchar i,sel=0x01;           
    003C E041      LDI	R20,1
(0021)  for(i=0;i<4;i++)
    003D 2766      CLR	R22
    003E C012      RJMP	0x0051
(0022)   {PORTC=sel;                  //选通最右边的数码管
    003F BB45      OUT	0x15,R20
(0023)    PORTA=Table[p[i]];          //送字型码
    0040 2FE6      MOV	R30,R22
    0041 27FF      CLR	R31
    0042 0DEA      ADD	R30,R10
    0043 1DFB      ADC	R31,R11
    0044 81E0      LDD	R30,Z+0
    0045 27FF      CLR	R31
    0046 E680      LDI	R24,0x60
    0047 E090      LDI	R25,0
    0048 0FE8      ADD	R30,R24
    0049 1FF9      ADC	R31,R25
    004A 8020      LDD	R2,Z+0
    004B BA2B      OUT	0x1B,R2
(0024)    DelayMs(2);                 //显示延时    
    004C E002      LDI	R16,2
    004D E010      LDI	R17,0
    004E DFD9      RCALL	_DelayMs
(0025)    sel=sel<<1;                 //移位以显示前一位
    004F 0F44      LSL	R20
    0050 9563      INC	R22
    0051 3064      CPI	R22,4
    0052 F360      BCS	0x003F
(0026)   }
(0027) }
    0053 D0A2      RCALL	pop_gset3
    0054 9508      RET
_Process:
  p                    --> R22
  i                    --> R20
    0055 D0B9      RCALL	push_gset2
    0056 2F62      MOV	R22,R18
    0057 2F73      MOV	R23,R19
    0058 2F40      MOV	R20,R16
(0028) 
(0029) //计数值处理函数。参数i:计数值;参数p:处理数据存放的数组名//
(0030) //功能:此函数用于将计数值拆分为BCD码的千,百,十,一数据,用于查表显示//
(0031) void Process(uchar i,uchar *p) 
(0032) {p[0]=i/1000;
    0059 EE28      LDI	R18,0xE8
    005A E033      LDI	R19,3
    005B 2F04      MOV	R16,R20
    005C 2711      CLR	R17
    005D D049      RCALL	div16s
    005E 2FE6      MOV	R30,R22
    005F 2FF7      MOV	R31,R23
    0060 8300      STD	Z+0,R16
(0033)  i=i%1000;
    0061 EE28      LDI	R18,0xE8
    0062 E033      LDI	R19,3
    0063 2F04      MOV	R16,R20
    0064 2711      CLR	R17
    0065 D03D      RCALL	mod16s
    0066 2F40      MOV	R20,R16
(0034)  p[1]=i/100;
    0067 E614      LDI	R17,0x64
    0068 D075      RCALL	div8u
    0069 2FE6      MOV	R30,R22
    006A 2FF7      MOV	R31,R23
    006B 8301      STD	Z+1,R16
(0035)  i=i%100;
    006C E614      LDI	R17,0x64
    006D 2F04      MOV	R16,R20
    006E D06D      RCALL	mod8u
    006F 2F40      MOV	R20,R16
(0036)  p[2]=i/10;
    0070 E01A      LDI	R17,0xA
    0071 D06C      RCALL	div8u
    0072 2FE6      MOV	R30,R22
    0073 2FF7      MOV	R31,R23
    0074 8302      STD	Z+2,R16
(0037)  i=i%10;
    0075 E01A      LDI	R17,0xA
    0076 2F04      MOV	R16,R20
    0077 D064      RCALL	mod8u
    0078 2F40      MOV	R20,R16
(0038)  p[3]=i;
    0079 2FE6      MOV	R30,R22
    007A 2FF7      MOV	R31,R23
    007B 8343      STD	Z+3,R20
(0039) }
    007C D077      RCALL	pop_gset2
    007D 9508      RET
(0040) 
(0041) void Init_IO(void)             //初始化I/O口
(0042) {DDRA=0xff;                    //设置A口为推挽1输出
_Init_IO:
    007E EF8F      LDI	R24,0xFF
    007F BB8A      OUT	0x1A,R24
(0043)  PORTA=0xff;
    0080 BB8B      OUT	0x1B,R24
(0044)  DDRB=0x00;                    //设置B口为不带上拉电阻输入
    0081 2422      CLR	R2
    0082 BA27      OUT	0x17,R2
(0045)  PORTB=0x00;    
    0083 BA28      OUT	0x18,R2
(0046)  DDRC=0xff;                    //设置C口为推挽1输出;             
    0084 BB84      OUT	0x14,R24
(0047)  PORTC=0xff;
    0085 BB85      OUT	0x15,R24
(0048) }
    0086 9508      RET
(0049) 
(0050) void main(void)
(0051) {uchar Load; 
(0052)  Init_IO();                    //初始化I/O口
_main:
  Load                 --> R20
    0087 DFF6      RCALL	_Init_IO
(0053)  PORTA=0xff;                   //点亮以测试所有的数码管
    0088 EF8F      LDI	R24,0xFF
    0089 BB8B      OUT	0x1B,R24
(0054)  PORTC=0x00;                   
    008A 2422      CLR	R2
    008B BA25      OUT	0x15,R2
(0055)  DelayMs(3000);                //延时
    008C EB08      LDI	R16,0xB8
    008D E01B      LDI	R17,0xB
    008E DF99      RCALL	_DelayMs
(0056)  PORTC=0xff;                   //熄灭所有的数码管
    008F EF8F      LDI	R24,0xFF
    0090 BB85      OUT	0x15,R24
(0057)  TCCR0=0x06;                   //T/C0工作于计数方式,下降沿计数
    0091 E086      LDI	R24,6
    0092 BF83      OUT	0x33,R24
(0058)  TCNT0=CNT;                    //计数初始值0    
    0093 9020006E  LDS	R2,0x6E
    0095 9030006F  LDS	R3,0x6F
    0097 BE22      OUT	0x32,R2
    0098 C008      RJMP	0x00A1
(0059)  while(1)
(0060)  {Load=TCNT0;
    0099 B742      IN	R20,0x32
(0061)   Process(Load,Data);          //计数值处理
    009A E62A      LDI	R18,0x6A
    009B E030      LDI	R19,0
    009C 2F04      MOV	R16,R20
    009D DFB7      RCALL	_Process
(0062)   Display(Data);               //动态扫描显示
    009E E60A      LDI	R16,0x6A
    009F E010      LDI	R17,0
    00A0 DF98      RCALL	_Display
    00A1 CFF7      RJMP	0x0099
(0063)  }
(0064) }
FILE: <library>
    00A2 9508      RET
mod16s:
    00A3 9468      BSET	6
    00A4 92DA      ST	R13,-Y
    00A5 2ED1      MOV	R13,R17
    00A6 C004      RJMP	0x00AB
div16s:
    00A7 94E8      BCLR	6
    00A8 92DA      ST	R13,-Y
    00A9 2ED1      MOV	R13,R17
    00AA 26D3      EOR	R13,R19
    00AB FF17      SBRS	R17,7
    00AC C004      RJMP	0x00B1
    00AD 9510      COM	R17
    00AE 9500      COM	R16
    00AF 5F0F      SUBI	R16,0xFF
    00B0 4F1F      SBCI	R17,0xFF
    00B1 FF37      SBRS	R19,7
    00B2 C004      RJMP	0x00B7
    00B3 9530      COM	R19
    00B4 9520      COM	R18
    00B5 5F2F      SUBI	R18,0xFF
    00B6 4F3F      SBCI	R19,0xFF
    00B7 D00B      RCALL	xdiv16u
    00B8 FED7      SBRS	R13,7
    00B9 C004      RJMP	0x00BE
    00BA 9510      COM	R17
    00BB 9500      COM	R16
    00BC 5F0F      SUBI	R16,0xFF
    00BD 4F1F      SBCI	R17,0xFF
    00BE 90D9      LD	R13,Y+
    00BF 9508      RET
mod16u:
    00C0 9468      BSET	6
    00C1 C001      RJMP	xdiv16u
div16u:
    00C2 94E8      BCLR	6
xdiv16u:
    00C3 92EA      ST	R14,-Y
    00C4 92FA      ST	R15,-Y
    00C5 938A      ST	R24,-Y
    00C6 24EE      CLR	R14
    00C7 24FF      CLR	R15
    00C8 E180      LDI	R24,0x10
    00C9 0F00      LSL	R16
    00CA 1F11      ROL	R17
    00CB 1CEE      ROL	R14
    00CC 1CFF      ROL	R15
    00CD 16E2      CP	R14,R18
    00CE 06F3      CPC	R15,R19
    00CF F018      BCS	0x00D3
    00D0 1AE2      SUB	R14,R18
    00D1 0AF3      SBC	R15,R19
    00D2 9503      INC	R16
    00D3 958A      DEC	R24
    00D4 F7A1      BNE	0x00C9
    00D5 F416      BRTC	0x00D8
    00D6 2D0E      MOV	R16,R14
    00D7 2D1F      MOV	R17,R15
    00D8 9189      LD	R24,Y+
    00D9 90F9      LD	R15,Y+
    00DA 90E9      LD	R14,Y+
    00DB 9508      RET
mod8u:
    00DC 9468      BSET	6
    00DD C001      RJMP	xdiv8u
div8u:
    00DE 94E8      BCLR	6
xdiv8u:
    00DF 932A      ST	R18,-Y
    00E0 92FA      ST	R15,-Y
    00E1 92EA      ST	R14,-Y
    00E2 24FF      CLR	R15
    00E3 24EE      CLR	R14
    00E4 E120      LDI	R18,0x10
    00E5 0F00      LSL	R16
    00E6 1CFF      ROL	R15
    00E7 1CEE      ROL	R14
    00E8 16E1      CP	R14,R17
    00E9 F010      BCS	0x00EC
    00EA 1AE1      SUB	R14,R17
    00EB 9503      INC	R16
    00EC 952A      DEC	R18
    00ED F7B9      BNE	0x00E5
    00EE F40E      BRTC	0x00F0
    00EF 2D0E      MOV	R16,R14
    00F0 90E9      LD	R14,Y+
    00F1 90F9      LD	R15,Y+
    00F2 9129      LD	R18,Y+
    00F3 9508      RET
pop_gset2:
    00F4 E0E2      LDI	R30,2
    00F5 C006      RJMP	pop
pop_gset3:
    00F6 E0E4      LDI	R30,4
    00F7 C004      RJMP	pop
push_gset1:
    00F8 935A      ST	R21,-Y
    00F9 934A      ST	R20,-Y
    00FA 9508      RET
pop_gset1:
    00FB E0E1      LDI	R30,1
pop:
    00FC 9149      LD	R20,Y+
    00FD 9159      LD	R21,Y+
    00FE FDE0      SBRC	R30,0
    00FF 9508      RET
    0100 9169      LD	R22,Y+
    0101 9179      LD	R23,Y+
    0102 FDE1      SBRC	R30,1
    0103 9508      RET
    0104 90A9      LD	R10,Y+
    0105 90B9      LD	R11,Y+
    0106 FDE2      SBRC	R30,2
    0107 9508      RET
    0108 90C9      LD	R12,Y+
    0109 90D9      LD	R13,Y+
    010A FDE3      SBRC	R30,3
    010B 9508      RET
    010C 90E9      LD	R14,Y+
    010D 90F9      LD	R15,Y+
    010E 9508      RET
push_gset2:
    010F 937A      ST	R23,-Y
    0110 936A      ST	R22,-Y
    0111 CFE6      RJMP	push_gset1
push_gset3:
    0112 92BA      ST	R11,-Y
    0113 92AA      ST	R10,-Y
    0114 CFFA      RJMP	push_gset2

⌨️ 快捷键说明

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