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

📄 main.lst

📁 ATMEGA128的PCF8536驱动程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
__text_start:
__start:
    00A0 EFCF      LDI	R28,0xFF
    00A1 E1D0      LDI	R29,0x10
    00A2 BFCD      OUT	0x3D,R28
    00A3 BFDE      OUT	0x3E,R29
    00A4 51C0      SUBI	R28,0x10
    00A5 40D0      SBCI	R29,0
    00A6 EA0A      LDI	R16,0xAA
    00A7 8308      STD	Y+0,R16
    00A8 2400      CLR	R0
    00A9 EAED      LDI	R30,0xAD
    00AA E0F1      LDI	R31,1
    00AB E012      LDI	R17,2
    00AC 39E0      CPI	R30,0x90
    00AD 07F1      CPC	R31,R17
    00AE F011      BEQ	0x00B1
    00AF 9201      ST	R0,Z+
    00B0 CFFB      RJMP	0x00AC
    00B1 8300      STD	Z+0,R16
    00B2 E9E3      LDI	R30,0x93
    00B3 E0F0      LDI	R31,0
    00B4 E0A0      LDI	R26,0
    00B5 E0B1      LDI	R27,1
    00B6 E011      LDI	R17,1
    00B7 34E0      CPI	R30,0x40
    00B8 07F1      CPC	R31,R17
    00B9 F021      BEQ	0x00BE
    00BA 95C8      LPM
    00BB 9631      ADIW	R30,1
    00BC 920D      ST	R0,X+
    00BD CFF9      RJMP	0x00B7
    00BE 940E00C1  CALL	_main
_exit:
    00C0 CFFF      RJMP	_exit
_main:
  tmp                  --> R20
  sec_flag             --> R22
  time                 --> R10
  Set_time             --> Y+2
    00C1 9729      SBIW	R28,0x9
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\main.c
(0001) /************************************************
(0002) 文件:main.c
(0003) 用途:
(0004) 注意:内部8M晶振
(0005) 创建:2008.4.1
(0006) 修改:2008.4.1
(0007) Copy Right  (c)  www.avrvi.com  AVR与虚拟仪器
(0008) ************************************************/
(0009) 
(0010) #include "config.h"
(0011) void main(void)
(0012) {
(0013)  unsigned char *time="2008-01-01 00:00:00";
    00C2 E28A      LDI	R24,0x2A
    00C3 E091      LDI	R25,1
    00C4 015C      MOVW	R10,R24
(0014)  unsigned char sec_flag=0,tmp=0;
    00C5 2766      CLR	R22
    00C6 2744      CLR	R20
(0015)  unsigned char Set_time[7]={
    00C7 E88C      LDI	R24,0x8C
    00C8 E090      LDI	R25,0
    00C9 01FE      MOVW	R30,R28
    00CA 9632      ADIW	R30,2
    00CB E007      LDI	R16,7
    00CC E010      LDI	R17,0
    00CD 93FA      ST	R31,-Y
    00CE 93EA      ST	R30,-Y
    00CF 939A      ST	R25,-Y
    00D0 938A      ST	R24,-Y
    00D1 940E04F8  CALL	asgncblk
(0016) 		 	  		   		0x00/*秒*/,
(0017) 					   		0x00/*分*/,
(0018) 							0x00/*时*/,
(0019) 					   		0x01/*天*/,
(0020) 					   		0x02/*星期*/,
(0021) 					   		0x01/*月/世纪*/,
(0022) 					   		0x08/*年*/
(0023) 					   	   };
(0024)  
(0025)  CLI();
    00D3 94F8      BCLR	7
(0026)  Com_init();
    00D4 940E026E  CALL	_Com_init
(0027)  twi_init();
    00D6 940E0179  CALL	_twi_init
(0028)  PCF8563_init();
    00D8 940E025D  CALL	_PCF8563_init
(0029)  SEI();
    00DA 9478      BSET	7
(0030)  
(0031)  Com_putstring ("PCF8563 Set Time: ",18,&RTbuf_UART0);
    00DB EC80      LDI	R24,0xC0
    00DC E091      LDI	R25,1
    00DD 8399      STD	Y+1,R25
    00DE 8388      STD	Y+0,R24
    00DF E122      LDI	R18,0x12
    00E0 E107      LDI	R16,0x17
    00E1 E011      LDI	R17,1
    00E2 940E02C0  CALL	_Com_putstring
(0032)  Com_putstring (time,19,&RTbuf_UART0);
    00E4 EC80      LDI	R24,0xC0
    00E5 E091      LDI	R25,1
    00E6 8399      STD	Y+1,R25
    00E7 8388      STD	Y+0,R24
    00E8 E123      LDI	R18,0x13
    00E9 0185      MOVW	R16,R10
    00EA 940E02C0  CALL	_Com_putstring
(0033)  Com_putstring ("\n\n",2,&RTbuf_UART0);
    00EC EC80      LDI	R24,0xC0
    00ED E091      LDI	R25,1
    00EE 8399      STD	Y+1,R25
    00EF 8388      STD	Y+0,R24
    00F0 E022      LDI	R18,2
    00F1 E104      LDI	R16,0x14
    00F2 E011      LDI	R17,1
    00F3 940E02C0  CALL	_Com_putstring
(0034)  PCF8536_wt_p(0x02,Set_time,7);
    00F5 E087      LDI	R24,7
    00F6 8388      STD	Y+0,R24
    00F7 019E      MOVW	R18,R28
    00F8 5F2E      SUBI	R18,0xFE
    00F9 4F3F      SBCI	R19,0xFF
    00FA E002      LDI	R16,2
    00FB E010      LDI	R17,0
    00FC 940E01FF  CALL	_PCF8536_wt_p
    00FE C077      RJMP	0x0176
(0035)  while(1)
(0036)  	{
(0037) 		 PCF8536_rd(0x02,Set_time,7);
    00FF E087      LDI	R24,7
    0100 8388      STD	Y+0,R24
    0101 019E      MOVW	R18,R28
    0102 5F2E      SUBI	R18,0xFE
    0103 4F3F      SBCI	R19,0xFF
    0104 E002      LDI	R16,2
    0105 E010      LDI	R17,0
    0106 940E0228  CALL	_PCF8536_rd
(0038)          Set_time[0] &= 0x7F;
    0108 818A      LDD	R24,Y+2
    0109 778F      ANDI	R24,0x7F
    010A 838A      STD	Y+2,R24
(0039) 		 Set_time[1] &= 0x7F;
    010B 818B      LDD	R24,Y+3
    010C 778F      ANDI	R24,0x7F
    010D 838B      STD	Y+3,R24
(0040) 		 Set_time[2] &= 0x3F;
    010E 818C      LDD	R24,Y+4
    010F 738F      ANDI	R24,0x3F
    0110 838C      STD	Y+4,R24
(0041) 		 Set_time[3] &= 0x3F;
    0111 818D      LDD	R24,Y+5
    0112 738F      ANDI	R24,0x3F
    0113 838D      STD	Y+5,R24
(0042) 		 Set_time[4] &= 0x07;
    0114 818E      LDD	R24,Y+6
    0115 7087      ANDI	R24,7
    0116 838E      STD	Y+6,R24
(0043) 		 Set_time[5] &= 0x1F;
    0117 818F      LDD	R24,Y+7
    0118 718F      ANDI	R24,0x1F
    0119 838F      STD	Y+7,R24
(0044) 		 time[5] = (Set_time[5]>>4)+0x30;
    011A 9582      SWAP	R24
    011B 708F      ANDI	R24,0xF
    011C 5D80      SUBI	R24,0xD0
    011D 01F5      MOVW	R30,R10
    011E 8385      STD	Z+5,R24
(0045) 		 time[6] = (Set_time[5]&0x0F)+0x30;
    011F 818F      LDD	R24,Y+7
    0120 708F      ANDI	R24,0xF
    0121 5D80      SUBI	R24,0xD0
    0122 01F5      MOVW	R30,R10
    0123 8386      STD	Z+6,R24
(0046) 		 time[8] = (Set_time[3]>>4)+0x30;
    0124 818D      LDD	R24,Y+5
    0125 9582      SWAP	R24
    0126 708F      ANDI	R24,0xF
    0127 5D80      SUBI	R24,0xD0
    0128 01F5      MOVW	R30,R10
    0129 8780      STD	Z+8,R24
(0047) 		 time[9] = (Set_time[3]&0x0F)+0x30;
    012A 818D      LDD	R24,Y+5
    012B 708F      ANDI	R24,0xF
    012C 5D80      SUBI	R24,0xD0
    012D 01F5      MOVW	R30,R10
    012E 8781      STD	Z+9,R24
(0048) 		 time[11] = (Set_time[2]>>4)+0x30;
    012F 818C      LDD	R24,Y+4
    0130 9582      SWAP	R24
    0131 708F      ANDI	R24,0xF
    0132 5D80      SUBI	R24,0xD0
    0133 01F5      MOVW	R30,R10
    0134 8783      STD	Z+11,R24
(0049) 		 time[12] = (Set_time[2]&0x0F)+0x30;
    0135 818C      LDD	R24,Y+4
    0136 708F      ANDI	R24,0xF
    0137 5D80      SUBI	R24,0xD0
    0138 01F5      MOVW	R30,R10
    0139 8784      STD	Z+12,R24
(0050) 		 time[14] = (Set_time[1]>>4)+0x30;
    013A 818B      LDD	R24,Y+3
    013B 9582      SWAP	R24
    013C 708F      ANDI	R24,0xF
    013D 5D80      SUBI	R24,0xD0
    013E 01F5      MOVW	R30,R10
    013F 8786      STD	Z+14,R24
(0051) 		 time[15] = (Set_time[1]&0x0F)+0x30;
    0140 818B      LDD	R24,Y+3
    0141 708F      ANDI	R24,0xF
    0142 5D80      SUBI	R24,0xD0
    0143 01F5      MOVW	R30,R10
    0144 8787      STD	Z+15,R24
(0052) 		 time[17] = (Set_time[0]>>4)+0x30;
    0145 818A      LDD	R24,Y+2
    0146 9582      SWAP	R24
    0147 708F      ANDI	R24,0xF
    0148 5D80      SUBI	R24,0xD0
    0149 01F5      MOVW	R30,R10
    014A 8B81      STD	Z+17,R24
(0053) 		 time[18] = (Set_time[0]&0x0F)+0x30;
    014B 818A      LDD	R24,Y+2
    014C 708F      ANDI	R24,0xF
    014D 5D80      SUBI	R24,0xD0
    014E 01F5      MOVW	R30,R10
    014F 8B82      STD	Z+18,R24
(0054) 		 
(0055) 		 tmp=sec_flag;
    0150 2F46      MOV	R20,R22
(0056) 		 
(0057) 		 if(Set_time[0]%2)
    0151 E012      LDI	R17,2
    0152 810A      LDD	R16,Y+2
    0153 940E04B8  CALL	mod8u
    0155 2300      TST	R16
    0156 F011      BEQ	0x0159
(0058) 		 				  {
(0059) 						   sec_flag=0;
    0157 2766      CLR	R22
(0060) 		 				  }		 
    0158 C001      RJMP	0x015A
(0061) 		 else sec_flag=1;
    0159 E061      LDI	R22,1
(0062) 		 
(0063) 		 if(sec_flag!=tmp)
    015A 1764      CP	R22,R20
    015B F0D1      BEQ	0x0176
(0064) 		 				  {
(0065) 						   Com_putstring ("PCF8563 Read Time: ",19,&RTbuf_UART0);		 
    015C EC80      LDI	R24,0xC0
    015D E091      LDI	R25,1
    015E 8399      STD	Y+1,R25
    015F 8388      STD	Y+0,R24
    0160 E123      LDI	R18,0x13
    0161 E000      LDI	R16,0
    0162 E011      LDI	R17,1
    0163 940E02C0  CALL	_Com_putstring
(0066) 		 				   Com_putstring (time,19,&RTbuf_UART0);
    0165 EC80      LDI	R24,0xC0
    0166 E091      LDI	R25,1
    0167 8399      STD	Y+1,R25
    0168 8388      STD	Y+0,R24
    0169 E123      LDI	R18,0x13
    016A 0185      MOVW	R16,R10
    016B 940E02C0  CALL	_Com_putstring
(0067) 		 				   Com_putstring ("\n\n",2,&RTbuf_UART0);
    016D EC80      LDI	R24,0xC0
    016E E091      LDI	R25,1
    016F 8399      STD	Y+1,R25
    0170 8388      STD	Y+0,R24
    0171 E022      LDI	R18,2
    0172 E104      LDI	R16,0x14
    0173 E011      LDI	R17,1
    0174 940E02C0  CALL	_Com_putstring
    0176 CF88      RJMP	0x00FF
    0177 9629      ADIW	R28,0x9
    0178 9508      RET
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\TWI.c
(0001) /************************************************
(0002) 文件:TWI.c
(0003) 用途:TWI操作函数
(0004) 注意:
(0005) 创建:2008.1.26
(0006) 修改:2008.1.26
(0007) Copy Right  (c)  www.avrvi.com  AVR与虚拟仪器
(0008) ************************************************/
(0009) #include "..\config.h"
(0010) /*************************************************************************
(0011) ** 函数名称: twi_init(void)
(0012) ** 功能描述: i2c通信初始化
(0013) ** 输 入: 
(0014) ** 输出	 : 
(0015) ** 全局变量: 无
(0016) ** 调用模块: 
(0017) ** 说明:
(0018) ** 注意:
(0019) **************************************************************************/
(0020) void twi_init(void)
(0021) {
(0022)  TWCR= 0x00; //disable twi
_twi_init:
    0179 2422      CLR	R2
    017A 92200074  STS	0x74,R2
(0023)  TWBR= (1<<6) | (1<<5) | (1<<2); //set bit rate
    017C E684      LDI	R24,0x64
    017D 93800070  STS	0x70,R24
(0024)  TWSR= 0x00; //set prescale
    017F 92200071  STS	0x71,R2
(0025)  TWAR= 0x00; //set slave address
    0181 92200072  STS	0x72,R2
(0026)  TWCR= (1<<TWEN); //enable twi
    0183 E084      LDI	R24,4
    0184 93800074  STS	0x74,R24
    0186 9508      RET
(0027) }
(0028) /*************************************************************************
(0029) ** 函数名称: i2cstart(void)
(0030) ** 功能描述: i2c通信开始
(0031) ** 输 入: 
(0032) ** 输出	 : 
(0033) ** 全局变量: 无
(0034) ** 调用模块: 
(0035) ** 说明:
(0036) ** 注意:
(0037) **************************************************************************/
(0038) void i2cstart(void)
(0039) { 
(0040) 	TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); 
_i2cstart:
    0187 EA84      LDI	R24,0xA4
    0188 93800074  STS	0x74,R24
(0041)    	while (!(TWCR & (1<<TWINT)));
    018A 90200074  LDS	R2,0x74
    018C FE27      SBRS	R2,7
    018D CFFC      RJMP	0x018A
    018E 9508      RET
(0042) }
(0043) /*************************************************************************
(0044) ** 函数名称: unsigned char i2cwt(unsigned char data)
(0045) ** 功能描述: i2c写数据,返回TWI状态
(0046) ** 输 入: 
(0047) ** 输  出: TWI状态
(0048) ** 全局变量: 无
(0049) ** 调用模块: 
(0050) ** 说明:
(0051) ** 注意:
(0052) **************************************************************************/
(0053) unsigned char i2cwt(unsigned char data)
(0054) { 
(0055) 	TWDR = data;
_i2cwt:
  data                 --> R16
    018F 93000073  STS	0x73,R16
(0056)    	TWCR = (1<<TWINT) | (1<<TWEN);
    0191 E884      LDI	R24,0x84
    0192 93800074  STS	0x74,R24
(0057)    	while (!(TWCR & (1<<TWINT)));
    0194 90200074  LDS	R2,0x74
    0196 FE27      SBRS	R2,7
    0197 CFFC      RJMP	0x0194
(0058)    	_NOP();
    0198 0000      NOP
(0059)    	return(TWSR&0b11111000);
    0199 91000071  LDS	R16,0x71
    019B 7F08      ANDI	R16,0xF8
    019C 9508      RET
(0060) }
(0061) /*************************************************************************
(0062) ** 函数名称: unsigned char i2crd(void)
(0063) ** 功能描述: i2c读数据
(0064) ** 输 入: 
(0065) ** 输出	 : 读取的数据
(0066) ** 全局变量: 无
(0067) ** 调用模块: 
(0068) ** 说明:
(0069) ** 注意:
(0070) **************************************************************************/
(0071) unsigned char i2crd(void)
(0072) {
(0073)    	TWCR= (1<<TWINT) | (1<<TWEA) | (1<<TWEN);
_i2crd:
    019D EC84      LDI	R24,0xC4
    019E 93800074  STS	0x74,R24
(0074)    	while (!(TWCR & (1<<TWINT)));
    01A0 90200074  LDS	R2,0x74
    01A2 FE27      SBRS	R2,7
    01A3 CFFC      RJMP	0x01A0
(0075)    	return(TWDR);
    01A4 91000073  LDS	R16,0x73
    01A6 9508      RET

⌨️ 快捷键说明

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