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

📄 rtc.lis

📁 在AVR开发板驱动时钟芯片DS1302
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 00EE 6623              tst R22
 00F0 11F4              brne L21
 00F2                   .dbline 57
 00F2 9498              cbi 0x12,4
 00F4 01C0              xjmp L22
 00F6           L21:
 00F6                   .dbline 59
 00F6 949A              sbi 0x12,4
 00F8           L22:
 00F8                   .dbline 61
 00F8 9598              cbi 0x12,5
 00FA                   .dbline 62
 00FA 969A              sbi 0x12,6
 00FC                   .dbline 63
 00FC 48BB              out 0x18,R20
 00FE                   .dbline 64
 00FE 01E0              ldi R16,1
 0100 10E0              ldi R17,0
 0102 96DF              xcall _Delayms
 0104                   .dbline 65
 0104 9698              cbi 0x12,6
 0106                   .dbline -2
 0106                   .dbline 66
 0106           L20:
 0106 0E940000          xcall pop_gset2
 010A                   .dbline 0 ; func end
 010A 0895              ret
 010C                   .dbsym r dByte 20 c
 010C                   .dbsym r DatCmd 22 c
 010C                   .dbend
 010C                   .dbfunc e LCD1602_sendstr _LCD1602_sendstr fV
 010C           ;       ptString -> R20,R21
                        .even
 010C           _LCD1602_sendstr::
 010C 0E940000          xcall push_gset1
 0110 A801              movw R20,R16
 0112                   .dbline -1
 0112                   .dbline 74
 0112 05C0              xjmp L25
 0114           L24:
 0114                   .dbline 76
 0114                   .dbline 77
 0114 FA01              movw R30,R20
 0116 2191              ld R18,Z+
 0118 AF01              movw R20,R30
 011A 01E0              ldi R16,1
 011C E4DF              xcall _LCD1602_sendbyte
 011E                   .dbline 78
 011E           L25:
 011E                   .dbline 75
 011E FA01              movw R30,R20
 0120 2080              ldd R2,z+0
 0122 2220              tst R2
 0124 B9F7              brne L24
 0126                   .dbline -2
 0126                   .dbline 79
 0126           L23:
 0126 0E940000          xcall pop_gset1
 012A                   .dbline 0 ; func end
 012A 0895              ret
 012C                   .dbsym r ptString 20 pc
 012C                   .dbend
 012C                   .dbfunc e LCD1602_clear _LCD1602_clear fV
                        .even
 012C           _LCD1602_clear::
 012C                   .dbline -1
 012C                   .dbline 87
 012C           ;                 data--要写入的地址
 012C           ; 返回值  : 无
 012C           ; /********************************************/
 012C                   .dbline 88
 012C           ; void DS1302_writeD(uchar addr,uchar data)
 012C 21E0              ldi R18,1
 012E 0027              clr R16
 0130 DADF              xcall _LCD1602_sendbyte
 0132                   .dbline 89
 0132           ; {
 0132 02E0              ldi R16,2
 0134 10E0              ldi R17,0
 0136                   .dbline -2
 0136                   .dbline 90
 0136           ;  PORTC&=~BIT(RTC_CS);  //拉低片选端
 0136           L27:
 0136                   .dbline 0 ; func end
 0136 7CCF              xjmp _Delayms
 0138                   .dbend
 0138                   .dbfunc e LCD1602_readBF _LCD1602_readBF fc
 0138           ;           busy -> R20
                        .even
 0138           _LCD1602_readBF::
 0138 0E940000          xcall push_gset1
 013C                   .dbline -1
 013C                   .dbline 98
 013C           ;  PORTB&=~BIT(RTC_CLK);         //拉低时钟端
 013C           ;  Delayus(10);
 013C           ;  PORTC|=BIT(RTC_CS);   //拉高片选端
 013C           ;  Delayus(10);                          //调整片选脉冲
 013C           ;  DS1302_writeB(addr);  //写入操作命令(地址)
 013C           ;  Delayus(10);
 013C           ;  PORTB&=~BIT(RTC_CLK);         //拉低时钟端
 013C           ;  Delayus(10);
 013C                   .dbline 100
 013C           ;  DS1302_writeB(data);  //写入数据
 013C           ;  PORTB&=~BIT(RTC_CLK);         //拉低时钟端
 013C 0027              clr R16
 013E BBDF              xcall _LCD1602_readbyte
 0140 402F              mov R20,R16
 0142                   .dbline 101
 0142           ;  Delayus(10);                  //调整片选脉冲
 0142 07FF              sbrs R16,7
 0144 02C0              rjmp L29
 0146                   .dbline 102
 0146           ;  PORTC&=~BIT(RTC_CS);  //拉低片选端
 0146 41E0              ldi R20,1
 0148 01C0              xjmp L30
 014A           L29:
 014A                   .dbline 104
 014A           ; }
 014A           ; /*******************************************
 014A 4427              clr R20
 014C           L30:
 014C                   .dbline 105
 014C           ; 函数名称: DS1302_readD
 014C 042F              mov R16,R20
 014E                   .dbline -2
 014E           L28:
 014E 0E940000          xcall pop_gset1
 0152                   .dbline 0 ; func end
 0152 0895              ret
 0154                   .dbsym r busy 20 c
 0154                   .dbend
 0154                   .dbfunc e LCD1602_gotoXY _LCD1602_gotoXY fV
 0154           ;            Col -> R20
 0154           ;            Row -> R22
                        .even
 0154           _LCD1602_gotoXY::
 0154 0E940000          xcall push_gset2
 0158 422F              mov R20,R18
 015A 602F              mov R22,R16
 015C                   .dbline -1
 015C                   .dbline 115
 015C           ; 功    能: 从DS1302的某个地址读出一个字节数据
 015C           ; 参    数: addr--地址值(寄存器或RAM)
 015C           ; 返回值  : data--读出的数据
 015C           ; /********************************************/
 015C           ; uchar DS1302_readD(uchar addr)
 015C           ; {
 015C           ;  uchar data;
 015C           ;  PORTC&=~BIT(RTC_CS);  //拉低片选端
 015C           ;  PORTB&=~BIT(RTC_CLK);         //拉低时钟端
 015C           ;  Delayus(10);
 015C                   .dbline 116
 015C           ;  PORTC|=BIT(RTC_CS);   //拉高片选端
 015C 7727              clr R23
 015E 6230              cpi R22,2
 0160 E0E0              ldi R30,0
 0162 7E07              cpc R23,R30
 0164 09F0              breq L35
 0166 05C0              xjmp L32
 0168           X0:
 0168                   .dbline 117
 0168           ;  Delayus(10);                          //调整片选脉冲
 0168           L35:
 0168                   .dbline 119
 0168           ;  DS1302_writeB(addr);  //写入操作命令(地址)
 0168           ;  Delayus(10);
 0168 242F              mov R18,R20
 016A 2054              subi R18,64    ; addi 192
 016C 0027              clr R16
 016E BBDF              xcall _LCD1602_sendbyte
 0170                   .dbline 119
 0170 04C0              xjmp L33
 0172           L32:
 0172                   .dbline 121
 0172 242F              mov R18,R20
 0174 2058              subi R18,128    ; addi 128
 0176 0027              clr R16
 0178 B6DF              xcall _LCD1602_sendbyte
 017A                   .dbline 121
 017A           L33:
 017A                   .dbline -2
 017A                   .dbline 123
 017A           ;  data=DS1302_readB();  //读出数据
 017A           ;  Delayus(10);
 017A           ;  PORTB&=~BIT(RTC_CLK);         //拉低时钟端
 017A           ;  PORTC&=~BIT(RTC_CS);          //拉低片选端
 017A           L31:
 017A 0E940000          xcall pop_gset2
 017E                   .dbline 0 ; func end
 017E 0895              ret
 0180                   .dbsym r Col 20 c
 0180                   .dbsym r Row 22 c
 0180                   .dbend
 0180                   .dbfunc e LCD1602_initial _LCD1602_initial fV
                        .even
 0180           _LCD1602_initial::
 0180                   .dbline -1
 0180                   .dbline 131
 0180           ;  return data;                  //返回读出的数据
 0180           ; }
 0180           ; /*******************************************
 0180           ; 函数名称: DS1302_setT
 0180           ; 功    能: 设置DS1302的时间
 0180           ; 参    数: ptTimeD--设置时间数组指针
 0180           ; 返回值  : 无
 0180           ; /********************************************/
 0180                   .dbline 132
 0180           ; void DS1302_setT(uchar ptTimeD[])
 0180 04E6              ldi R16,100
 0182 10E0              ldi R17,0
 0184 55DF              xcall _Delayms
 0186                   .dbline 133
 0186           ; {
 0186 90DF              xcall _LCD1602_portini
 0188                   .dbline 135
 0188           ;     uchar i;
 0188           ;     uchar addr = 0x80;                                  //写入地址从秒寄存器开始
 0188 28E3              ldi R18,56
 018A 0027              clr R16
 018C ACDF              xcall _LCD1602_sendbyte
 018E           L37:
 018E                   .dbline 136
 018E           L38:
 018E                   .dbline 136
 018E           ;     DS1302_writeD(C_WP|WR,UPROTECT); //控制命令,WP位为0,允许写操作
 018E D4DF              xcall _LCD1602_readBF
 0190 0023              tst R16
 0192 E9F7              brne L37
 0194                   .dbline 137
 0194           ;       Delayms(5);
 0194 2CE0              ldi R18,12
 0196 0027              clr R16
 0198 A6DF              xcall _LCD1602_sendbyte
 019A           L40:
 019A                   .dbline 138
 019A           L41:
 019A                   .dbline 138
 019A           ;     for(i=0;i<7;i++)
 019A CEDF              xcall _LCD1602_readBF
 019C 0023              tst R16
 019E E9F7              brne L40
 01A0                   .dbline 139
 01A0           ;     {
 01A0 C5DF              xcall _LCD1602_clear
 01A2           L43:
 01A2                   .dbline 140
 01A2           L44:
 01A2                   .dbline 140
 01A2           ;         DS1302_writeD(addr|WR,ptTimeD[i]);   // 秒 分 时 日 月 星期 年         
 01A2 CADF              xcall _LCD1602_readBF
 01A4 0023              tst R16
 01A6 E9F7              brne L43
 01A8                   .dbline 141
 01A8           ;         addr+=2;
 01A8 26E0              ldi R18,6
 01AA 0027              clr R16
 01AC                   .dbline -2
 01AC                   .dbline 142
 01AC           ;               Delayms(1);
 01AC           L36:
 01AC                   .dbline 0 ; func end
 01AC 9CCF              xjmp _LCD1602_sendbyte
 01AE                   .dbend
 01AE                   .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\17_RTC/MKEY.C
 01AE                   .dbfunc e Mkey_press _Mkey_press fc
 01AE           ;        pressed -> R16
                        .even
 01AE           _Mkey_press::
 01AE                   .dbline -1
 01AE                   .dbline 20
 01AE                   .dbline 22
 01AE 8FEF              ldi R24,255
 01B0 81BB              out 0x11,R24
 01B2                   .dbline 23
 01B2 80EF              ldi R24,240
 01B4 82BB              out 0x12,R24
 01B6                   .dbline 24
 01B6 81BB              out 0x11,R24
 01B8                   .dbline 25
 01B8 80B3              in R24,0x10
 01BA 803F              cpi R24,240
 01BC 11F0              breq L47
 01BE                   .dbline 26
 01BE 01E0              ldi R16,1
 01C0 01C0              xjmp L48
 01C2           L47:
 01C2                   .dbline 28
 01C2 0027              clr R16
 01C4           L48:
 01C4                   .dbline 29
 01C4 8FEF              ldi R24,255
 01C6 81BB              out 0x11,R24
 01C8                   .dbline 30
 01C8                   .dbline -2
 01C8           L46:
 01C8                   .dbline 0 ; func end
 01C8 0895              ret
 01CA                   .dbsym r pressed 16 c
 01CA                   .dbend
 01CA                   .dbfunc e Mkey_scan _Mkey_scan fc
 01CA           ;        keycode -> R20
 01CA           ;              i -> R10
                        .even
 01CA           _Mkey_scan::
 01CA 0E940000          xcall push_gset3
 01CE                   .dbline -1
 01CE                   .dbline 39
 01CE                   .dbline 40
 01CE 8FE7              ldi R24,127
 01D0 A82E              mov R10,R24
 01D2                   .dbline 40
 01D2 4FEF              ldi R20,255
 01D4                   .dbline 41
 01D4 0FE0              ldi R16,15
 01D6 10E0              ldi R17,0
 01D8 2BDF              xcall _Delayms
 01DA                   .dbline 42
 01DA E9DF              xcall _Mkey_press
 01DC 0130              cpi R16,1
 01DE 09F0              breq X2
 01E0 92C0              xjmp L50
 01E2           X2:
 01E2                   .dbline 43
 01E2           L52:
 01E2                   .dbline 45
 01E2                   .dbline 46
 01E2 2A2C              mov R2,R10
 01E4 2694              lsr R2
 01E6 2694              lsr R2
 01E8 2694              lsr R2

⌨️ 快捷键说明

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