📄 ds12887.lis
字号:
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 + -