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

📄 ds1302.lis

📁 时钟芯片将给显示时间
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0280           ;          ptasc -> R18,R19
 0280           ;            BCD -> R16
                        .even
 0280           _BCD_ASCII::
 0280                   .dbline -1
 0280                   .dbline 252
 0280           ; }
 0280           ; /*******************************************
 0280           ; 函数名称: BCD_ASCII
 0280           ; 功    能: 将压缩BCD码转换成ascii码
 0280           ; 参    数: BCD--将要转换的压缩BCD码
 0280           ;                 ptasc--转换后的ASCII码数组指针
 0280           ; 返回值  : 无
 0280           ; /********************************************/
 0280           ; void BCD_ASCII(uchar BCD,uchar ptasc[])
 0280           ; {     
 0280                   .dbline 253
 0280           ;       ptasc[0]=BCD/16|0x30;   //0X58  35  38 //转换十位
 0280 802F              mov R24,R16
 0282 8295              swap R24
 0284 8F70              andi R24,#0x0F
 0286 8063              ori R24,48
 0288 F901              movw R30,R18
 028A 8083              std z+0,R24
 028C                   .dbline 254
 028C           ;       ptasc[1]=BCD&0x0F|0x30;  //转换个位
 028C 802F              mov R24,R16
 028E 8F70              andi R24,15
 0290 8063              ori R24,48
 0292 8183              std z+1,R24
 0294                   .dbline -2
 0294           L56:
 0294                   .dbline 0 ; func end
 0294 0895              ret
 0296                   .dbsym r ptasc 18 pc
 0296                   .dbsym r BCD 16 c
 0296                   .dbend
 0296                   .dbfunc e Disp_time _Disp_time fV
 0296           ;             dm -> y+0
 0296           ;              n -> R20
 0296           ;              m -> R22
 0296           ;              i -> R10
 0296           ;           time -> R20,R21
                        .even
 0296           _Disp_time::
 0296 0E940000          xcall push_gset3
 029A A801              movw R20,R16
 029C 2897              sbiw R28,8
 029E                   .dbline -1
 029E                   .dbline 263
 029E           ; }
 029E           ; /*******************************************
 029E           ; 函数名称: Disp_time
 029E           ; 功    能: 在1602液晶上显示当前时间(第1行格式:年-月-日 星期;第2行格式:时-分-秒)
 029E           ; 参    数: time[]--时间数组
 029E           ; 返回值  : 无
 029E           ; /********************************************/
 029E           ; void Disp_time(uchar time[])
 029E           ; { uint dm[4];
 029E                   .dbline 267
 029E           ;   uchar i,m,n;
 029E           ;   
 029E           ;   
 029E           ;   m=(uint)time[0];
 029E FA01              movw R30,R20
 02A0 6081              ldd R22,z+0
 02A2                   .dbline 268
 02A2           ;   n=(uint)time[1];
 02A2 4181              ldd R20,z+1
 02A4                   .dbline 270
 02A4           ;  
 02A4           ;   for(i=1;i<3;i++)
 02A4 AA24              clr R10
 02A6 A394              inc R10
 02A8 16C0              xjmp L61
 02AA           L58:
 02AA                   .dbline 271
 02AA                   .dbline 271
 02AA 14E0              ldi R17,4
 02AC 1A19              sub R17,R10
 02AE 02E0              ldi R16,2
 02B0 0102              muls R16,R17
 02B2 F001              movw R30,R0
 02B4 CE01              movw R24,R28
 02B6 E80F              add R30,R24
 02B8 F91F              adc R31,R25
 02BA 2AE0              ldi R18,10
 02BC 30E0              ldi R19,0
 02BE 062F              mov R16,R22
 02C0 1127              clr R17
 02C2 0E940000          xcall mod16s
 02C6 1183              std z+1,R17
 02C8 0083              std z+0,R16
 02CA                   .dbline 272
 02CA 1AE0              ldi R17,10
 02CC 062F              mov R16,R22
 02CE 0E940000          xcall div8u
 02D2 602F              mov R22,R16
 02D4                   .dbline 273
 02D4           L59:
 02D4                   .dbline 270
 02D4 A394              inc R10
 02D6           L61:
 02D6                   .dbline 270
 02D6 8A2D              mov R24,R10
 02D8 8330              cpi R24,3
 02DA 38F3              brlo L58
 02DC                   .dbline 274
 02DC           ;       { dm[4-i]=m%10;
 02DC           ;          m=m/10;
 02DC           ;        }
 02DC           ;      for(i=3;i<5;i++)
 02DC 83E0              ldi R24,3
 02DE A82E              mov R10,R24
 02E0 16C0              xjmp L65
 02E2           L62:
 02E2                   .dbline 275
 02E2                   .dbline 275
 02E2 14E0              ldi R17,4
 02E4 1A19              sub R17,R10
 02E6 02E0              ldi R16,2
 02E8 0102              muls R16,R17
 02EA F001              movw R30,R0
 02EC CE01              movw R24,R28
 02EE E80F              add R30,R24
 02F0 F91F              adc R31,R25
 02F2 2AE0              ldi R18,10
 02F4 30E0              ldi R19,0
 02F6 042F              mov R16,R20
 02F8 1127              clr R17
 02FA 0E940000          xcall mod16s
 02FE 1183              std z+1,R17
 0300 0083              std z+0,R16
 0302                   .dbline 276
 0302 1AE0              ldi R17,10
 0304 042F              mov R16,R20
 0306 0E940000          xcall div8u
 030A 402F              mov R20,R16
 030C                   .dbline 277
 030C           L63:
 030C                   .dbline 274
 030C A394              inc R10
 030E           L65:
 030E                   .dbline 274
 030E 8A2D              mov R24,R10
 0310 8530              cpi R24,5
 0312 38F3              brlo L62
 0314                   .dbline 278
 0314           ;       { dm[4-i]=n%10;
 0314           ;         n=n/10;
 0314           ;        }
 0314           ;     for(i=0;i<4;i++)
 0314 AA24              clr R10
 0316 0CC0              xjmp L69
 0318           L66:
 0318                   .dbline 279
 0318                   .dbline 279
 0318 2A2D              mov R18,R10
 031A 82E0              ldi R24,2
 031C 8A9D              mul R24,R10
 031E F001              movw R30,R0
 0320 CE01              movw R24,R28
 0322 E80F              add R30,R24
 0324 F91F              adc R31,R25
 0326 0081              ldd R16,z+0
 0328 81DE              xcall _show
 032A                   .dbline 281
 032A 8FEF              ldi R24,255
 032C 82BB              out 0x12,R24
 032E                   .dbline 282
 032E           L67:
 032E                   .dbline 278
 032E A394              inc R10
 0330           L69:
 0330                   .dbline 278
 0330 8A2D              mov R24,R10
 0332 8430              cpi R24,4
 0334 88F3              brlo L66
 0336                   .dbline -2
 0336           L57:
 0336 2896              adiw R28,8
 0338 0E940000          xcall pop_gset3
 033C                   .dbline 0 ; func end
 033C 0895              ret
 033E                   .dbsym l dm 0 A[8:4]i
 033E                   .dbsym r n 20 c
 033E                   .dbsym r m 22 c
 033E                   .dbsym r i 10 c
 033E                   .dbsym r time 20 pc
 033E                   .dbend
                        .area lit(rom, con, rel)
 0020           L71:
 0020 5950              .byte 'Y,'P
 0022           L72:
 0022 0000              .byte 0,0
                        .area text(rom, con, rel)
 033E                   .dbfile D:\卜凡涛单片机\卜凡涛做板\DS1302\DS1302.c
 033E                   .dbfunc e main _main fV
 033E           ;          shift -> <dead>
 033E           ;         setdat -> <dead>
 033E           ;         setadd -> <dead>
 033E           ;        settime -> y+2
 033E           ;        gettime -> y+0
                        .even
 033E           _main::
 033E 2497              sbiw R28,4
 0340                   .dbline -1
 0340                   .dbline 294
 0340           ;       { show(dm[i],i);
 0340           ;        
 0340           ;               PORTD=0XFF;
 0340           ;        }
 0340           ;   
 0340           ;   
 0340           ;   
 0340           ; }
 0340           ; /*******************************************
 0340           ; 函数名称: main
 0340           ; 功    能: 1. 在1602液晶上显示当前时间 2.可以设置时间(M1-M9为数字0-9,M13为设置模式和显示模式选择,M14为当前设置位选择)
 0340           ; 参    数: 无
 0340           ; 返回值  : 无
 0340           ; /********************************************/
 0340           ; void main(void)
 0340           ; {
 0340                   .dbline 301
 0340           ;       
 0340           ;       
 0340           ;       uchar setadd,setdat,shift;        //setadd指定将当前数值送入DS1302的哪个寄存器
 0340           ;                                                         //setdat是当前设置的数值,即被送入DS1302指定寄存器的数
 0340           ;                                                         //shift来实现十位和各位的设置相互独立(因为十位和个位是在一个寄存器里的)
 0340           ;  //uchar dis_x,dis_y;                   //存储1602液晶当前光标的位置
 0340           ;  uchar settime[2]={0X59,0X50};//设置的秒,分,时,日,月,星期,年
 0340 80E0              ldi R24,<L71
 0342 90E0              ldi R25,>L71
 0344 FE01              movw R30,R28
 0346 3296              adiw R30,2
 0348 02E0              ldi R16,2
 034A 10E0              ldi R17,0
 034C FA93              st -y,R31
 034E EA93              st -y,R30
 0350 9A93              st -y,R25
 0352 8A93              st -y,R24
 0354 0E940000          xcall asgncblk
 0358                   .dbline 302
 0358           ;  uchar gettime[2]={0X00,0X00};//保存当前时间的数组
 0358 80E0              ldi R24,<L72
 035A 90E0              ldi R25,>L72
 035C FE01              movw R30,R28
 035E 02E0              ldi R16,2
 0360 10E0              ldi R17,0
 0362 FA93              st -y,R31
 0364 EA93              st -y,R30
 0366 9A93              st -y,R25
 0368 8A93              st -y,R24
 036A 0E940000          xcall asgncblk
 036E                   .dbline 304
 036E           ;  //LCD1602_initial();                 //初始化1602液晶
 036E           ;  DS1302_portinit();                   //初始化DS1302的三根数据线
 036E AFDE              xcall _DS1302_portinit
 0370                   .dbline 305
 0370           ;  DS1302_init();                               //启动振荡器,DS1302开始工作 
 0370 7DDF              xcall _DS1302_init
 0372                   .dbline 306
 0372           ;  DS1302_setT(settime);                //设置初始时间
 0372 8E01              movw R16,R28
 0374 0E5F              subi R16,254  ; offset = 2
 0376 1F4F              sbci R17,255
 0378 28DF              xcall _DS1302_setT
 037A 04C0              xjmp L74
 037C           L73:
 037C                   .dbline 310
 037C                   .dbline 311
 037C 8E01              movw R16,R28
 037E 45DF              xcall _DS1302_getT
 0380                   .dbline 313
 0380 8E01              movw R16,R28
 0382 89DF              xcall _Disp_time
 0384                   .dbline 314
 0384           L74:
 0384                   .dbline 309
 0384 FBCF              xjmp L73
 0386           X0:
 0386                   .dbline -2
 0386           L70:
 0386 2496              adiw R28,4
 0388                   .dbline 0 ; func end
 0388 0895              ret
 038A                   .dbsym l shift 1 c
 038A                   .dbsym l setdat 1 c
 038A                   .dbsym l setadd 1 c
 038A                   .dbsym l settime 2 A[2:2]c
 038A                   .dbsym l gettime 0 A[2:2]c
 038A                   .dbend

⌨️ 快捷键说明

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