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

📄 ds1307.lis

📁 mega128+时实时钟日期芯片ds1307的例子
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module ds1307.c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\cdy笔记本资料\E\工程\五星\设计文档\程序设计\ds1307\ds1307.c
 0000                   .dbfunc e rtc_write _rtc_write fc
 0000           ;              i -> R20
 0000           ;            len -> R22
 0000           ;            buf -> R10,R11
 0000           ;           addr -> R20
                        .even
 0000           _rtc_write::
 0000 0E940000          xcall push_gset3
 0004 5901              movw R10,R18
 0006 402F              mov R20,R16
 0008 6E81              ldd R22,y+6
 000A                   .dbline -1
 000A                   .dbline 11
 000A           ; #include"twi.h"
 000A           ; #include"ds1307.h"
 000A           ; #include"delay.h"
 000A           ; 
 000A           ; char g_aTimeBuf[7];//日历/时钟BCD格式缓冲区
 000A           ; char g_aTimeBin[7];//时钟/日历二进制格式缓冲区
 000A           ; 
 000A           ; /*************DS1307操作**************开始**************/
 000A           ; //对DS1307内存连续的写操作
 000A           ; unsigned char rtc_write(unsigned char addr,unsigned char *buf,unsigned char len)
 000A           ; {
 000A                   .dbline 14
 000A           ;       unsigned char i;
 000A           ;       
 000A           ;       twi_start();
 000A 0E940000          xcall _twi_start
 000E                   .dbline 15
 000E           ;       delay_nms(10);
 000E 0AE0              ldi R16,10
 0010 10E0              ldi R17,0
 0012 0E940000          xcall _delay_nms
 0016                   .dbline 16
 0016           ;       twi_writebyte(DS1307_ADDR|TW_WRITE);
 0016 00ED              ldi R16,208
 0018 0E940000          xcall _twi_writebyte
 001C                   .dbline 17
 001C           ;       delay_nms(10);
 001C 0AE0              ldi R16,10
 001E 10E0              ldi R17,0
 0020 0E940000          xcall _delay_nms
 0024                   .dbline 18
 0024           ;       twi_writebyte(addr);//write address
 0024 042F              mov R16,R20
 0026 0E940000          xcall _twi_writebyte
 002A                   .dbline 19
 002A           ;       delay_nms(10);
 002A 0AE0              ldi R16,10
 002C 10E0              ldi R17,0
 002E 0E940000          xcall _delay_nms
 0032                   .dbline 20
 0032           ;       for(i=0;i<len;i++)
 0032 4427              clr R20
 0034 0CC0              xjmp L5
 0036           L2:
 0036                   .dbline 21
 0036                   .dbline 22
 0036 E42F              mov R30,R20
 0038 FF27              clr R31
 003A EA0D              add R30,R10
 003C FB1D              adc R31,R11
 003E 0081              ldd R16,z+0
 0040 0E940000          xcall _twi_writebyte
 0044                   .dbline 23
 0044 0AE0              ldi R16,10
 0046 10E0              ldi R17,0
 0048 0E940000          xcall _delay_nms
 004C                   .dbline 24
 004C           L3:
 004C                   .dbline 20
 004C 4395              inc R20
 004E           L5:
 004E                   .dbline 20
 004E 4617              cp R20,R22
 0050 90F3              brlo L2
 0052                   .dbline 25
 0052           ;       {
 0052           ;               twi_writebyte(buf[i]);
 0052           ;               delay_nms(10);
 0052           ;               }
 0052           ;       twi_stop();
 0052 0E940000          xcall _twi_stop
 0056                   .dbline 26
 0056           ;       return 0;
 0056 0027              clr R16
 0058                   .dbline -2
 0058           L1:
 0058 0E940000          xcall pop_gset3
 005C                   .dbline 0 ; func end
 005C 0895              ret
 005E                   .dbsym r i 20 c
 005E                   .dbsym r len 22 c
 005E                   .dbsym r buf 10 pc
 005E                   .dbsym r addr 20 c
 005E                   .dbend
 005E                   .dbfunc e rtc_read _rtc_read fc
 005E           ;              i -> R20
 005E           ;            len -> R22
 005E           ;            buf -> R10,R11
 005E           ;           addr -> R20
                        .even
 005E           _rtc_read::
 005E 0E940000          xcall push_gset3
 0062 5901              movw R10,R18
 0064 402F              mov R20,R16
 0066 2197              sbiw R28,1
 0068 6F81              ldd R22,y+7
 006A                   .dbline -1
 006A                   .dbline 31
 006A           ; }
 006A           ; 
 006A           ; //对DS1307内存连续的读操作
 006A           ; unsigned char rtc_read(unsigned char addr,unsigned char *buf,unsigned char len)
 006A           ; {
 006A                   .dbline 34
 006A           ;       unsigned char i;
 006A           ;       
 006A           ;       rtc_write(addr,0,0);    //set address
 006A 2224              clr R2
 006C 2882              std y+0,R2
 006E 2227              clr R18
 0070 3327              clr R19
 0072 042F              mov R16,R20
 0074 C5DF              xcall _rtc_write
 0076                   .dbline 36
 0076           ;       
 0076           ;       delay_nms(10);
 0076 0AE0              ldi R16,10
 0078 10E0              ldi R17,0
 007A 0E940000          xcall _delay_nms
 007E                   .dbline 38
 007E           ;       
 007E           ;       twi_start();
 007E 0E940000          xcall _twi_start
 0082                   .dbline 39
 0082           ;       delay_nms(10);
 0082 0AE0              ldi R16,10
 0084 10E0              ldi R17,0
 0086 0E940000          xcall _delay_nms
 008A                   .dbline 40
 008A           ;       twi_writebyte(DS1307_ADDR|TW_READ);
 008A 01ED              ldi R16,209
 008C 0E940000          xcall _twi_writebyte
 0090                   .dbline 41
 0090           ;       for(i=0;i<len-1;i++)
 0090 4427              clr R20
 0092 0CC0              xjmp L10
 0094           L7:
 0094                   .dbline 42
 0094                   .dbline 43
 0094 21E0              ldi R18,1
 0096 042F              mov R16,R20
 0098 1127              clr R17
 009A 0A0D              add R16,R10
 009C 1B1D              adc R17,R11
 009E 0E940000          xcall _twi_readbyte
 00A2                   .dbline 44
 00A2 0AE0              ldi R16,10
 00A4 10E0              ldi R17,0
 00A6 0E940000          xcall _delay_nms
 00AA                   .dbline 45
 00AA           L8:
 00AA                   .dbline 41
 00AA 4395              inc R20
 00AC           L10:
 00AC                   .dbline 41
 00AC 862F              mov R24,R22
 00AE 8150              subi R24,1
 00B0 4817              cp R20,R24
 00B2 80F3              brlo L7
 00B4                   .dbline 46
 00B4           ;       {
 00B4           ;          twi_readbyte(buf+i,TW_ACK);
 00B4           ;          delay_nms(10);
 00B4           ;       }
 00B4           ;       twi_readbyte(buf+i,TW_NACK);
 00B4 2227              clr R18
 00B6 042F              mov R16,R20
 00B8 1127              clr R17
 00BA 0A0D              add R16,R10
 00BC 1B1D              adc R17,R11
 00BE 0E940000          xcall _twi_readbyte
 00C2                   .dbline 47
 00C2           ;       delay_nms(10);
 00C2 0AE0              ldi R16,10
 00C4 10E0              ldi R17,0
 00C6 0E940000          xcall _delay_nms
 00CA                   .dbline 48
 00CA           ;       twi_stop();
 00CA 0E940000          xcall _twi_stop
 00CE                   .dbline 49
 00CE           ;       return 0;
 00CE 0027              clr R16
 00D0                   .dbline -2
 00D0           L6:
 00D0 2196              adiw R28,1
 00D2 0E940000          xcall pop_gset3
 00D6                   .dbline 0 ; func end
 00D6 0895              ret
 00D8                   .dbsym r i 20 c
 00D8                   .dbsym r len 22 c
 00D8                   .dbsym r buf 10 pc
 00D8                   .dbsym r addr 20 c
 00D8                   .dbend
 00D8                   .dbfunc e RtcUpdateData _RtcUpdateData fc
 00D8           ;            ret -> R20
 00D8           ;      direction -> R20
                        .even
 00D8           _RtcUpdateData::
 00D8 0E940000          xcall push_gset1
 00DC 402F              mov R20,R16
 00DE 2197              sbiw R28,1
 00E0                   .dbline -1
 00E0                   .dbline 59
 00E0           ; }
 00E0           ; /*************DS1307操作**************结束**************/
 00E0           ; 
 00E0           ; /*************接口部分****************开始**************/
 00E0           ; 
 00E0           ; 
 00E0           ; 
 00E0           ; //更新或读取DS1307日历/时间数据
 00E0           ; unsigned char RtcUpdateData(unsigned char direction)
 00E0           ; {
 00E0                   .dbline 61
 00E0           ;       unsigned char ret;
 00E0           ;       if(direction)          //读
 00E0 4423              tst R20
 00E2 41F0              breq L12
 00E4                   .dbline 62
 00E4           ;               ret=rtc_read(0,g_aTimeBuf,7);
 00E4 87E0              ldi R24,7
 00E6 8883              std y+0,R24
 00E8 20E0              ldi R18,<_g_aTimeBuf
 00EA 30E0              ldi R19,>_g_aTimeBuf
 00EC 0027              clr R16
 00EE B7DF              xcall _rtc_read
 00F0 402F              mov R20,R16
 00F2 07C0              xjmp L13
 00F4           L12:
 00F4                   .dbline 64
 00F4           ;       else                           //写
 00F4           ;               ret=rtc_write(0,g_aTimeBuf,7);  
 00F4 87E0              ldi R24,7
 00F6 8883              std y+0,R24
 00F8 20E0              ldi R18,<_g_aTimeBuf
 00FA 30E0              ldi R19,>_g_aTimeBuf
 00FC 0027              clr R16
 00FE 80DF              xcall _rtc_write
 0100 402F              mov R20,R16
 0102           L13:
 0102                   .dbline 66
 0102           ; 
 0102           ;       return ret;
 0102 042F              mov R16,R20
 0104                   .dbline -2
 0104           L11:
 0104 2196              adiw R28,1
 0106 0E940000          xcall pop_gset1
 010A                   .dbline 0 ; func end
 010A 0895              ret
 010C                   .dbsym r ret 20 c
 010C                   .dbsym r direction 20 c
 010C                   .dbend
 010C                   .dbfunc e RtcReadRAM _RtcReadRAM fc
 010C           ;            len -> y+5
 010C           ;            buf -> R22,R23
 010C           ;           addr -> R20
                        .even
 010C           _RtcReadRAM::
 010C 0E940000          xcall push_gset2
 0110 B901              movw R22,R18
 0112 402F              mov R20,R16
 0114 2197              sbiw R28,1
 0116                   .dbline -1
 0116                   .dbline 70
 0116           ; }
 0116           ; //读DS1307用户RAM
 0116           ; unsigned char RtcReadRAM(unsigned char addr,unsigned char *buf,unsigned char len)
 0116           ; {
 0116                   .dbline 71
 0116           ;       addr+=8;
 0116 485F              subi R20,248    ; addi 8
 0118                   .dbline 72
 0118           ;       return rtc_read(addr,buf,len);
 0118 0D80              ldd R0,y+5
 011A 0882              std y+0,R0
 011C 9B01              movw R18,R22
 011E 042F              mov R16,R20
 0120 9EDF              xcall _rtc_read
 0122                   .dbline -2
 0122           L14:
 0122 2196              adiw R28,1
 0124 0E940000          xcall pop_gset2
 0128                   .dbline 0 ; func end
 0128 0895              ret
 012A                   .dbsym l len 5 c
 012A                   .dbsym r buf 22 pc
 012A                   .dbsym r addr 20 c
 012A                   .dbend
 012A                   .dbfunc e RtcWriteRAM _RtcWriteRAM fc
 012A           ;            len -> y+5
 012A           ;            buf -> R22,R23
 012A           ;           addr -> R20
                        .even
 012A           _RtcWriteRAM::
 012A 0E940000          xcall push_gset2
 012E B901              movw R22,R18
 0130 402F              mov R20,R16
 0132 2197              sbiw R28,1
 0134                   .dbline -1
 0134                   .dbline 76
 0134           ; }
 0134           ; //写DS1307用户RAM
 0134           ; unsigned char RtcWriteRAM(unsigned char addr,unsigned char *buf,unsigned char len)
 0134           ; {

⌨️ 快捷键说明

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