📄 test.lst
字号:
__text_start:
__start:
0073 EFCF LDI R28,0xFF
0074 E1D0 LDI R29,0x10
0075 BFCD OUT 0x3D,R28
0076 BFDE OUT 0x3E,R29
0077 51C0 SUBI R28,0x10
0078 40D0 SBCI R29,0
0079 EA0A LDI R16,0xAA
007A 8308 STD Y+0,R16
007B 2400 CLR R0
007C E5E9 LDI R30,0x59
007D E0F1 LDI R31,1
007E E011 LDI R17,1
007F 36E7 CPI R30,0x67
0080 07F1 CPC R31,R17
0081 F011 BEQ 0x0084
0082 9201 ST R0,Z+
0083 CFFB RJMP 0x007F
0084 8300 STD Z+0,R16
0085 E8EC LDI R30,0x8C
0086 E0F0 LDI R31,0
0087 E0A0 LDI R26,0
0088 E0B1 LDI R27,1
0089 E010 LDI R17,0
008A 3EE5 CPI R30,0xE5
008B 07F1 CPC R31,R17
008C F021 BEQ 0x0091
008D 95C8 LPM
008E 9631 ADIW R30,1
008F 920D ST R0,X+
0090 CFF9 RJMP 0x008A
0091 940E0094 CALL _main
_exit:
0093 CFFF RJMP _exit
_main:
str2 --> Y+22
str1 --> Y+2
0094 9769 SBIW R28,0x19
FILE: F:\cdy笔记本资料\E\工程\五星\设计文档\程序设计\ds1307\main.c
(0001) /*--------------------------------------------------*/
(0002) /* AVR-ARM开发网论坛 */
(0003) /* http://www.avrarm.com */
(0004) /* AVR生成代码测试程序 */
(0005) /*--------------------------------------------------*/
(0006) /* 程序由AVR辅助开发工具V2.0.0自动生成 */
(0007) /* AVR系统的处理器为: ATMega16 */
(0008) /* AVR系统的晶振频率: 8.0000 Mhz */
(0009) /*--------------------------------------------------*/
(0010)
(0011) #include <iom128v.h>
(0012) #include <macros.h>
(0013) #include "twi.h"
(0014) #include "ds1307.h"
(0015) #include "stdlib.h"
(0016) #include "string.h"
(0017) #include "ocmj_lcd.h"
(0018) #include "delay.h"
(0019)
(0020)
(0021)
(0022) //-----------------------------------------------------------
(0023) //主函数
(0024) //-----------------------------------------------------------
(0025) void main(void)
(0026) {
(0027) char str1[20],str2[3];
(0028)
(0029) CLI();
0095 94F8 BCLR 7
(0030) TWI_Init();
0096 940E017B CALL _TWI_Init
(0031) ocmj_init();
0098 940E0332 CALL _ocmj_init
(0032) //rtc_write(0x00,0x00,0x01);
(0033)
(0034) SEI();
009A 9478 BSET 7
(0035) ocmj_write(0xf4); //显示清屏
009B EF04 LDI R16,0xF4
009C 940E0347 CALL _ocmj_write
(0036) delay_nms(1);
009E E001 LDI R16,1
009F E010 LDI R17,0
00A0 940E0323 CALL _delay_nms
(0037) asc_tran(3,0,"Welcome to");
00A2 E289 LDI R24,0x29
00A3 E091 LDI R25,1
00A4 8399 STD Y+1,R25
00A5 8388 STD Y+0,R24
00A6 2722 CLR R18
00A7 E003 LDI R16,3
00A8 940E0353 CALL _asc_tran
(0038) asc_tran(1,8,"www.avrarm.com!");
00AA E189 LDI R24,0x19
00AB E091 LDI R25,1
00AC 8399 STD Y+1,R25
00AD 8388 STD Y+0,R24
00AE E028 LDI R18,0x8
00AF E001 LDI R16,1
00B0 940E0353 CALL _asc_tran
(0039) delay_nms(800);
00B2 E200 LDI R16,0x20
00B3 E013 LDI R17,3
00B4 940E0323 CALL _delay_nms
(0040) ocmj_write(0xf4); //显示清屏
00B6 EF04 LDI R16,0xF4
00B7 940E0347 CALL _ocmj_write
00B9 C0BE RJMP 0x0178
(0041)
(0042) while(1)
(0043) {
(0044) RtcUpdateData(RTC_READ);
00BA E001 LDI R16,1
00BB 940E023D CALL _RtcUpdateData
(0045) RtcBCDToBin();
00BD 940E02D9 CALL _RtcBCDToBin
(0046) strcpy(str1,"0");
00BF E127 LDI R18,0x17
00C0 E031 LDI R19,1
00C1 018E MOVW R16,R28
00C2 5F0E SUBI R16,0xFE
00C3 4F1F SBCI R17,0xFF
00C4 940E0384 CALL _strcpy
(0047)
(0048) itoa(str2,g_aTimeBin[6],10); //year
00C6 E08A LDI R24,0xA
00C7 E090 LDI R25,0
00C8 8399 STD Y+1,R25
00C9 8388 STD Y+0,R24
00CA 9120015F LDS R18,0x15F
00CC 2733 CLR R19
00CD 018E MOVW R16,R28
00CE 5E0A SUBI R16,0xEA
00CF 4F1F SBCI R17,0xFF
00D0 940E0407 CALL _itoa
(0049) strcat(str1,str2);
00D2 019E MOVW R18,R28
00D3 5E2A SUBI R18,0xEA
00D4 4F3F SBCI R19,0xFF
00D5 018E MOVW R16,R28
00D6 5F0E SUBI R16,0xFE
00D7 4F1F SBCI R17,0xFF
00D8 940E0377 CALL _strcat
(0050) strcat(str1,"-");
00DA E125 LDI R18,0x15
00DB E031 LDI R19,1
00DC 018E MOVW R16,R28
00DD 5F0E SUBI R16,0xFE
00DE 4F1F SBCI R17,0xFF
00DF 940E0377 CALL _strcat
(0051) itoa(str2,g_aTimeBin[5],10); //month
00E1 E08A LDI R24,0xA
00E2 E090 LDI R25,0
00E3 8399 STD Y+1,R25
00E4 8388 STD Y+0,R24
00E5 9120015E LDS R18,0x15E
00E7 2733 CLR R19
00E8 018E MOVW R16,R28
00E9 5E0A SUBI R16,0xEA
00EA 4F1F SBCI R17,0xFF
00EB 940E0407 CALL _itoa
(0052) strcat(str1,str2);
00ED 019E MOVW R18,R28
00EE 5E2A SUBI R18,0xEA
00EF 4F3F SBCI R19,0xFF
00F0 018E MOVW R16,R28
00F1 5F0E SUBI R16,0xFE
00F2 4F1F SBCI R17,0xFF
00F3 940E0377 CALL _strcat
(0053) strcat(str1,"-");
00F5 E125 LDI R18,0x15
00F6 E031 LDI R19,1
00F7 018E MOVW R16,R28
00F8 5F0E SUBI R16,0xFE
00F9 4F1F SBCI R17,0xFF
00FA 940E0377 CALL _strcat
(0054) itoa(str2,g_aTimeBin[4],10); //day
00FC E08A LDI R24,0xA
00FD E090 LDI R25,0
00FE 8399 STD Y+1,R25
00FF 8388 STD Y+0,R24
0100 9120015D LDS R18,0x15D
0102 2733 CLR R19
0103 018E MOVW R16,R28
0104 5E0A SUBI R16,0xEA
0105 4F1F SBCI R17,0xFF
0106 940E0407 CALL _itoa
(0055) strcat(str1,str2);
0108 019E MOVW R18,R28
0109 5E2A SUBI R18,0xEA
010A 4F3F SBCI R19,0xFF
010B 018E MOVW R16,R28
010C 5F0E SUBI R16,0xFE
010D 4F1F SBCI R17,0xFF
010E 940E0377 CALL _strcat
(0056)
(0057) strcat(str1," ");
0110 E123 LDI R18,0x13
0111 E031 LDI R19,1
0112 018E MOVW R16,R28
0113 5F0E SUBI R16,0xFE
0114 4F1F SBCI R17,0xFF
0115 940E0377 CALL _strcat
(0058) itoa(str2,g_aTimeBin[2],10);
0117 E08A LDI R24,0xA
0118 E090 LDI R25,0
0119 8399 STD Y+1,R25
011A 8388 STD Y+0,R24
011B 9120015B LDS R18,g_aTimeBin+2
011D 2733 CLR R19
011E 018E MOVW R16,R28
011F 5E0A SUBI R16,0xEA
0120 4F1F SBCI R17,0xFF
0121 940E0407 CALL _itoa
(0059) strcat(str1,str2);
0123 019E MOVW R18,R28
0124 5E2A SUBI R18,0xEA
0125 4F3F SBCI R19,0xFF
0126 018E MOVW R16,R28
0127 5F0E SUBI R16,0xFE
0128 4F1F SBCI R17,0xFF
0129 940E0377 CALL _strcat
(0060) strcat(str1,":");
012B E121 LDI R18,0x11
012C E031 LDI R19,1
012D 018E MOVW R16,R28
012E 5F0E SUBI R16,0xFE
012F 4F1F SBCI R17,0xFF
0130 940E0377 CALL _strcat
(0061) itoa(str2,g_aTimeBin[1],10);
0132 E08A LDI R24,0xA
0133 E090 LDI R25,0
0134 8399 STD Y+1,R25
0135 8388 STD Y+0,R24
0136 9120015A LDS R18,g_aTimeBin+1
0138 2733 CLR R19
0139 018E MOVW R16,R28
013A 5E0A SUBI R16,0xEA
013B 4F1F SBCI R17,0xFF
013C 940E0407 CALL _itoa
(0062) strcat(str1,str2);
013E 019E MOVW R18,R28
013F 5E2A SUBI R18,0xEA
0140 4F3F SBCI R19,0xFF
0141 018E MOVW R16,R28
0142 5F0E SUBI R16,0xFE
0143 4F1F SBCI R17,0xFF
0144 940E0377 CALL _strcat
(0063) strcat(str1,":");
0146 E121 LDI R18,0x11
0147 E031 LDI R19,1
0148 018E MOVW R16,R28
0149 5F0E SUBI R16,0xFE
014A 4F1F SBCI R17,0xFF
014B 940E0377 CALL _strcat
(0064) itoa(str2,g_aTimeBin[0],10);
014D E08A LDI R24,0xA
014E E090 LDI R25,0
014F 8399 STD Y+1,R25
0150 8388 STD Y+0,R24
0151 91200159 LDS R18,g_aTimeBin
0153 2733 CLR R19
0154 018E MOVW R16,R28
0155 5E0A SUBI R16,0xEA
0156 4F1F SBCI R17,0xFF
0157 940E0407 CALL _itoa
(0065) strcat(str1,str2);
0159 019E MOVW R18,R28
015A 5E2A SUBI R18,0xEA
015B 4F3F SBCI R19,0xFF
015C 018E MOVW R16,R28
015D 5F0E SUBI R16,0xFE
015E 4F1F SBCI R17,0xFF
015F 940E0377 CALL _strcat
(0066) ocmj_write(0xf4);
0161 EF04 LDI R16,0xF4
0162 940E0347 CALL _ocmj_write
(0067) asc_tran(0,0," Current time is");
0164 E080 LDI R24,0
0165 E091 LDI R25,1
0166 8399 STD Y+1,R25
0167 8388 STD Y+0,R24
0168 2722 CLR R18
0169 2700 CLR R16
016A 940E0353 CALL _asc_tran
(0068)
(0069) asc_tran(0,9,str1);
016C 01CE MOVW R24,R28
016D 9602 ADIW R24,2
016E 8399 STD Y+1,R25
016F 8388 STD Y+0,R24
0170 E029 LDI R18,0x9
0171 2700 CLR R16
0172 940E0353 CALL _asc_tran
(0070) delay_nms(200);
0174 EC08 LDI R16,0xC8
0175 E010 LDI R17,0
0176 940E0323 CALL _delay_nms
0178 CF41 RJMP 0x00BA
0179 9669 ADIW R28,0x19
017A 9508 RET
FILE: F:\cdy笔记本资料\E\工程\五星\设计文档\程序设计\ds1307\twi.c
(0001) //-----------------------------------------------------------
(0002) //程序由AVR辅助开发工具V2.0.0自动生成
(0003) //MCU系统的处理器为: ATMega16
(0004) //MCU系统的晶振频率: 8.0000 Mhz
(0005) //-----------------------------------------------------------
(0006)
(0007) #include <iom128v.h>
(0008) #include "delay.h"
(0009) #include "twi.h"
(0010)
(0011) //-----------------------------------------------------------
(0012) //TWI初始化子程序
(0013) //-----------------------------------------------------------
(0014) void TWI_Init(void)
(0015) {
(0016) TWCR= 0x00; //disable twi
_TWI_Init:
017B 2422 CLR R2
017C 92200074 STS 0x74,R2
(0017) TWBR= 0x49; //set bit rate
017E E489 LDI R24,0x49
017F 93800070 STS 0x70,R24
(0018) TWSR= 0x03; //set prescale
0181 E083 LDI R24,3
0182 93800071 STS 0x71,R24
(0019) TWAR= 0xFE; //set slave address
0184 EF8E LDI R24,0xFE
0185 93800072 STS 0x72,R24
0187 9508 RET
(0020) }
(0021)
(0022) //总线上起动停止条件
(0023) void twi_stop(void)
(0024) {
(0025) TWI_Stop();
_twi_stop:
0188 E984 LDI R24,0x94
0189 93800074 STS 0x74,R24
018B 9508 RET
(0026) }
(0027)
(0028) //总线上起动开始条件
(0029) unsigned char twi_start(void)
(0030) {
(0031) TWI_Start();
_twi_start:
018C EA84 LDI R24,0xA4
018D 93800074 STS 0x74,R24
(0032) TWI_Wait();
018F 90200074 LDS R2,0x74
0191 FE27 SBRS R2,7
0192 CFFC RJMP 0x018F
(0033) return TW_STATUS;
0193 91000071 LDS R16,0x71
0195 7F08 ANDI R16,0xF8
0196 9508 RET
_twi_writebyte:
c --> R20
0197 940E03F0 CALL push_gset1
0199 2F40 MOV R20,R16
(0034) }
(0035)
(0036) //写一字节
(0037) unsigned char twi_writebyte(unsigned char c)
(0038) {
(0039) TWDR = c;
019A 93400073 STS 0x73,R20
(0040) delay_nms(10);
019C E00A LDI R16,0xA
019D E010 LDI R17,0
019E 940E0323 CALL _delay_nms
(0041) TWCR = (1 << (TWINT)) | (1 << (TWEN));
01A0 E884 LDI R24,0x84
01A1 93800074 STS 0x74,R24
(0042) TWI_Wait();
01A3 90200074 LDS R2,0x74
01A5 FE27 SBRS R2,7
01A6 CFFC RJMP 0x01A3
(0043) delay_nms(10);
01A7 E00A LDI R16,0xA
01A8 E010 LDI R17,0
01A9 940E0323 CALL _delay_nms
(0044) return TW_STATUS;
01AB 91000071 LDS R16,0x71
01AD 7F08 ANDI R16,0xF8
01AE 940E03F3 CALL pop_gset1
01B0 9508 RET
_twi_readbyte:
tmp --> R22
ack --> R10
c --> R20
01B1 940E03EC CALL push_gset3
01B3 2EA2 MOV R10,R18
01B4 01A8 MOVW R20,R16
(0045) }
(0046)
(0047) //读一字节 ack: true时发ACK,false时发NACK
(0048) unsigned char twi_readbyte(unsigned char *c ,unsigned char ack)
(0049) {
(0050) unsigned char tmp=(1 << (TWINT)) | (1 << (TWEN));
01B5 E864 LDI R22,0x84
(0051) if(ack)
01B6 20AA TST R10
01B7 F009 BEQ 0x01B9
(0052) tmp|=(1 << (TWEA));
01B8 6460 ORI R22,0x40
(0053) TWCR=tmp;
01B9 93600074 STS 0x74,R22
(0054) delay_nms(10);
01BB E00A LDI R16,0xA
01BC E010 LDI R17,0
01BD 940E0323 CALL _delay_nms
(0055) TWI_Wait();
01BF 90200074 LDS R2,0x74
01C1 FE27 SBRS R2,7
01C2 CFFC RJMP 0x01BF
(0056) delay_nms(10);
01C3 E00A LDI R16,0xA
01C4 E010 LDI R17,0
01C5 940E0323 CALL _delay_nms
(0057) *c=TWDR;
01C7 90200073 LDS R2,0x73
01C9 01FA MOVW R30,R20
01CA 8220 STD Z+0,R2
(0058) return TW_STATUS;
01CB 91000071 LDS R16,0x71
01CD 7F08 ANDI R16,0xF8
01CE 940E03E2 CALL pop_gset3
01D0 9508 RET
_rtc_write:
i --> R20
len --> R22
buf --> R10
addr --> R20
01D1 940E03EC CALL push_gset3
01D3 0159 MOVW R10,R18
01D4 2F40 MOV R20,R16
01D5 816E LDD R22,Y+6
FILE: F:\cdy笔记本资料\E\工程\五星\设计文档\程序设计\ds1307\ds1307.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -