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

📄 rtc.lis

📁 在AVR开发板驱动时钟芯片DS1302
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 035A                   .dbline 67
 035A C798              cbi 0x18,7
 035C                   .dbline 68
 035C 0AE0              ldi R16,10
 035E 10E0              ldi R17,0
 0360 4FDE              xcall _Delayus
 0362                   .dbline 69
 0362 B59B              sbis 0x16,5
 0364 02C0              rjmp L93
 0366                   .dbline 70
 0366                   .dbline 71
 0366 6068              ori R22,128
 0368                   .dbline 72
 0368 01C0              xjmp L94
 036A           L93:
 036A                   .dbline 74
 036A                   .dbline 75
 036A 6F77              andi R22,127
 036C                   .dbline 76
 036C           L94:
 036C                   .dbline 77
 036C           L90:
 036C                   .dbline 62
 036C 4395              inc R20
 036E           L92:
 036E                   .dbline 62
 036E 4830              cpi R20,8
 0370 78F3              brlo L89
 0372                   .dbline 78
 0372 BD9A              sbi 0x17,5
 0374                   .dbline 79
 0374 062F              mov R16,R22
 0376                   .dbline -2
 0376           L88:
 0376 0E940000          xcall pop_gset2
 037A                   .dbline 0 ; func end
 037A 0895              ret
 037C                   .dbsym r i 20 c
 037C                   .dbsym r byte 22 c
 037C                   .dbend
 037C                   .dbfunc e DS1302_writeD _DS1302_writeD fV
 037C           ;           data -> R20
 037C           ;           addr -> R22
                        .even
 037C           _DS1302_writeD::
 037C 0E940000          xcall push_gset2
 0380 422F              mov R20,R18
 0382 602F              mov R22,R16
 0384                   .dbline -1
 0384                   .dbline 89
 0384                   .dbline 90
 0384 AF98              cbi 0x15,7
 0386                   .dbline 91
 0386 C798              cbi 0x18,7
 0388                   .dbline 92
 0388 0AE0              ldi R16,10
 038A 10E0              ldi R17,0
 038C 39DE              xcall _Delayus
 038E                   .dbline 93
 038E AF9A              sbi 0x15,7
 0390                   .dbline 94
 0390 0AE0              ldi R16,10
 0392 10E0              ldi R17,0
 0394 35DE              xcall _Delayus
 0396                   .dbline 95
 0396 062F              mov R16,R22
 0398 BEDF              xcall _DS1302_writeB
 039A                   .dbline 96
 039A 0AE0              ldi R16,10
 039C 10E0              ldi R17,0
 039E 30DE              xcall _Delayus
 03A0                   .dbline 97
 03A0 C798              cbi 0x18,7
 03A2                   .dbline 98
 03A2 0AE0              ldi R16,10
 03A4 10E0              ldi R17,0
 03A6 2CDE              xcall _Delayus
 03A8                   .dbline 99
 03A8 042F              mov R16,R20
 03AA B5DF              xcall _DS1302_writeB
 03AC                   .dbline 100
 03AC C798              cbi 0x18,7
 03AE                   .dbline 101
 03AE 0AE0              ldi R16,10
 03B0 10E0              ldi R17,0
 03B2 26DE              xcall _Delayus
 03B4                   .dbline 102
 03B4 AF98              cbi 0x15,7
 03B6                   .dbline -2
 03B6                   .dbline 103
 03B6           L95:
 03B6 0E940000          xcall pop_gset2
 03BA                   .dbline 0 ; func end
 03BA 0895              ret
 03BC                   .dbsym r data 20 c
 03BC                   .dbsym r addr 22 c
 03BC                   .dbend
 03BC                   .dbfunc e DS1302_readD _DS1302_readD fc
 03BC           ;           data -> R20
 03BC           ;           addr -> R20
                        .even
 03BC           _DS1302_readD::
 03BC 0E940000          xcall push_gset1
 03C0 402F              mov R20,R16
 03C2                   .dbline -1
 03C2                   .dbline 111
 03C2                   .dbline 113
 03C2 AF98              cbi 0x15,7
 03C4                   .dbline 114
 03C4 C798              cbi 0x18,7
 03C6                   .dbline 115
 03C6 0AE0              ldi R16,10
 03C8 10E0              ldi R17,0
 03CA 1ADE              xcall _Delayus
 03CC                   .dbline 116
 03CC AF9A              sbi 0x15,7
 03CE                   .dbline 117
 03CE 0AE0              ldi R16,10
 03D0 10E0              ldi R17,0
 03D2 16DE              xcall _Delayus
 03D4                   .dbline 118
 03D4 042F              mov R16,R20
 03D6 9FDF              xcall _DS1302_writeB
 03D8                   .dbline 119
 03D8 0AE0              ldi R16,10
 03DA 10E0              ldi R17,0
 03DC 11DE              xcall _Delayus
 03DE                   .dbline 120
 03DE B1DF              xcall _DS1302_readB
 03E0 402F              mov R20,R16
 03E2                   .dbline 121
 03E2 0AE0              ldi R16,10
 03E4 10E0              ldi R17,0
 03E6 0CDE              xcall _Delayus
 03E8                   .dbline 122
 03E8 C798              cbi 0x18,7
 03EA                   .dbline 123
 03EA AF98              cbi 0x15,7
 03EC                   .dbline 124
 03EC 042F              mov R16,R20
 03EE                   .dbline -2
 03EE           L96:
 03EE 0E940000          xcall pop_gset1
 03F2                   .dbline 0 ; func end
 03F2 0895              ret
 03F4                   .dbsym r data 20 c
 03F4                   .dbsym r addr 20 c
 03F4                   .dbend
 03F4                   .dbfunc e DS1302_setT _DS1302_setT fV
 03F4           ;           addr -> R20
 03F4           ;              i -> R22
 03F4           ;        ptTimeD -> R10,R11
                        .even
 03F4           _DS1302_setT::
 03F4 0E940000          xcall push_gset3
 03F8 5801              movw R10,R16
 03FA                   .dbline -1
 03FA                   .dbline 133
 03FA                   .dbline 135
 03FA 40E8              ldi R20,128
 03FC                   .dbline 136
 03FC 2227              clr R18
 03FE 0EE8              ldi R16,142
 0400 BDDF              xcall _DS1302_writeD
 0402                   .dbline 137
 0402 05E0              ldi R16,5
 0404 10E0              ldi R17,0
 0406 14DE              xcall _Delayms
 0408                   .dbline 138
 0408 6627              clr R22
 040A 0CC0              xjmp L101
 040C           L98:
 040C                   .dbline 139
 040C                   .dbline 140
 040C E62F              mov R30,R22
 040E FF27              clr R31
 0410 EA0D              add R30,R10
 0412 FB1D              adc R31,R11
 0414 2081              ldd R18,z+0
 0416 042F              mov R16,R20
 0418 B1DF              xcall _DS1302_writeD
 041A                   .dbline 141
 041A 4E5F              subi R20,254    ; addi 2
 041C                   .dbline 142
 041C 01E0              ldi R16,1
 041E 10E0              ldi R17,0
 0420 07DE              xcall _Delayms
 0422                   .dbline 143
 0422           L99:
 0422                   .dbline 138
 0422 6395              inc R22
 0424           L101:
 0424                   .dbline 138
 0424 6730              cpi R22,7
 0426 90F3              brlo L98
 0428                   .dbline 144
 0428           ;     }
 0428           ;     DS1302_writeD(C_WP|WR,PROTECT);           //控制命令,WP位为1,不允许写操作
 0428 20E8              ldi R18,128
 042A 0EE8              ldi R16,142
 042C A7DF              xcall _DS1302_writeD
 042E                   .dbline -2
 042E                   .dbline 145
 042E           ; }
 042E           L97:
 042E 0E940000          xcall pop_gset3
 0432                   .dbline 0 ; func end
 0432 0895              ret
 0434                   .dbsym r addr 20 c
 0434                   .dbsym r i 22 c
 0434                   .dbsym r ptTimeD 10 pc
 0434                   .dbend
 0434                   .dbfunc e DS1302_getT _DS1302_getT fV
 0434           ;           addr -> R20
 0434           ;              i -> R22
 0434           ;           time -> R10,R11
                        .even
 0434           _DS1302_getT::
 0434 0E940000          xcall push_gset3
 0438 5801              movw R10,R16
 043A                   .dbline -1
 043A                   .dbline 153
 043A           ; /*******************************************
 043A           ; 函数名称: DS1302_getT
 043A           ; 功    能: 读取DS1302的当前时间
 043A           ; 参    数: time[]--读取的时间数组
 043A           ; 返回值  : 无
 043A           ; /********************************************/
 043A           ; void DS1302_getT(uchar time[])
 043A           ; {
 043A                   .dbline 155
 043A           ;     uchar i;
 043A           ;     uchar addr = 0x80;                                                  //读取地址从秒寄存器开始 
 043A 40E8              ldi R20,128
 043C                   .dbline 156
 043C           ;     for(i=0;i<7;i++)
 043C 6627              clr R22
 043E 0AC0              xjmp L106
 0440           L103:
 0440                   .dbline 157
 0440                   .dbline 158
 0440 042F              mov R16,R20
 0442 0160              ori R16,1
 0444 BBDF              xcall _DS1302_readD
 0446 E62F              mov R30,R22
 0448 FF27              clr R31
 044A EA0D              add R30,R10
 044C FB1D              adc R31,R11
 044E 0083              std z+0,R16
 0450                   .dbline 159
 0450 4E5F              subi R20,254    ; addi 2
 0452                   .dbline 160
 0452           L104:
 0452                   .dbline 156
 0452 6395              inc R22
 0454           L106:
 0454                   .dbline 156
 0454 6730              cpi R22,7
 0456 A0F3              brlo L103
 0458                   .dbline 161
 0458           ;     {
 0458           ;         time[i]=DS1302_readD(addr|RD);    // 秒 分 时 日 月 星期 年        
 0458           ;         addr+=2;
 0458           ;     }
 0458           ;     PORTB&=~BIT(RTC_CLK);                                       //拉低时钟端(时钟端在不操作时为低)
 0458 C798              cbi 0x18,7
 045A                   .dbline -2
 045A                   .dbline 162
 045A           ; }
 045A           L102:
 045A 0E940000          xcall pop_gset3
 045E                   .dbline 0 ; func end
 045E 0895              ret
 0460                   .dbsym r addr 20 c
 0460                   .dbsym r i 22 c
 0460                   .dbsym r time 10 pc
 0460                   .dbend
 0460                   .dbfunc e DS1302_check _DS1302_check fc
 0460           ;          exist -> R20
                        .even
 0460           _DS1302_check::
 0460 0E940000          xcall push_gset1
 0464                   .dbline -1
 0464                   .dbline 170
 0464           ; /*******************************************
 0464           ; 函数名称: DS1302_check
 0464           ; 功    能: 检测DS1302是否正常工作
 0464           ; 参    数: 无
 0464           ; 返回值  : exist--为TRUE为检测到DS1302,为FALSE为没检测到
 0464           ; /********************************************/
 0464           ; uchar DS1302_check(void)
 0464           ; {
 0464                   .dbline 172
 0464           ;       uchar exist;
 0464           ;     DS1302_writeD(C_WP|WR,UPROTECT);            //写入写允许命令
 0464 2227              clr R18
 0466 0EE8              ldi R16,142
 0468 89DF              xcall _DS1302_writeD
 046A                   .dbline 173
 046A           ;     DS1302_writeD(C_RAMBASE|WR,0xA5);           //RAM0写入0xA5
 046A 25EA              ldi R18,165
 046C 00EC              ldi R16,192
 046E 86DF              xcall _DS1302_writeD
 0470                   .dbline 174
 0470           ;     exist=DS1302_readD(C_RAMBASE|RD);           //读取RAM0
 0470 01EC              ldi R16,193
 0472 A4DF              xcall _DS1302_readD
 0474 402F              mov R20,R16
 0476                   .dbline 175
 0476           ;     if(exist==0xA5)   
 0476 053A              cpi R16,165
 0478 11F4              brne L108
 047A                   .dbline 176
 047A           ;       {
 047A                   .dbline 177
 047A           ;        exist=TRUE;                                                      //如果读取值与写入值相等,返回TRUE
 047A 41E0              ldi R20,1
 047C                   .dbline 178
 047C           ;       }
 047C 01C0              xjmp L109
 047E           L108:
 047E                   .dbline 180
 047E           ;     else      
 047E           ;       {
 047E                   .dbline 181
 047E           ;        exist=FALSE;                                                     //如果读取值与写入值不相等,返回FALSE
 047E 4427              clr R20
 0480                   .dbline 182
 0480           ;       }       
 0480           L109:

⌨️ 快捷键说明

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