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

📄 tc01.lst

📁 这是AVRATmage8单片机定时器0的作用很好的入门例子,适用用初学者.这
💻 LST
字号:
__text_start:
__start:
    001B E5CF      LDI	R28,0x5F
    001C E0D4      LDI	R29,4
    001D BFCD      OUT	0x3D,R28
    001E BFDE      OUT	0x3E,R29
    001F 51C0      SUBI	R28,0x10
    0020 40D0      SBCI	R29,0
    0021 EA0A      LDI	R16,0xAA
    0022 8308      STD	Y+0,R16
    0023 2400      CLR	R0
    0024 E7E0      LDI	R30,0x70
    0025 E0F0      LDI	R31,0
    0026 E010      LDI	R17,0
    0027 37E0      CPI	R30,0x70
    0028 07F1      CPC	R31,R17
    0029 F011      BEQ	0x002C
    002A 9201      ST	R0,Z+
    002B CFFB      RJMP	0x0027
    002C 8300      STD	Z+0,R16
    002D E2E6      LDI	R30,0x26
    002E E0F0      LDI	R31,0
    002F E6A0      LDI	R26,0x60
    0030 E0B0      LDI	R27,0
    0031 E010      LDI	R17,0
    0032 33E6      CPI	R30,0x36
    0033 07F1      CPC	R31,R17
    0034 F021      BEQ	0x0039
    0035 95C8      LPM
    0036 9631      ADIW	R30,1
    0037 920D      ST	R0,X+
    0038 CFF9      RJMP	0x0032
    0039 D05C      RCALL	_main
_exit:
    003A CFFF      RJMP	_exit
_DelayMs:
  j                    --> R20
  i                    --> R16
    003B D0D3      RCALL	push_gset1
FILE: F:\mega8\icc\TCO1\TCO1.C
(0001) //******************************FileName: Counter.C*************************//
(0002) //******************************ICCAVR V6.30编译***************************//
(0003) 
(0004) #include <iom8v.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--)
    003C C00A      RJMP	0x0047
(0016)   {for(j=800;j!=0;j--) {;}}
    003D E240      LDI	R20,0x20
    003E E053      LDI	R21,3
    003F C002      RJMP	0x0042
    0040 5041      SUBI	R20,1
    0041 4050      SBCI	R21,0
    0042 3040      CPI	R20,0
    0043 0745      CPC	R20,R21
    0044 F7D9      BNE	0x0040
    0045 5001      SUBI	R16,1
    0046 4010      SBCI	R17,0
    0047 3000      CPI	R16,0
    0048 0701      CPC	R16,R17
    0049 F799      BNE	0x003D
    004A D0C7      RCALL	pop_gset1
    004B 9508      RET
_Display:
  sel                  --> R20
  i                    --> R22
  p                    --> R10
    004C D0BE      RCALL	push_gset3
    004D 0158      MOVW	R10,R16
(0017) }
(0018) 
(0019) void Display(uchar *p)         //动态显示函数,参数p为待显示的数组名
(0020) {uchar i,sel=0x01;           
    004E E041      LDI	R20,1
(0021)  for(i=0;i<4;i++)
    004F 2766      CLR	R22
    0050 C014      RJMP	0x0065
(0022)   {PORTC=~sel;                  //选通最右边的数码管
    0051 2E24      MOV	R2,R20
    0052 9420      COM	R2
    0053 BA25      OUT	0x15,R2
(0023)    PORTD=Table[p[i]];          //送字型码
    0054 2FE6      MOV	R30,R22
    0055 27FF      CLR	R31
    0056 0DEA      ADD	R30,R10
    0057 1DFB      ADC	R31,R11
    0058 81E0      LDD	R30,Z+0
    0059 27FF      CLR	R31
    005A E680      LDI	R24,0x60
    005B E090      LDI	R25,0
    005C 0FE8      ADD	R30,R24
    005D 1FF9      ADC	R31,R25
    005E 8020      LDD	R2,Z+0
    005F BA22      OUT	0x12,R2
(0024)    DelayMs(2);                 //显示延时    
    0060 E002      LDI	R16,2
    0061 E010      LDI	R17,0
    0062 DFD8      RCALL	_DelayMs
(0025)    sel=sel<<1;                 //移位以显示前一位
    0063 0F44      LSL	R20
    0064 9563      INC	R22
    0065 3064      CPI	R22,4
    0066 F350      BCS	0x0051
    0067 D09D      RCALL	pop_gset3
    0068 9508      RET
_Process:
  p                    --> R22
  i                    --> R20
    0069 D0A3      RCALL	push_gset2
    006A 01B9      MOVW	R22,R18
    006B 2F40      MOV	R20,R16
(0026)   }
(0027) }
(0028) 
(0029) //计数值处理函数。参数i:计数值;参数p:处理数据存放的数组名//
(0030) //功能:此函数用于将计数值拆分为BCD码的千,百,十,一数据,用于查表显示//
(0031) void Process(uchar i,uchar *p) 
(0032) {p[0]=i/1000;
    006C EE28      LDI	R18,0xE8
    006D E033      LDI	R19,3
    006E 2F04      MOV	R16,R20
    006F 2711      CLR	R17
    0070 D045      RCALL	div16s
    0071 01FB      MOVW	R30,R22
    0072 8300      STD	Z+0,R16
(0033)  i=i%1000;
    0073 EE28      LDI	R18,0xE8
    0074 E033      LDI	R19,3
    0075 2F04      MOV	R16,R20
    0076 2711      CLR	R17
    0077 D03A      RCALL	mod16s
    0078 2F40      MOV	R20,R16
(0034)  p[1]=i/100;
    0079 E614      LDI	R17,0x64
    007A D072      RCALL	div8u
    007B 01FB      MOVW	R30,R22
    007C 8301      STD	Z+1,R16
(0035)  i=i%100;
    007D E614      LDI	R17,0x64
    007E 2F04      MOV	R16,R20
    007F D06B      RCALL	mod8u
    0080 2F40      MOV	R20,R16
(0036)  p[2]=i/10;
    0081 E01A      LDI	R17,0xA
    0082 D06A      RCALL	div8u
    0083 01FB      MOVW	R30,R22
    0084 8302      STD	Z+2,R16
(0037)  i=i%10;
    0085 E01A      LDI	R17,0xA
    0086 2F04      MOV	R16,R20
    0087 D063      RCALL	mod8u
    0088 2F40      MOV	R20,R16
(0038)  p[3]=i;
    0089 01FB      MOVW	R30,R22
    008A 8343      STD	Z+3,R20
    008B D077      RCALL	pop_gset2
    008C 9508      RET
(0039) }
(0040) 
(0041) void Init_IO(void)             //初始化I/O口
(0042) {DDRD=0xff;                    //设置A口为推挽1输出
_Init_IO:
    008D EF8F      LDI	R24,0xFF
    008E BB81      OUT	0x11,R24
(0043)  PORTD=0xff;
    008F BB82      OUT	0x12,R24
(0044)  DDRB=0x00;                    //设置B口为不带上拉电阻输入
    0090 2422      CLR	R2
    0091 BA27      OUT	0x17,R2
(0045)  PORTB=0x00;    
    0092 BA28      OUT	0x18,R2
(0046)  DDRC=0xff;                    //设置C口为推挽1输出;             
    0093 BB84      OUT	0x14,R24
(0047)  PORTC=0xff;
    0094 BB85      OUT	0x15,R24
    0095 9508      RET
(0048) }
(0049) 
(0050) void main(void)
(0051) {uchar Load; 
(0052)  Init_IO();                    //初始化I/O口
_main:
  Load                 --> R20
    0096 DFF6      RCALL	_Init_IO
(0053)  PORTD=0xff;                   //点亮以测试所有的数码管
    0097 EF8F      LDI	R24,0xFF
    0098 BB82      OUT	0x12,R24
(0054)  PORTC=0x00;                   
    0099 2422      CLR	R2
    009A BA25      OUT	0x15,R2
(0055)  DelayMs(300);                //延时
    009B E20C      LDI	R16,0x2C
    009C E011      LDI	R17,1
    009D DF9D      RCALL	_DelayMs
(0056)  PORTC=0xff;                   //熄灭所有的数码管
    009E EF8F      LDI	R24,0xFF
    009F BB85      OUT	0x15,R24
(0057)  TCCR0=0x05;                   //T/C0工作于计数方式,下降沿计数
    00A0 E085      LDI	R24,5
    00A1 BF83      OUT	0x33,R24
(0058)  TCNT0=CNT;                    //计数初始值0    
    00A2 9020006E  LDS	R2,CNT
    00A4 9030006F  LDS	R3,CNT+1
    00A6 BE22      OUT	0x32,R2
    00A7 C008      RJMP	0x00B0
(0059)  while(1)
(0060)  {Load=TCNT0;
    00A8 B742      IN	R20,0x32
(0061)   Process(Load,Data);          //计数值处理
    00A9 E62A      LDI	R18,0x6A
    00AA E030      LDI	R19,0
    00AB 2F04      MOV	R16,R20
    00AC DFBC      RCALL	_Process
(0062)   Display(Data);               //动态扫描显示
FILE: <library>
    00AD E60A      LDI	R16,0x6A
    00AE E010      LDI	R17,0
    00AF DF9C      RCALL	_Display
    00B0 CFF7      RJMP	0x00A8
    00B1 9508      RET
mod16s:
    00B2 9468      BSET	6
    00B3 92DA      ST	R13,-Y
    00B4 2ED1      MOV	R13,R17
    00B5 C004      RJMP	0x00BA
div16s:
    00B6 94E8      BCLR	6
    00B7 92DA      ST	R13,-Y
    00B8 2ED1      MOV	R13,R17
    00B9 26D3      EOR	R13,R19
    00BA FF17      SBRS	R17,7
    00BB C004      RJMP	0x00C0
    00BC 9510      COM	R17
    00BD 9500      COM	R16
    00BE 5F0F      SUBI	R16,0xFF
    00BF 4F1F      SBCI	R17,0xFF
    00C0 FF37      SBRS	R19,7
    00C1 C004      RJMP	0x00C6
    00C2 9530      COM	R19
    00C3 9520      COM	R18
    00C4 5F2F      SUBI	R18,0xFF
    00C5 4F3F      SBCI	R19,0xFF
    00C6 D00B      RCALL	xdiv16u
    00C7 FED7      SBRS	R13,7
    00C8 C004      RJMP	0x00CD
    00C9 9510      COM	R17
    00CA 9500      COM	R16
    00CB 5F0F      SUBI	R16,0xFF
    00CC 4F1F      SBCI	R17,0xFF
    00CD 90D9      LD	R13,Y+
    00CE 9508      RET
mod16u:
    00CF 9468      BSET	6
    00D0 C001      RJMP	xdiv16u
div16u:
    00D1 94E8      BCLR	6
xdiv16u:
    00D2 92EA      ST	R14,-Y
    00D3 92FA      ST	R15,-Y
    00D4 938A      ST	R24,-Y
    00D5 24EE      CLR	R14
    00D6 24FF      CLR	R15
    00D7 E180      LDI	R24,0x10
    00D8 0F00      LSL	R16
    00D9 1F11      ROL	R17
    00DA 1CEE      ROL	R14
    00DB 1CFF      ROL	R15
    00DC 16E2      CP	R14,R18
    00DD 06F3      CPC	R15,R19
    00DE F018      BCS	0x00E2
    00DF 1AE2      SUB	R14,R18
    00E0 0AF3      SBC	R15,R19
    00E1 9503      INC	R16
    00E2 958A      DEC	R24
    00E3 F7A1      BNE	0x00D8
    00E4 F416      BRTC	0x00E7
    00E5 2D0E      MOV	R16,R14
    00E6 2D1F      MOV	R17,R15
    00E7 9189      LD	R24,Y+
    00E8 90F9      LD	R15,Y+
    00E9 90E9      LD	R14,Y+
    00EA 9508      RET
mod8u:
    00EB 9468      BSET	6
    00EC C001      RJMP	xdiv8u
div8u:
    00ED 94E8      BCLR	6
xdiv8u:
    00EE 932A      ST	R18,-Y
    00EF 92FA      ST	R15,-Y
    00F0 92EA      ST	R14,-Y
    00F1 24FF      CLR	R15
    00F2 24EE      CLR	R14
    00F3 E120      LDI	R18,0x10
    00F4 0F00      LSL	R16
    00F5 1CFF      ROL	R15
    00F6 1CEE      ROL	R14
    00F7 16E1      CP	R14,R17
    00F8 F010      BCS	0x00FB
    00F9 1AE1      SUB	R14,R17
    00FA 9503      INC	R16
    00FB 952A      DEC	R18
    00FC F7B9      BNE	0x00F4
    00FD F40E      BRTC	0x00FF
    00FE 2D0E      MOV	R16,R14
    00FF 90E9      LD	R14,Y+
    0100 90F9      LD	R15,Y+
    0101 9129      LD	R18,Y+
    0102 9508      RET
pop_gset2:
    0103 E0E2      LDI	R30,2
    0104 C00E      RJMP	pop
pop_gset3:
    0105 E0E4      LDI	R30,4
    0106 C00C      RJMP	pop
push_gset5:
    0107 92FA      ST	R15,-Y
    0108 92EA      ST	R14,-Y
push_gset4:
    0109 92DA      ST	R13,-Y
    010A 92CA      ST	R12,-Y
push_gset3:
    010B 92BA      ST	R11,-Y
    010C 92AA      ST	R10,-Y
push_gset2:
    010D 937A      ST	R23,-Y
    010E 936A      ST	R22,-Y
push_gset1:
    010F 935A      ST	R21,-Y
    0110 934A      ST	R20,-Y
    0111 9508      RET
pop_gset1:
    0112 E0E1      LDI	R30,1
pop:
    0113 9149      LD	R20,Y+
    0114 9159      LD	R21,Y+
    0115 FDE0      SBRC	R30,0
    0116 9508      RET
    0117 9169      LD	R22,Y+
    0118 9179      LD	R23,Y+
    0119 FDE1      SBRC	R30,1
    011A 9508      RET
    011B 90A9      LD	R10,Y+
    011C 90B9      LD	R11,Y+
    011D FDE2      SBRC	R30,2
    011E 9508      RET
    011F 90C9      LD	R12,Y+
    0120 90D9      LD	R13,Y+
    0121 FDE3      SBRC	R30,3
    0122 9508      RET
    0123 90E9      LD	R14,Y+
    0124 90F9      LD	R15,Y+
    0125 9508      RET

⌨️ 快捷键说明

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