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

📄 1302-162.lst

📁 1302_18b20_8515基于AVR单片机的开发系统。 在使用中通过仿真来实现。可以将此程序扩展成其他外围设备的基础
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_start:
    0017 E5CF      LDI	R28,0x5F
    0018 E0D2      LDI	R29,2
    0019 BFCD      OUT	0x3D,R28
    001A BFDE      OUT	0x3E,R29
    001B 51C0      SUBI	R28,0x10
    001C 40D0      SBCI	R29,0
    001D EA0A      LDI	R16,0xAA
    001E 8308      STD	Y+0,R16
    001F 2400      CLR	R0
    0020 E7E3      LDI	R30,0x73
    0021 E0F0      LDI	R31,0
    0022 E010      LDI	R17,0
    0023 37E6      CPI	R30,0x76
    0024 07F1      CPC	R31,R17
    0025 F011      BEQ	0x0028
    0026 9201      ST	R0,Z+
    0027 CFFB      RJMP	0x0023
    0028 8300      STD	Z+0,R16
    0029 E1EA      LDI	R30,0x1A
    002A E0F0      LDI	R31,0
    002B E6A0      LDI	R26,0x60
    002C E0B0      LDI	R27,0
    002D E010      LDI	R17,0
    002E 32ED      CPI	R30,0x2D
    002F 07F1      CPC	R31,R17
    0030 F021      BEQ	0x0035
    0031 95C8      LPM
    0032 9631      ADIW	R30,1
    0033 920D      ST	R0,X+
    0034 CFF9      RJMP	0x002E
    0035 D0AE      RCALL	_main
_exit:
    0036 CFFF      RJMP	_exit
_delay:
  a                    --> R20
  n                    --> R16
    0037 D292      RCALL	push_gset1
FILE: D:\时钟芯片\1302\1302-162\ds1302.c
(0001) 
(0002) #include <io8515v.h>
(0003) #include <macros.h>
(0004) #include <162-1302.h>
(0005) /************************************************
(0006)                        延时程序
(0007) ************************************************/
(0008) void delay(uchar n)
(0009) {
(0010) uchar a;
(0011) for(a=0;a<n;a++)
    0038 2744      CLR	R20
    0039 C001      RJMP	0x003B
    003A 9543      INC	R20
    003B 1740      CP	R20,R16
    003C F3E8      BCS	0x003A
    003D D28F      RCALL	pop_gset1
    003E 9508      RET
_write_data:
  temp                 --> R20
  i                    --> R22
  data                 --> R10
  addr                 --> R22
    003F D286      RCALL	push_gset3
    0040 2EA2      MOV	R10,R18
    0041 2F60      MOV	R22,R16
(0012)   ;
(0013) }
(0014) /****************************************************
(0015)                       写一个字节
(0016) ****************************************************/
(0017) void write_data(uchar addr,uchar data)
(0018) {
(0019) unsigned char i,temp;
(0020)  T_DDR|=T_IO;
    0042 9AA6      SBI	0x14,6
(0021) T_PORT&=~T_RST;
    0043 98AF      CBI	0x15,7
(0022) T_PORT&=~T_CLK;         
    0044 98AD      CBI	0x15,5
(0023)   asm("nop");
    0045 0000      NOP
(0024)   asm("nop");
    0046 0000      NOP
(0025)   asm("nop");
    0047 0000      NOP
(0026)   asm("nop");
    0048 0000      NOP
(0027) T_PORT|=T_RST;                  //时钟信号低时拉高RST初始化
    0049 9AAF      SBI	0x15,7
(0028)   temp=addr;
    004A 2F46      MOV	R20,R22
(0029)   for(i=0;i<8;i++) 
    004B 2766      CLR	R22
    004C C00F      RJMP	0x005C
(0030)   { 
(0031)   if(temp&(1<<i))  
    004D E001      LDI	R16,1
    004E 2F16      MOV	R17,R22
    004F D291      RCALL	lsl8
    0050 2E24      MOV	R2,R20
    0051 2220      AND	R2,R16
    0052 F011      BEQ	0x0055
(0032)   		T_PORT |=T_IO ;  
    0053 9AAE      SBI	0x15,6
    0054 C001      RJMP	0x0056
(0033)   else 
(0034)   	    T_PORT &=~T_IO ;
    0055 98AE      CBI	0x15,6
(0035)   asm("nop");
    0056 0000      NOP
(0036)   asm("nop");
    0057 0000      NOP
(0037)   T_PORT |=T_CLK;             //时钟上升沿写入数据
    0058 9AAD      SBI	0x15,5
(0038)   asm("nop");
    0059 0000      NOP
(0039)   T_PORT &=~T_CLK;             //时钟拉低电平 
    005A 98AD      CBI	0x15,5
    005B 9563      INC	R22
    005C 3068      CPI	R22,0x8
    005D F378      BCS	0x004D
(0040)   }
(0041)   temp=data;
    005E 2D4A      MOV	R20,R10
(0042)     for(i=0;i<8;i++) 
    005F 2766      CLR	R22
    0060 C00F      RJMP	0x0070
(0043)   { 
(0044)   if(temp&(1<<i))  
    0061 E001      LDI	R16,1
    0062 2F16      MOV	R17,R22
    0063 D27D      RCALL	lsl8
    0064 2E24      MOV	R2,R20
    0065 2220      AND	R2,R16
    0066 F011      BEQ	0x0069
(0045)   	    T_PORT |=T_IO ;  
    0067 9AAE      SBI	0x15,6
    0068 C001      RJMP	0x006A
(0046)   else 
(0047)   	    T_PORT &=~T_IO ; 
    0069 98AE      CBI	0x15,6
(0048)   asm("nop");
    006A 0000      NOP
(0049)   asm("nop"); 
    006B 0000      NOP
(0050)   T_PORT |=T_CLK;             //时钟上升沿写入数据
    006C 9AAD      SBI	0x15,5
(0051)    asm("nop");
    006D 0000      NOP
(0052)   T_PORT &=~T_CLK;             //时钟拉低电平 
    006E 98AD      CBI	0x15,5
    006F 9563      INC	R22
    0070 3068      CPI	R22,0x8
    0071 F378      BCS	0x0061
(0053)   } 
(0054)   T_PORT&=~T_RST;             //禁止DS1302 
    0072 98AF      CBI	0x15,7
    0073 D24C      RCALL	pop_gset3
    0074 9508      RET
_read_data:
  k                    --> R20
  temp                 --> R22
  i                    --> R10
  addr                 --> R20
    0075 D250      RCALL	push_gset3
    0076 2F40      MOV	R20,R16
(0055) }
(0056) 
(0057) /***************************************************
(0058)                       读一个字节
(0059) ***************************************************/
(0060) uchar read_data(uchar addr)
(0061) {
(0062) uchar i,temp,k;
(0063) temp=0;
    0077 2766      CLR	R22
(0064) T_DDR|=T_IO;
    0078 9AA6      SBI	0x14,6
(0065) T_PORT&=~T_RST;
    0079 98AF      CBI	0x15,7
(0066) T_PORT&=~T_CLK;         
    007A 98AD      CBI	0x15,5
(0067)   asm("nop");
    007B 0000      NOP
(0068)   asm("nop");
    007C 0000      NOP
(0069)   asm("nop");
    007D 0000      NOP
(0070)   asm("nop");
    007E 0000      NOP
(0071) T_PORT|=T_RST;                  //时钟信号低时拉高RST初始化
    007F 9AAF      SBI	0x15,7
(0072) temp=addr;
    0080 2F64      MOV	R22,R20
(0073)   for(i=0;i<8;i++) 
    0081 24AA      CLR	R10
    0082 C00E      RJMP	0x0091
(0074)   { 
(0075)   	if(temp&(1<<i)) 
    0083 E001      LDI	R16,1
    0084 2D1A      MOV	R17,R10
    0085 D25B      RCALL	lsl8
    0086 2E26      MOV	R2,R22
    0087 2220      AND	R2,R16
    0088 F011      BEQ	0x008B
(0076)   		 T_PORT |=T_IO ;  
    0089 9AAE      SBI	0x15,6
    008A C001      RJMP	0x008C
(0077)   	else 
(0078)   		 T_PORT &=~T_IO ;
    008B 98AE      CBI	0x15,6
(0079)     asm("nop");
    008C 0000      NOP
(0080)     asm("nop"); 
    008D 0000      NOP
(0081)   	T_PORT |=T_CLK;             //时钟上升沿写入数据 	
    008E 9AAD      SBI	0x15,5
(0082) 	T_PORT &=~T_CLK;             //时钟拉低电平 
    008F 98AD      CBI	0x15,5
    0090 94A3      INC	R10
    0091 2D8A      MOV	R24,R10
    0092 3088      CPI	R24,0x8
    0093 F378      BCS	0x0083
(0083)   }
(0084)    T_DDR&=~T_IO;
    0094 98A6      CBI	0x14,6
(0085) for(i=0;i<8;i++)
    0095 24AA      CLR	R10
    0096 C014      RJMP	0x00AB
(0086)  { 
(0087)     k=(T_PIN&T_IO);
    0097 B343      IN	R20,0x13
    0098 7440      ANDI	R20,0x40
(0088)   if(k==T_IO)
    0099 3440      CPI	R20,0x40
    009A F429      BNE	0x00A0
(0089)       temp|=(1<<i);
    009B E001      LDI	R16,1
    009C 2D1A      MOV	R17,R10
    009D D243      RCALL	lsl8
    009E 2B60      OR	R22,R16
    009F C006      RJMP	0x00A6
(0090)   else
(0091)   	  temp&=~(1<<i);
    00A0 E001      LDI	R16,1
    00A1 2D1A      MOV	R17,R10
    00A2 D23E      RCALL	lsl8
    00A3 2E20      MOV	R2,R16
    00A4 9420      COM	R2
    00A5 2162      AND	R22,R2
(0092) 	    asm("nop");
    00A6 0000      NOP
(0093)        asm("nop"); 
    00A7 0000      NOP
(0094)   T_PORT|=T_CLK;              //上升沿读出数据 
    00A8 9AAD      SBI	0x15,5
(0095)    T_PORT &=~T_CLK;             //时钟电平拉低 
    00A9 98AD      CBI	0x15,5
    00AA 94A3      INC	R10
    00AB 2D8A      MOV	R24,R10
    00AC 3088      CPI	R24,0x8
    00AD F348      BCS	0x0097
(0096)   }
(0097)   T_DDR|=T_IO;
    00AE 9AA6      SBI	0x14,6
(0098)   T_PORT&=~T_CLK; 
    00AF 98AD      CBI	0x15,5
(0099)   T_PORT&=~T_RST;             //禁止DS1302 
    00B0 98AF      CBI	0x15,7
(0100)  return(temp);
    00B1 2F06      MOV	R16,R22
    00B2 D20D      RCALL	pop_gset3
    00B3 9508      RET
(0101) }
(0102) //1302初始化
(0103) void init_1302()
(0104) {
(0105) write_data(0x8e,0x00);      //关闭寄存器写保护
_init_1302:
    00B4 2722      CLR	R18
    00B5 E80E      LDI	R16,0x8E
    00B6 DF88      RCALL	_write_data
(0106) write_data(0x90,0x00);	    //写充电寄存器
    00B7 2722      CLR	R18
    00B8 E900      LDI	R16,0x90
    00B9 DF85      RCALL	_write_data
(0107) write_data(0x80,0x00);      //秒寄存器停止位置0,时钟启动,初值设为0
    00BA 2722      CLR	R18
    00BB E800      LDI	R16,0x80
    00BC DF82      RCALL	_write_data
    00BD 9508      RET
(0108) }
(0109) 
(0110) void init_time()
(0111) {
(0112)   write_data(0x80,0x50);
_init_time:
    00BE E520      LDI	R18,0x50
    00BF E800      LDI	R16,0x80
    00C0 DF7E      RCALL	_write_data
(0113)   write_data(0x82,0x59);
    00C1 E529      LDI	R18,0x59
    00C2 E802      LDI	R16,0x82
    00C3 DF7B      RCALL	_write_data
(0114)   write_data(0x84,0x13);
    00C4 E123      LDI	R18,0x13
    00C5 E804      LDI	R16,0x84
    00C6 DF78      RCALL	_write_data
(0115)   write_data(0x86,0x05);
    00C7 E025      LDI	R18,5
    00C8 E806      LDI	R16,0x86
    00C9 DF75      RCALL	_write_data
(0116)   write_data(0x88,0x12);
    00CA E122      LDI	R18,0x12
    00CB E808      LDI	R16,0x88
    00CC DF72      RCALL	_write_data
(0117)   write_data(0x8a,0x01);
    00CD E021      LDI	R18,1
    00CE E80A      LDI	R16,0x8A
    00CF DF6F      RCALL	_write_data
    00D0 9508      RET
FILE: D:\时钟芯片\1302\1302-162\main.c
(0001) //ICC-AVR application builder : 2005-11-2 16:28:30
(0002) // Target : 8515
(0003) // Crystal: 4.0000Mhz
(0004) #include <io8515v.h>
(0005) #include <macros.h>
(0006) #include <162-1302.h>
(0007) #include <function.h>
(0008) uchar temh_d;
(0009) uchar teml_d;
(0010) uchar temm_d;
(0011) void port_init(void)
(0012) {
(0013)  PORTA = 0x00;
_port_init:
    00D1 2422      CLR	R2
    00D2 BA2B      OUT	0x1B,R2
(0014)  DDRA  = 0xFF;
    00D3 EF8F      LDI	R24,0xFF
    00D4 BB8A      OUT	0x1A,R24
(0015)  PORTB = 0xFF;
    00D5 BB88      OUT	0x18,R24
(0016)  DDRB  = 0xFF;
    00D6 BB87      OUT	0x17,R24
(0017)  PORTC = 0xFF;
    00D7 BB85      OUT	0x15,R24
(0018)  DDRC  = 0xFF;
    00D8 BB84      OUT	0x14,R24
(0019)  PORTD = 0x00;
    00D9 BA22      OUT	0x12,R2
(0020)  DDRD  = 0x00; 
    00DA BA21      OUT	0x11,R2
    00DB 9508      RET
(0021) }	   	 	   		//call this routine to initialize all peripherals
(0022) void init_devices(void)
(0023) {
(0024)  	 				//stop errant interrupts until set up
(0025)  CLI(); 			//disable all interrupts
_init_devices:
    00DC 94F8      BCLR	7
(0026)  port_init();
    00DD DFF3      RCALL	_port_init
(0027)  MCUCR = 0x00;
    00DE 2422      CLR	R2
    00DF BE25      OUT	0x35,R2
(0028)  GIMSK = 0x00;
    00E0 BE2B      OUT	0x3B,R2
(0029)  TIMSK = 0x00;
    00E1 BE29      OUT	0x39,R2
(0030)  SEI();  	   		//re-enable interrupts
    00E2 9478      BSET	7
    00E3 9508      RET
_main:
  temm                 --> R20
  count                --> R22
  a                    --> R10
  temh                 --> R12
  teml                 --> R14
  th                   --> R12
  tl                   --> R20
  s                    --> R22
  i                    --> Y,+2
    00E4 9723      SBIW	R28,3
(0031)  			   		//all peripherals are now initialized
(0032) }
(0033) /******************************************************
(0034)                          主程序
(0035) ******************************************************/		               
(0036) void main(void)
(0037) {
(0038) uchar s,i,th,tl;
(0039)  uchar temh,teml,a,count,temm; 
(0040) init_devices();
    00E5 DFF6      RCALL	_init_devices
(0041) init_1302();
    00E6 DFCD      RCALL	_init_1302
(0042) init_1302();
    00E7 DFCC      RCALL	_init_1302
(0043) init_lcd() ;
    00E8 D105      RCALL	_init_lcd
(0044) init_lcd() ;

⌨️ 快捷键说明

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