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

📄 rtc.lst

📁 AVRkaifashili.rar
💻 LST
字号:
__start:
__text_start:
    001B E5CF      LDI	R28,0x5F
    001C E0D2      LDI	R29,2
    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 E7E4      LDI	R30,0x74
    0025 E0F0      LDI	R31,0
    0026 E010      LDI	R17,0
    0027 37E5      CPI	R30,0x75
    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 E2E2      LDI	R30,0x22
    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 D079      RCALL	_main
_exit:
    003A CFFF      RJMP	_exit
_DelayMs:
  j                    --> R20
  i                    --> R16
    003B D0A8      RCALL	push_gset1
FILE: J:\AVRpractice\BOOK\定时器2\RTC.c
(0001) //***************FileName:Capature.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[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
(0010) uchar Data[4]={0,0,0,0};       //定义初始时间:00:00            
(0011) uchar CNT;                     //定义中断计数次数      
(0012) void DelayMs(uint i)           //Ms级延时,参数i为延时时间
(0013) {uint j;
(0014)  for(;i!=0;i--)
    003C C00A      RJMP	0x0047
(0015)   {for(j=8000;j!=0;j--) {;}}
    003D E440      LDI	R20,0x40
    003E E15F      LDI	R21,0x1F
    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
(0016) }
    004A D09C      RCALL	pop_gset1
    004B 9508      RET
_Display:
  sel                  --> R20
  i                    --> R22
  p                    --> R10
    004C D0B1      RCALL	push_gset3
    004D 2EA0      MOV	R10,R16
    004E 2EB1      MOV	R11,R17
(0017) 
(0018) void Display(uchar *p)         //动态显示函数,参数p为待显示的数组名
(0019) {uchar i,sel=0x01;           
    004F E041      LDI	R20,1
(0020)  for(i=0;i<4;i++)
    0050 2766      CLR	R22
    0051 C017      RJMP	0x0069
(0021)   {PORTA=sel;                  //选通最右边的数码管
    0052 BB4B      OUT	0x1B,R20
(0022)    PORTC=0xff-Table[p[i]];     //送字型码
    0053 2FE6      MOV	R30,R22
    0054 27FF      CLR	R31
    0055 0DEA      ADD	R30,R10
    0056 1DFB      ADC	R31,R11
    0057 81E0      LDD	R30,Z+0
    0058 27FF      CLR	R31
    0059 E680      LDI	R24,0x60
    005A E090      LDI	R25,0
    005B 0FE8      ADD	R30,R24
    005C 1FF9      ADC	R31,R25
    005D 8020      LDD	R2,Z+0
    005E 2433      CLR	R3
    005F EF8F      LDI	R24,0xFF
    0060 E090      LDI	R25,0
    0061 1982      SUB	R24,R2
    0062 0993      SBC	R25,R3
    0063 BB85      OUT	0x15,R24
(0023)    DelayMs(1);                 //显示延时    
    0064 E001      LDI	R16,1
    0065 E010      LDI	R17,0
    0066 DFD4      RCALL	_DelayMs
(0024)    sel=sel<<1;                 //移位以显示前一位
    0067 0F44      LSL	R20
    0068 9563      INC	R22
    0069 3064      CPI	R22,4
    006A F338      BCS	0x0052
(0025)   }
(0026) }
    006B D076      RCALL	pop_gset3
    006C 9508      RET
(0027) 
(0028) void Init_IO(void)             //初始化I/O口
(0029) {DDRA=0xff;                    //设置A口为推挽1输出
_Init_IO:
    006D EF8F      LDI	R24,0xFF
    006E BB8A      OUT	0x1A,R24
(0030)  PORTA=0xff;
    006F BB8B      OUT	0x1B,R24
(0031)  DDRC=0xff;                    //设置C口为推挽1输出             
    0070 BB84      OUT	0x14,R24
(0032)  PORTC=0xff;
    0071 BB85      OUT	0x15,R24
(0033) }
    0072 9508      RET
(0034) 
(0035) void Add_Second(uchar *p)
(0036) {p[3]++;
_Add_Second:
  p                    --> R16
    0073 2F80      MOV	R24,R16
    0074 2F91      MOV	R25,R17
    0075 9603      ADIW	R24,3
    0076 2FE8      MOV	R30,R24
    0077 2FF9      MOV	R31,R25
    0078 8180      LDD	R24,Z+0
    0079 5F8F      SUBI	R24,0xFF
    007A 8380      STD	Z+0,R24
(0037)  if(p[3]==10) {p[3]=0;p[2]++;}
    007B 2FE0      MOV	R30,R16
    007C 2FF1      MOV	R31,R17
    007D 8183      LDD	R24,Z+3
    007E 308A      CPI	R24,0xA
    007F F461      BNE	0x008C
    0080 2422      CLR	R2
    0081 2FE0      MOV	R30,R16
    0082 2FF1      MOV	R31,R17
    0083 8223      STD	Z+3,R2
    0084 2F80      MOV	R24,R16
    0085 2F91      MOV	R25,R17
    0086 9602      ADIW	R24,2
    0087 2FE8      MOV	R30,R24
    0088 2FF9      MOV	R31,R25
    0089 8180      LDD	R24,Z+0
    008A 5F8F      SUBI	R24,0xFF
    008B 8380      STD	Z+0,R24
(0038)  if(p[2]==6)  {p[2]=0;p[1]++;}
    008C 2FE0      MOV	R30,R16
    008D 2FF1      MOV	R31,R17
    008E 8182      LDD	R24,Z+2
    008F 3086      CPI	R24,6
    0090 F461      BNE	0x009D
    0091 2422      CLR	R2
    0092 2FE0      MOV	R30,R16
    0093 2FF1      MOV	R31,R17
    0094 8222      STD	Z+2,R2
    0095 2F80      MOV	R24,R16
    0096 2F91      MOV	R25,R17
    0097 9601      ADIW	R24,1
    0098 2FE8      MOV	R30,R24
    0099 2FF9      MOV	R31,R25
    009A 8180      LDD	R24,Z+0
    009B 5F8F      SUBI	R24,0xFF
    009C 8380      STD	Z+0,R24
(0039)  if(p[1]==10) {p[1]=0;p[0]++;}
    009D 2FE0      MOV	R30,R16
    009E 2FF1      MOV	R31,R17
    009F 8181      LDD	R24,Z+1
    00A0 308A      CPI	R24,0xA
    00A1 F449      BNE	0x00AB
    00A2 2422      CLR	R2
    00A3 2FE0      MOV	R30,R16
    00A4 2FF1      MOV	R31,R17
    00A5 8221      STD	Z+1,R2
    00A6 2FE0      MOV	R30,R16
    00A7 2FF1      MOV	R31,R17
    00A8 8180      LDD	R24,Z+0
    00A9 5F8F      SUBI	R24,0xFF
    00AA 8380      STD	Z+0,R24
(0040)  if(p[0]==6)  {p[0]=0;}
    00AB 2FE0      MOV	R30,R16
    00AC 2FF1      MOV	R31,R17
    00AD 8180      LDD	R24,Z+0
    00AE 3086      CPI	R24,6
    00AF F411      BNE	0x00B2
    00B0 2422      CLR	R2
    00B1 8220      STD	Z+0,R2
(0041) }
    00B2 9508      RET
(0042) 
(0043) void main(void)
(0044) {uchar i;
(0045)  Init_IO();                    //初始化I/O口
_main:
  i                    --> Y+1
    00B3 DFB9      RCALL	_Init_IO
(0046)  PORTA=0xff;                   //点亮以测试所有的数码管
    00B4 EF8F      LDI	R24,0xFF
    00B5 BB8B      OUT	0x1B,R24
(0047)  PORTC=0x00;   
    00B6 2422      CLR	R2
    00B7 BA25      OUT	0x15,R2
(0048)  DelayMs(300);                 //延时
    00B8 E20C      LDI	R16,0x2C
    00B9 E011      LDI	R17,1
    00BA DF80      RCALL	_DelayMs
(0049)  PORTC=0xff;                   //熄灭所有的数码管
    00BB EF8F      LDI	R24,0xFF
    00BC BB85      OUT	0x15,R24
(0050)  ASSR=0x08;                    //异步时钟使能
    00BD E088      LDI	R24,0x8
    00BE BD82      OUT	0x22,R24
(0051)  TCCR2=0x07;                   //32768的晶振1024分频作为T/C2的时钟源
    00BF E087      LDI	R24,7
    00C0 BD85      OUT	0x25,R24
(0052)  TIMSK=0x40;                   //T/C2溢出中断使能
    00C1 E480      LDI	R24,0x40
    00C2 BF89      OUT	0x39,R24
(0053)  SREG=SREG|0x80;               //全局中断使能       
    00C3 9478      BSET	7
    00C4 C00D      RJMP	0x00D2
(0054)  while(1)
(0055)  {Display(Data);
    00C5 E700      LDI	R16,0x70
    00C6 E010      LDI	R17,0
    00C7 DF84      RCALL	_Display
(0056)   if(CNT==32) 
    00C8 91800074  LDS	R24,_CNT
    00CA 3280      CPI	R24,0x20
    00CB F431      BNE	0x00D2
(0057)     {CNT=0;
    00CC 2422      CLR	R2
    00CD 92200074  STS	_CNT,R2
(0058) 	 Add_Second(Data);}
    00CF E700      LDI	R16,0x70
    00D0 E010      LDI	R17,0
    00D1 DFA1      RCALL	_Add_Second
    00D2 CFF2      RJMP	0x00C5
(0059)  }
(0060) }
    00D3 9508      RET
_Timer2:
    00D4 938A      ST	R24,-Y
    00D5 939A      ST	R25,-Y
    00D6 B78F      IN	R24,0x3F
    00D7 938A      ST	R24,-Y
(0061) 
(0062) #pragma interrupt_handler Timer2:5
(0063) void Timer2(void)
(0064) {CNT=CNT+1;}
FILE: <library>
    00D8 91800074  LDS	R24,_CNT
    00DA 5F8F      SUBI	R24,0xFF
    00DB 93800074  STS	_CNT,R24
    00DD 9189      LD	R24,Y+
    00DE BF8F      OUT	0x3F,R24
    00DF 9199      LD	R25,Y+
    00E0 9189      LD	R24,Y+
    00E1 9518      RETI
pop_gset3:
    00E2 E0E4      LDI	R30,4
    00E3 C004      RJMP	pop
push_gset1:
    00E4 935A      ST	R21,-Y
    00E5 934A      ST	R20,-Y
    00E6 9508      RET
pop_gset1:
    00E7 E0E1      LDI	R30,1
pop:
    00E8 9149      LD	R20,Y+
    00E9 9159      LD	R21,Y+
    00EA FDE0      SBRC	R30,0
    00EB 9508      RET
    00EC 9169      LD	R22,Y+
    00ED 9179      LD	R23,Y+
    00EE FDE1      SBRC	R30,1
    00EF 9508      RET
    00F0 90A9      LD	R10,Y+
    00F1 90B9      LD	R11,Y+
    00F2 FDE2      SBRC	R30,2
    00F3 9508      RET
    00F4 90C9      LD	R12,Y+
    00F5 90D9      LD	R13,Y+
    00F6 FDE3      SBRC	R30,3
    00F7 9508      RET
    00F8 90E9      LD	R14,Y+
    00F9 90F9      LD	R15,Y+
    00FA 9508      RET
push_gset2:
    00FB 937A      ST	R23,-Y
    00FC 936A      ST	R22,-Y
    00FD CFE6      RJMP	push_gset1
push_gset3:
    00FE 92BA      ST	R11,-Y
    00FF 92AA      ST	R10,-Y
    0100 CFFA      RJMP	push_gset2

⌨️ 快捷键说明

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