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

📄 12.lst

📁 avr 单片机的学习
💻 LST
字号:
__start:
__text_start:
      22 EFCF      LDI	R28,0xFF
      23 E0D2      LDI	R29,2
      24 BFCD      OUT	0x3D,R28
      25 BFDE      OUT	0x3E,R29
      26 51CE      SUBI	R28,0x1E
      27 40D0      SBCI	R29,0
      28 EA0A      LDI	R16,0xAA
      29 8308      STD	Y+0,R16
      2A 2400      CLR	R0
      2B E1E0      LDI	R30,0x10
      2C E0F1      LDI	R31,1
      2D E011      LDI	R17,1
      2E 31E0      CPI	R30,0x10
      2F 07F1      CPC	R31,R17
      30 F011      BEQ	0x0033
      31 9201      ST	R0,Z+
      32 CFFB      RJMP	0x002E
      33 8300      STD	Z+0,R16
      34 E3E4      LDI	R30,0x34
      35 E0F0      LDI	R31,0
      36 E0A0      LDI	R26,0
      37 E0B1      LDI	R27,1
      38 E010      LDI	R17,0
      39 E000      LDI	R16,0
      3A BF0B      OUT	0x3B,R16
      3B 34E4      CPI	R30,0x44
      3C 07F1      CPC	R31,R17
      3D F021      BEQ	0x0042
      3E 95C8      LPM
      3F 9631      ADIW	R30,1
      40 920D      ST	R0,X+
      41 CFF9      RJMP	0x003B
      42 D05A      RCALL	_main
_exit:
      43 CFFF      RJMP	_exit
_DelayMs:
  j                    --> R20
  i                    --> R16
      44 934A      ST	R20,-Y
      45 935A      ST	R21,-Y
FILE: G:\avr祥例·附原理图,及源代码c语言·\AVR单片机应用系统开发典型实例\实例源文件\第2章程序\定时计数器的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--)
      46 C00A      RJMP	0x0051
(0016)   {for(j=8000;j!=0;j--) {;}}
      47 E440      LDI	R20,0x40
      48 E15F      LDI	R21,0x1F
      49 C002      RJMP	0x004C
      4A 5041      SUBI	R20,1
      4B 4050      SBCI	R21,0
      4C 3040      CPI	R20,0
      4D 0745      CPC	R20,R21
      4E F7D9      BNE	0x004A
      4F 5001      SUBI	R16,1
      50 4010      SBCI	R17,0
      51 3000      CPI	R16,0
      52 0701      CPC	R16,R17
      53 F799      BNE	0x0047
      54 9159      LD	R21,Y+
      55 9149      LD	R20,Y+
      56 9508      RET
_Display:
  sel                  --> R22
  i                    --> R20
  p                    --> R10
      57 D0BC      RCALL	push_xgsetF00C
      58 0158      MOVW	R10,R16
(0017) }
(0018) 
(0019) void Display(uchar *p)         //动态显示函数,参数p为待显示的数组名
(0020) {uchar i,sel=0x01;           
      59 E061      LDI	R22,1
(0021)  for(i=0;i<4;i++)
      5A 2744      CLR	R20
      5B C012      RJMP	0x006E
(0022)   {PORTC=sel;                  //选通最右边的数码管
      5C BB65      OUT	0x15,R22
(0023)    PORTA=Table[p[i]];          //送字型码
      5D 2FE4      MOV	R30,R20
      5E 27FF      CLR	R31
      5F 0DEA      ADD	R30,R10
      60 1DFB      ADC	R31,R11
      61 81E0      LDD	R30,Z+0
      62 27FF      CLR	R31
      63 E080      LDI	R24,0
      64 E091      LDI	R25,1
      65 0FE8      ADD	R30,R24
      66 1FF9      ADC	R31,R25
      67 8020      LDD	R2,Z+0
      68 BA2B      OUT	0x1B,R2
(0024)    DelayMs(2);                 //显示延时    
      69 E002      LDI	R16,2
      6A E010      LDI	R17,0
      6B DFD8      RCALL	_DelayMs
(0025)    sel=sel<<1;                 //移位以显示前一位
      6C 0F66      LSL	R22
      6D 9543      INC	R20
      6E 3044      CPI	R20,4
      6F F360      BCS	0x005C
      70 C0AA      RJMP	pop_xgsetF00C
_Process:
  p                    --> R20
  i                    --> R10
      71 D098      RCALL	push_xgset300C
      72 01A9      MOVW	R20,R18
      73 2EA0      MOV	R10,R16
(0026)   }
(0027) }
(0028) 
(0029) //计数值处理函数。参数i:计数值;参数p:处理数据存放的数组名//
(0030) //功能:此函数用于将计数值拆分为BCD码的千,百,十,一数据,用于查表显示//
(0031) void Process(uchar i,uchar *p) 
(0032) {p[0]=i/1000;
      74 EE28      LDI	R18,0xE8
      75 E033      LDI	R19,3
      76 2D0A      MOV	R16,R10
      77 2711      CLR	R17
      78 D044      RCALL	div16s
      79 01FA      MOVW	R30,R20
      7A 8300      STD	Z+0,R16
(0033)  i=i%1000;
      7B EE28      LDI	R18,0xE8
      7C E033      LDI	R19,3
      7D 2D0A      MOV	R16,R10
      7E 2711      CLR	R17
      7F D039      RCALL	mod16s
      80 0158      MOVW	R10,R16
(0034)  p[1]=i/100;
      81 E614      LDI	R17,0x64
      82 D071      RCALL	div8u
      83 01FA      MOVW	R30,R20
      84 8301      STD	Z+1,R16
(0035)  i=i%100;
      85 E614      LDI	R17,0x64
      86 2D0A      MOV	R16,R10
      87 D06A      RCALL	mod8u
      88 2EA0      MOV	R10,R16
(0036)  p[2]=i/10;
      89 E01A      LDI	R17,0xA
      8A D069      RCALL	div8u
      8B 01FA      MOVW	R30,R20
      8C 8302      STD	Z+2,R16
(0037)  i=i%10;
      8D E01A      LDI	R17,0xA
      8E 2D0A      MOV	R16,R10
      8F D062      RCALL	mod8u
      90 2EA0      MOV	R10,R16
(0038)  p[3]=i;
      91 01FA      MOVW	R30,R20
      92 82A3      STD	Z+3,R10
      93 C07B      RJMP	pop_xgset300C
(0039) }
(0040) 
(0041) void Init_IO(void)             //初始化I/O口
(0042) {DDRA=0xff;                    //设置A口为推挽1输出
_Init_IO:
      94 EF8F      LDI	R24,0xFF
      95 BB8A      OUT	0x1A,R24
(0043)  PORTA=0xff;
      96 BB8B      OUT	0x1B,R24
(0044)  DDRB=0x00;                    //设置B口为不带上拉电阻输入
      97 2422      CLR	R2
      98 BA27      OUT	0x17,R2
(0045)  PORTB=0x00;    
      99 BA28      OUT	0x18,R2
(0046)  DDRC=0xff;                    //设置C口为推挽1输出;             
      9A BB84      OUT	0x14,R24
(0047)  PORTC=0xff;
      9B BB85      OUT	0x15,R24
      9C 9508      RET
(0048) }
(0049) 
(0050) void main(void)
(0051) {uchar Load; 
(0052)  Init_IO();                    //初始化I/O口
_main:
  Load                 --> R10
      9D DFF6      RCALL	_Init_IO
(0053)  PORTA=0xff;                   //点亮以测试所有的数码管
      9E EF8F      LDI	R24,0xFF
      9F BB8B      OUT	0x1B,R24
(0054)  PORTC=0x00;                   
      A0 2422      CLR	R2
      A1 BA25      OUT	0x15,R2
(0055)  DelayMs(3000);                //延时
      A2 EB08      LDI	R16,0xB8
      A3 E01B      LDI	R17,0xB
      A4 DF9F      RCALL	_DelayMs
(0056)  PORTC=0xff;                   //熄灭所有的数码管
      A5 EF8F      LDI	R24,0xFF
      A6 BB85      OUT	0x15,R24
(0057)  TCCR0=0x06;                   //T/C0工作于计数方式,下降沿计数
      A7 E086      LDI	R24,6
      A8 BF83      OUT	0x33,R24
(0058)  TCNT0=CNT;                    //计数初始值0    
      A9 9020 010E LDS	R2,CNT
      AB 9030 010F LDS	R3,CNT+1
      AD BE22      OUT	0x32,R2
      AE C008      RJMP	0x00B7
(0059)  while(1)
(0060)  {Load=TCNT0;
      AF B6A2      IN	R10,0x32
(0061)   Process(Load,Data);          //计数值处理
      B0 E02A      LDI	R18,0xA
      B1 E031      LDI	R19,1
      B2 2D0A      MOV	R16,R10
      B3 DFBD      RCALL	_Process
(0062)   Display(Data);               //动态扫描显示
FILE: <library>
      B4 E00A      LDI	R16,0xA
      B5 E011      LDI	R17,1
      B6 DFA0      RCALL	_Display
      B7 CFF7      RJMP	0x00AF
      B8 9508      RET
mod16s:
      B9 9468      BSET	6
      BA 92DA      ST	R13,-Y
      BB 2ED1      MOV	R13,R17
      BC C004      RJMP	0x00C1
div16s:
      BD 94E8      BCLR	6
      BE 92DA      ST	R13,-Y
      BF 2ED1      MOV	R13,R17
      C0 26D3      EOR	R13,R19
      C1 FF17      SBRS	R17,7
      C2 C004      RJMP	0x00C7
      C3 9510      COM	R17
      C4 9500      COM	R16
      C5 5F0F      SUBI	R16,0xFF
      C6 4F1F      SBCI	R17,0xFF
      C7 FF37      SBRS	R19,7
      C8 C004      RJMP	0x00CD
      C9 9530      COM	R19
      CA 9520      COM	R18
      CB 5F2F      SUBI	R18,0xFF
      CC 4F3F      SBCI	R19,0xFF
      CD D00B      RCALL	xdiv16u
      CE FED7      SBRS	R13,7
      CF C004      RJMP	0x00D4
      D0 9510      COM	R17
      D1 9500      COM	R16
      D2 5F0F      SUBI	R16,0xFF
      D3 4F1F      SBCI	R17,0xFF
      D4 90D9      LD	R13,Y+
      D5 9508      RET
mod16u:
      D6 9468      BSET	6
      D7 C001      RJMP	xdiv16u
div16u:
      D8 94E8      BCLR	6
xdiv16u:
      D9 92EA      ST	R14,-Y
      DA 92FA      ST	R15,-Y
      DB 938A      ST	R24,-Y
      DC 24EE      CLR	R14
      DD 24FF      CLR	R15
      DE E180      LDI	R24,0x10
      DF 0F00      LSL	R16
      E0 1F11      ROL	R17
      E1 1CEE      ROL	R14
      E2 1CFF      ROL	R15
      E3 16E2      CP	R14,R18
      E4 06F3      CPC	R15,R19
      E5 F018      BCS	0x00E9
      E6 1AE2      SUB	R14,R18
      E7 0AF3      SBC	R15,R19
      E8 9503      INC	R16
      E9 958A      DEC	R24
      EA F7A1      BNE	0x00DF
      EB F416      BRTC	0x00EE
      EC 2D0E      MOV	R16,R14
      ED 2D1F      MOV	R17,R15
      EE 9189      LD	R24,Y+
      EF 90F9      LD	R15,Y+
      F0 90E9      LD	R14,Y+
      F1 9508      RET
mod8u:
      F2 9468      BSET	6
      F3 C001      RJMP	xdiv8u
div8u:
      F4 94E8      BCLR	6
xdiv8u:
      F5 932A      ST	R18,-Y
      F6 92FA      ST	R15,-Y
      F7 92EA      ST	R14,-Y
      F8 24FF      CLR	R15
      F9 24EE      CLR	R14
      FA E120      LDI	R18,0x10
      FB 0F00      LSL	R16
      FC 1CFF      ROL	R15
      FD 1CEE      ROL	R14
      FE 16E1      CP	R14,R17
      FF F010      BCS	0x0102
     100 1AE1      SUB	R14,R17
     101 9503      INC	R16
     102 952A      DEC	R18
     103 F7B9      BNE	0x00FB
     104 F40E      BRTC	0x0106
     105 2D0E      MOV	R16,R14
     106 90E9      LD	R14,Y+
     107 90F9      LD	R15,Y+
     108 9129      LD	R18,Y+
     109 9508      RET
push_xgset300C:
     10A 935A      ST	R21,-Y
     10B 934A      ST	R20,-Y
     10C 92BA      ST	R11,-Y
     10D 92AA      ST	R10,-Y
     10E 9508      RET
pop_xgset300C:
     10F 90A9      LD	R10,Y+
     110 90B9      LD	R11,Y+
     111 9149      LD	R20,Y+
     112 9159      LD	R21,Y+
     113 9508      RET
push_xgsetF00C:
     114 937A      ST	R23,-Y
     115 936A      ST	R22,-Y
     116 935A      ST	R21,-Y
     117 934A      ST	R20,-Y
     118 92BA      ST	R11,-Y
     119 92AA      ST	R10,-Y
     11A 9508      RET
pop_xgsetF00C:
     11B 90A9      LD	R10,Y+
     11C 90B9      LD	R11,Y+
     11D 9149      LD	R20,Y+
     11E 9159      LD	R21,Y+
     11F 9169      LD	R22,Y+
     120 9179      LD	R23,Y+
     121 9508      RET

⌨️ 快捷键说明

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