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

📄 rtc.lst

📁 AtMega169芯片连接RTC的测试程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
__start:
__text_start:
      3B EFCF      LDI	R28,0xFF
      3C E0D4      LDI	R29,4
      3D BFCD      OUT	0x3D,R28
      3E BFDE      OUT	0x3E,R29
      3F 51C0      SUBI	R28,0x10
      40 40D0      SBCI	R29,0
      41 EA0A      LDI	R16,0xAA
      42 8308      STD	Y+0,R16
      43 2400      CLR	R0
      44 E0EA      LDI	R30,0xA
      45 E0F1      LDI	R31,1
      46 E011      LDI	R17,1
      47 30EE      CPI	R30,0xE
      48 07F1      CPC	R31,R17
      49 F011      BEQ	0x004C
      4A 9201      ST	R0,Z+
      4B CFFB      RJMP	0x0047
      4C 8300      STD	Z+0,R16
      4D E6EC      LDI	R30,0x6C
      4E E0F0      LDI	R31,0
      4F E0A0      LDI	R26,0
      50 E0B1      LDI	R27,1
      51 E010      LDI	R17,0
      52 37E6      CPI	R30,0x76
      53 07F1      CPC	R31,R17
      54 F021      BEQ	0x0059
      55 95C8      LPM
      56 9631      ADIW	R30,1
      57 920D      ST	R0,X+
      58 CFF9      RJMP	0x0052
      59 940E 04B8 CALL	_main
_exit:
      5B CFFF      RJMP	_exit
FILE: C:\TDdownload\zxy\169demo\169RTC\led.c
(0001) #include<iom169v.h>
(0002) const unsigned char seg_table[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
(0003) 0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
(0004) unsigned char led_buff[4]={0,0,0,0};
(0005) /*				微秒级延时程序	  		*/
(0006) void delay_us(int time)
(0007) 	 {     
(0008)   	  do
(0009) 	  	{
(0010) 		 time--;
_delay_us:
  time                 --> R16
      5C 5001      SUBI	R16,1
      5D 4010      SBCI	R17,0
(0011) 		}	
(0012)   	  while (time>1);
      5E E081      LDI	R24,1
      5F E090      LDI	R25,0
      60 1780      CP	R24,R16
      61 0791      CPC	R25,R17
      62 F3CC      BLT	0x005C
      63 9508      RET
_delay_ms:
  time                 --> R20
      64 934A      ST	R20,-Y
      65 935A      ST	R21,-Y
      66 01A8      MOVW	R20,R16
(0013) 	 }	  
(0014) /*	  		    毫秒级延时程序			*/	 
(0015) void delay_ms(unsigned int time)
(0016) 	 {
      67 C005      RJMP	0x006D
(0017) 	  while(time!=0)
(0018) 	  	  {		
(0019) 		   delay_us(1000);
      68 EE08      LDI	R16,0xE8
      69 E013      LDI	R17,3
      6A DFF1      RCALL	_delay_us
(0020) 		   time--;
      6B 5041      SUBI	R20,1
      6C 4050      SBCI	R21,0
      6D 3040      CPI	R20,0
      6E 0745      CPC	R20,R21
      6F F7C1      BNE	0x0068
      70 9159      LD	R21,Y+
      71 9149      LD	R20,Y+
      72 9508      RET
_display:
  n                    --> R20
      73 934A      ST	R20,-Y
      74 935A      ST	R21,-Y
(0021) 		  }
(0022) 	 }					
(0023) void display(void)
(0024) 	 {
(0025) 	  unsigned char n;
(0026) 	  DDRE=0xff;
      75 EF8F      LDI	R24,0xFF
      76 B98D      OUT	0x0D,R24
(0027) 	  PORTE=0xff;
      77 B98E      OUT	0x0E,R24
(0028) 	  DDRB|=0xf0;
      78 B184      IN	R24,0x04
      79 6F80      ORI	R24,0xF0
      7A B984      OUT	0x04,R24
(0029) 	  PORTB|=0xf0;
      7B B185      IN	R24,0x05
      7C 6F80      ORI	R24,0xF0
      7D B985      OUT	0x05,R24
(0030) 	  for(n=0;n<3;n++)
      7E 2744      CLR	R20
      7F C01C      RJMP	0x009C
(0031) 	  	 {	
(0032) 		  
(0033) 		  PORTE=led_buff[n];
      80 E080      LDI	R24,0
      81 E091      LDI	R25,1
      82 2FE4      MOV	R30,R20
      83 27FF      CLR	R31
      84 0FE8      ADD	R30,R24
      85 1FF9      ADC	R31,R25
      86 8020      LDD	R2,Z+0
      87 B82E      OUT	0x0E,R2
(0034) 		  PORTB&=~(1<<(n+4));
      88 2F14      MOV	R17,R20
      89 5F1C      SUBI	R17,0xFC
      8A E001      LDI	R16,1
      8B 940E 04F7 CALL	lsl8
      8D 2E20      MOV	R2,R16
      8E 9420      COM	R2
      8F B035      IN	R3,0x05
      90 2032      AND	R3,R2
      91 B835      OUT	0x05,R3
(0035) 		  delay_ms(1);
      92 E001      LDI	R16,1
      93 E010      LDI	R17,0
      94 DFCF      RCALL	_delay_ms
(0036) 		  PORTB|=0xf0;
      95 B185      IN	R24,0x05
      96 6F80      ORI	R24,0xF0
      97 B985      OUT	0x05,R24
(0037) 		  delay_us(100);
      98 E604      LDI	R16,0x64
      99 E010      LDI	R17,0
      9A DFC1      RCALL	_delay_us
      9B 9543      INC	R20
      9C 3043      CPI	R20,3
      9D F310      BCS	0x0080
      9E 9159      LD	R21,Y+
      9F 9149      LD	R20,Y+
      A0 9508      RET
FILE: C:\TDdownload\zxy\169demo\169RTC\rtc.c
(0001) // **************************************************************
(0002) // *** 		         广 州 天 河 双 龙 电 子 公 司 	            ***
(0003) // ***                   http://www.sl.com.cn                 ***
(0004) // ***                  实验: RTC                            ***
(0005) // ***                  作者:zxy@sl.com.cn                   ***
(0006) // ***                       2006年3月28日                    ***
(0007) // ***         目标MCU:MEGA169    晶振:内部(INT)8MHZ         ***
(0008) // **************************************************************
(0009) //此实验需具备AD转换知识
(0010) //通过按键修改时钟值,S1为选位键,S2为增1,S4为减1
(0011) #include <iom169v.h>
(0012) #include <macros.h>
(0013)  //键值定义,以目标实验板际测取键值范围为准
(0014) #define s1 (adc_old<0x03)                         
(0015) //200h    
(0016) #define s2 ((adc_old>0x180)&&(adc_old<0x220))
(0017) //2a6h            
(0018) #define s3 ((adc_old>0x290)&&(adc_old<0x2CF))
(0019) //2fbh
(0020) #define s4 ((adc_old>0x2D0)&&(adc_old<0x310))
(0021) //326h
(0022) #define s5 ((adc_old>0x310)&&(adc_old<0x345))
(0023) extern const unsigned char seg_table[16];
(0024) extern unsigned char led_buff[3];
(0025) extern void delay_ms(unsigned int time);
(0026) extern void display(void);
(0027) unsigned int adc_rel;//AD转换结果
(0028) unsigned int i=0,j=0,k=0;
(0029) //E、B口初始化
(0030) void portE_B(void)
(0031) {
(0032)     DDRE=0xff;//E、B口初始化
_portE_B:
      A1 EF8F      LDI	R24,0xFF
      A2 B98D      OUT	0x0D,R24
(0033) 	  PORTE=0xff;
      A3 B98E      OUT	0x0E,R24
(0034) 	  DDRB|=0xf0;
      A4 B184      IN	R24,0x04
      A5 6F80      ORI	R24,0xF0
      A6 B984      OUT	0x04,R24
(0035) 	  PORTD|=0xf0;
      A7 B18B      IN	R24,0x0B
      A8 6F80      ORI	R24,0xF0
      A9 B98B      OUT	0x0B,R24
      AA 9508      RET
(0036) }
(0037) //ADC初始化
(0038) void adc_init(void)
(0039) { 
(0040)  ADCSRA = 0x00; //设置前,先关闭ADC
_adc_init:
      AB 2422      CLR	R2
      AC 9220 007A STS	0x007A,R2
(0041)  ADMUX =(1<<REFS0)|(1<<MUX0);//选择内部AVCC为基准,单端输入口为ADC0
      AE E481      LDI	R24,0x41
      AF 9380 007C STS	0x007C,R24
(0042)  ACSR  =(1<<ACD);//关闭模拟比较器,禁止位P148
      B1 E880      LDI	R24,0x80
      B2 BF80      OUT	0x30,R24
(0043)  ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1) ;//ADC时钟64分频
      B3 EC8E      LDI	R24,0xCE
      B4 9380 007A STS	0x007A,R24
      B6 9508      RET
(0044) }
(0045) //定时器初始化
(0046) void timer2_init(void)
(0047) {
(0048)  TIMSK2 = 0x00;
_timer2_init:
      B7 2422      CLR	R2
      B8 9220 0070 STS	0x0070,R2
(0049)  ASSR  = 1<<AS2; //异步时钟
      BA E088      LDI	R24,0x8
      BB 9380 00B6 STS	0x00B6,R24
(0050)  TCNT2 = 0xE0; //定时时间1秒
      BD EE80      LDI	R24,0xE0
      BE 9380 00B2 STS	0x00B2,R24
(0051)  TCCR2A = (1<<CS22)|(1<<CS21)|(1<<CS20); //分频比1024,0x07
      C0 E087      LDI	R24,7
      C1 9380 00B0 STS	0x00B0,R24
(0052)  SEI();
      C3 9478      BSET	7
      C4 9508      RET
_adc_isr:
      C5 938A      ST	R24,-Y
      C6 939A      ST	R25,-Y
      C7 B78F      IN	R24,0x3F
      C8 938A      ST	R24,-Y
(0053) }
(0054) 
(0055) #pragma interrupt_handler adc_isr:20 int_isr:6
(0056) //ADC完成中断  
(0057) void adc_isr(void)
(0058) {
(0059)  adc_rel=ADC&0x3ff;
      C9 9180 0078 LDS	R24,0x0078
      CB 9190 0079 LDS	R25,0x0079
      CD 7093      ANDI	R25,3
      CE 9390 010D STS	adc_rel+1,R25
      D0 9380 010C STS	adc_rel,R24
(0060)  ADMUX=(1<<REFS0)|(1<<MUX0);//选择内部AVCC为基准
      D2 E481      LDI	R24,0x41
      D3 9380 007C STS	0x007C,R24
(0061)  ADCSRA|=(1<<ADSC);//启动AD转换
      D5 9180 007A LDS	R24,0x007A
      D7 6480      ORI	R24,0x40
      D8 9380 007A STS	0x007A,R24
      DA 9189      LD	R24,Y+
      DB BF8F      OUT	0x3F,R24
      DC 9199      LD	R25,Y+
      DD 9189      LD	R24,Y+
      DE 9518      RETI
_int_isr:
  n                    --> Y,+1
      DF 922A      ST	R2,-Y
      E0 923A      ST	R3,-Y
      E1 938A      ST	R24,-Y
      E2 939A      ST	R25,-Y
      E3 93EA      ST	R30,-Y
      E4 93FA      ST	R31,-Y
      E5 B62F      IN	R2,0x3F
      E6 922A      ST	R2,-Y
(0062) }
(0063) //定时器中断
(0064) void int_isr(void)
(0065) { int n;
(0066)   TCNT2 = 0xE0;
      E7 EE80      LDI	R24,0xE0
      E8 9380 00B2 STS	0x00B2,R24
(0067)   led_buff[0]=seg_table[i];    //个位
      EA E58C      LDI	R24,0x5C
      EB E090      LDI	R25,0
      EC 91E0 0104 LDS	R30,i
      EE 91F0 0105 LDS	R31,i+1
      F0 0FE8      ADD	R30,R24
      F1 1FF9      ADC	R31,R25
      F2 9024      LPM	R2,261(Z)
      F3 9220 0100 STS	led_buff,R2
(0068)   led_buff[1]=seg_table[j];    //十位
      F5 91E0 0106 LDS	R30,j
      F7 91F0 0107 LDS	R31,j+1
      F9 0FE8      ADD	R30,R24
      FA 1FF9      ADC	R31,R25
      FB 9024      LPM	R2,263(Z)
      FC 9220 0101 STS	led_buff+1,R2
(0069)   led_buff[2]=seg_table[k];    //百位
      FE 91E0 0108 LDS	R30,k
     100 91F0 0109 LDS	R31,k+1
     102 0FE8      ADD	R30,R24
     103 1FF9      ADC	R31,R25
     104 9024      LPM	R2,265(Z)
     105 9220 0102 STS	led_buff+2,R2
(0070)   i++;
     107 9180 0104 LDS	R24,i
     109 9190 0105 LDS	R25,i+1
     10B 9601      ADIW	R24,1
     10C 9390 0105 STS	i+1,R25
     10E 9380 0104 STS	i,R24
(0071)   if(i==10)                    //十进位
     110 308A      CPI	R24,0xA
     111 E0E0      LDI	R30,0
     112 079E      CPC	R25,R30
     113 F581      BNE	0x0144
(0072)      {
(0073) 	  i=0;
     114 2422      CLR	R2
     115 2433      CLR	R3
     116 9230 0105 STS	i+1,R3
     118 9220 0104 STS	i,R2
(0074) 	  j++;
     11A 9180 0106 LDS	R24,j
     11C 9190 0107 LDS	R25,j+1
     11E 9601      ADIW	R24,1
     11F 9390 0107 STS	j+1,R25
     121 9380 0106 STS	j,R24
(0075) 	  if(j==6)                    //六进位
     123 3086      CPI	R24,6
     124 E0E0      LDI	R30,0
     125 079E      CPC	R25,R30
     126 F4E9      BNE	0x0144
(0076) 	    {
(0077) 		 j=0;
     127 9230 0107 STS	j+1,R3
     129 9220 0106 STS	j,R2
(0078) 		 k++;
     12B 9180 0108 LDS	R24,k
     12D 9190 0109 LDS	R25,k+1
     12F 9601      ADIW	R24,1
     130 9390 0109 STS	k+1,R25
     132 9380 0108 STS	k,R24
(0079) 		 if(k==10)                  //十进位       
     134 308A      CPI	R24,0xA

⌨️ 快捷键说明

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