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

📄 ds12887.lis

📁 高精度时钟芯片。avr驱动
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0180                   .dbline -1
 0180                   .dbline 172
 0180           ; /*******************************************
 0180           ; 函数名称: LCD1602_initial
 0180           ; 功    能: 1602液晶初始化
 0180           ; 参    数: 无
 0180           ; 返回值  : 无
 0180           ; /********************************************/
 0180           ; void LCD1602_initial(void)
 0180           ; {
 0180                   .dbline 173
 0180           ;       Delayms(100);                           //上电后等待内部复位
 0180 04E6              ldi R16,100
 0182 10E0              ldi R17,0
 0184 55DF              xcall _Delayms
 0186                   .dbline 174
 0186           ;       LCD1602_portini();                      //端口初始化
 0186 90DF              xcall _LCD1602_portini
 0188                   .dbline 176
 0188           ;       
 0188           ;       LCD1602_sendbyte(iCmd, LCDa_FUNCTION);  //功能、模式设定,具体的设定功能可以看C:\icc\include\AVR_PQ1A.H里面的常量定义
 0188 28E3              ldi R18,56
 018A 0027              clr R16
 018C ACDF              xcall _LCD1602_sendbyte
 018E           L37:
 018E                   .dbline 177
 018E           L38:
 018E                   .dbline 177
 018E           ;       while(LCD1602_readBF());                                //等待不忙为止
 018E D4DF              xcall _LCD1602_readBF
 0190 0023              tst R16
 0192 E9F7              brne L37
 0194                   .dbline 178
 0194           ;       LCD1602_sendbyte(iCmd, LCDa_ON);                //打开显示
 0194 2CE0              ldi R18,12
 0196 0027              clr R16
 0198 A6DF              xcall _LCD1602_sendbyte
 019A           L40:
 019A                   .dbline 179
 019A           L41:
 019A                   .dbline 179
 019A           ;       while(LCD1602_readBF());                                //等待不忙为止
 019A CEDF              xcall _LCD1602_readBF
 019C 0023              tst R16
 019E E9F7              brne L40
 01A0                   .dbline 180
 01A0           ;       LCD1602_clear();                                                //清屏
 01A0 C5DF              xcall _LCD1602_clear
 01A2           L43:
 01A2                   .dbline 181
 01A2           L44:
 01A2                   .dbline 181
 01A2           ;       while(LCD1602_readBF());                                //等待不忙为止
 01A2 CADF              xcall _LCD1602_readBF
 01A4 0023              tst R16
 01A6 E9F7              brne L43
 01A8                   .dbline 182
 01A8           ;       LCD1602_sendbyte(iCmd, LCDa_ENTRY);             //输入模式设定          
 01A8 26E0              ldi R18,6
 01AA 0027              clr R16
 01AC                   .dbline -2
 01AC                   .dbline 183
 01AC           ; }
 01AC           L36:
 01AC                   .dbline 0 ; func end
 01AC 9CCF              xjmp _LCD1602_sendbyte
 01AE                   .dbend
 01AE                   .dbfunc e write_ds _write_ds fV
 01AE           ;           date -> R20
 01AE           ;            add -> R22
                        .even
 01AE           _write_ds::
 01AE 0E940000          xcall push_gset2
 01B2 422F              mov R20,R18
 01B4 602F              mov R22,R16
 01B6                   .dbline -1
 01B6                   .dbline 186
 01B6           ; 
 01B6           ; void write_ds(uchar add,uchar date)
 01B6           ; {
 01B6                   .dbline 187
 01B6           ;    PORTC&=~BIT(RTC_CS);                 //选通时钟
 01B6 A898              cbi 0x15,0
 01B8                   .dbline 188
 01B8           ;    PORTD|=BIT(RTC_AS);
 01B8 959A              sbi 0x12,5
 01BA                   .dbline 189
 01BA           ;    PORTD|=BIT(RTC_DS);
 01BA 979A              sbi 0x12,7
 01BC                   .dbline 190
 01BC           ;    PORTD|=BIT(RTC_RW);   
 01BC 969A              sbi 0x12,6
 01BE                   .dbline 191
 01BE           ;    PORTA=add;
 01BE 6BBB              out 0x1b,R22
 01C0                   .dbline 192
 01C0           ;    Delayus(5);
 01C0 05E0              ldi R16,5
 01C2 10E0              ldi R17,0
 01C4 1DDF              xcall _Delayus
 01C6                   .dbline 193
 01C6           ;    PORTD&=~BIT(RTC_AS);                 //锁存地址
 01C6 9598              cbi 0x12,5
 01C8                   .dbline 194
 01C8           ;    PORTD&=~BIT(RTC_RW);                 
 01C8 9698              cbi 0x12,6
 01CA                   .dbline 195
 01CA           ;    PORTA=date;                                  
 01CA 4BBB              out 0x1b,R20
 01CC                   .dbline 196
 01CC           ;    Delayus(5);   
 01CC 05E0              ldi R16,5
 01CE 10E0              ldi R17,0
 01D0 17DF              xcall _Delayus
 01D2                   .dbline 197
 01D2           ;    PORTD|=BIT(RTC_RW);       //写数据  
 01D2 969A              sbi 0x12,6
 01D4                   .dbline 198
 01D4           ;    PORTD|=BIT(RTC_AS);
 01D4 959A              sbi 0x12,5
 01D6                   .dbline 199
 01D6           ;    PORTC|=BIT(RTC_CS);                                
 01D6 A89A              sbi 0x15,0
 01D8                   .dbline -2
 01D8                   .dbline 200
 01D8           ; }
 01D8           L46:
 01D8 0E940000          xcall pop_gset2
 01DC                   .dbline 0 ; func end
 01DC 0895              ret
 01DE                   .dbsym r date 20 c
 01DE                   .dbsym r add 22 c
 01DE                   .dbend
 01DE                   .dbfunc e read_ds _read_ds fc
 01DE           ;        ds_date -> R20
 01DE           ;            add -> R20
                        .even
 01DE           _read_ds::
 01DE 0E940000          xcall push_gset1
 01E2 402F              mov R20,R16
 01E4                   .dbline -1
 01E4                   .dbline 203
 01E4           ; 
 01E4           ; uchar read_ds(uchar add)
 01E4           ; {
 01E4                   .dbline 205
 01E4           ;    uchar ds_date;  
 01E4           ;    PORTC&=~BIT(RTC_CS);                       //选通时钟
 01E4 A898              cbi 0x15,0
 01E6                   .dbline 206
 01E6           ;    PORTD|=BIT(RTC_AS);
 01E6 959A              sbi 0x12,5
 01E8                   .dbline 207
 01E8           ;    PORTD|=BIT(RTC_DS);
 01E8 979A              sbi 0x12,7
 01EA                   .dbline 208
 01EA           ;    PORTD|=BIT(RTC_RW);
 01EA 969A              sbi 0x12,6
 01EC                   .dbline 210
 01EC           ; //   PORTC&=~BIT(RTC_CS);                     //选通时钟
 01EC           ;    PORTA=add;
 01EC 4BBB              out 0x1b,R20
 01EE                   .dbline 211
 01EE           ;    Delayus(5);
 01EE 05E0              ldi R16,5
 01F0 10E0              ldi R17,0
 01F2 06DF              xcall _Delayus
 01F4                   .dbline 212
 01F4           ;    PORTD&=~BIT(RTC_AS);                       //锁存地址   
 01F4 9598              cbi 0x12,5
 01F6                   .dbline 213
 01F6           ;    PORTD&=~BIT(RTC_DS);
 01F6 9798              cbi 0x12,7
 01F8                   .dbline 214
 01F8           ;    DDRA=0;
 01F8 2224              clr R2
 01FA 2ABA              out 0x1a,R2
 01FC                   .dbline 216
 01FC           ; //   PORTA=0XFF;
 01FC           ;    Delayus(5);
 01FC 05E0              ldi R16,5
 01FE 10E0              ldi R17,0
 0200 FFDE              xcall _Delayus
 0202                   .dbline 217
 0202           ;    ds_date=PINA;                              //读数据
 0202 49B3              in R20,0x19
 0204                   .dbline 218
 0204           ;    DDRA=0XFF;
 0204 8FEF              ldi R24,255
 0206 8ABB              out 0x1a,R24
 0208                   .dbline 219
 0208           ;    PORTD|=BIT(RTC_DS);
 0208 979A              sbi 0x12,7
 020A                   .dbline 220
 020A           ;    PORTD|=BIT(RTC_AS);
 020A 959A              sbi 0x12,5
 020C                   .dbline 221
 020C           ;    PORTC|=BIT(RTC_CS);         
 020C A89A              sbi 0x15,0
 020E                   .dbline 222
 020E           ;    return ds_date;    
 020E 042F              mov R16,R20
 0210                   .dbline -2
 0210           L47:
 0210 0E940000          xcall pop_gset1
 0214                   .dbline 0 ; func end
 0214 0895              ret
 0216                   .dbsym r ds_date 20 c
 0216                   .dbsym r add 20 c
 0216                   .dbend
 0216                   .dbfunc e StartDs12c887 _StartDs12c887 fV
                        .even
 0216           _StartDs12c887::
 0216                   .dbline -1
 0216                   .dbline 233
 0216           ; }
 0216           ; 
 0216           ; 
 0216           ; /************************************************************* 
 0216           ; 函数功能:该函数用来启动时钟芯片工作
 0216           ; 应用范围:仅在时钟芯片首次使用时用到一次
 0216           ; 入口参数:
 0216           ; 出口参数:
 0216           ; *************************************************************/   
 0216           ; void StartDs12c887(void)
 0216           ; {
 0216                   .dbline 234
 0216           ;    write_ds(chRegA,CMD_START_DS12C887);
 0216 20E2              ldi R18,32
 0218 0AE0              ldi R16,10
 021A                   .dbline -2
 021A                   .dbline 235
 021A           ; }
 021A           L48:
 021A                   .dbline 0 ; func end
 021A C9CF              xjmp _write_ds
 021C                   .dbend
 021C                   .dbfunc e CloseDs12c887 _CloseDs12c887 fV
                        .even
 021C           _CloseDs12c887::
 021C                   .dbline -1
 021C                   .dbline 244
 021C           ; 
 021C           ; /************************************************************* 
 021C           ; 函数功能:该函数用来关闭时钟芯片
 021C           ; 应用范围:一般用不到
 021C           ; 入口参数:
 021C           ; 出口参数:
 021C           ; *************************************************************/   
 021C           ; void CloseDs12c887(void)
 021C           ; {
 021C                   .dbline 245
 021C           ;    write_ds(chRegA,CMD_CLOSE_DS12C887);
 021C 20E3              ldi R18,48
 021E 0AE0              ldi R16,10
 0220                   .dbline -2
 0220                   .dbline 246
 0220           ; }
 0220           L49:
 0220                   .dbline 0 ; func end
 0220 C6CF              xjmp _write_ds
 0222                   .dbend
 0222                   .dbfunc e InitDs12c887 _InitDs12c887 fV
                        .even
 0222           _InitDs12c887::
 0222                   .dbline -1
 0222                   .dbline 254
 0222           ; /************************************************************* 
 0222           ; 函数功能:初始化ds12c887
 0222           ; 应用范围:
 0222           ; 入口参数:
 0222           ; 出口参数:
 0222           ; *************************************************************/   
 0222           ; void InitDs12c887()
 0222           ; {
 0222                   .dbline 255
 0222           ;     StartDs12c887();
 0222 F9DF              xcall _StartDs12c887
 0224                   .dbline 256
 0224           ;       write_ds(chRegB,chRegB | MASK_SETB_SET);/* 禁止刷新 */
 0224 2BE8              ldi R18,139
 0226 0BE0              ldi R16,11
 0228 C2DF              xcall _write_ds
 022A                   .dbline 257
 022A           ;       write_ds(chRegB,chRegB & MASK_CLR_DM | MASK_SETB_2412 & MASK_CLR_DSE);
 022A 2BE0              ldi R18,11
 022C 0BE0              ldi R16,11
 022E BFDF              xcall _write_ds
 0230                   .dbline 260
 0230           ;                             
 0230           ;                 /* 使用BCD码格式、24小时模式、不使用夏令时 */
 0230           ;       write_ds(chCenturyChannel,0x21);               /* 设置为21世纪 */
 0230 21E2              ldi R18,33
 0232 02E3              ldi R16,50
 0234 BCDF              xcall _write_ds
 0236                   .dbline 261
 0236           ;       write_ds(chRegB,chRegB & MASK_CLR_SET);
 0236 2BE0              ldi R18,11
 0238 0BE0              ldi R16,11
 023A                   .dbline -2
 023A                   .dbline 262
 023A           ; }
 023A           L50:
 023A                   .dbline 0 ; func end
 023A B9CF              xjmp _write_ds
 023C                   .dbend

⌨️ 快捷键说明

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