📄 main.lst
字号:
__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 + -