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

📄 pcf8563_test.lis

📁 pcf8563开发
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 02C0           ;  waitack();                                             //等待启动完成
 02C0           L63:
 02C0                   .dbline 44
 02C0           L64:
 02C0                   .dbline 44
 02C0 26B6              in R2,0x36
 02C2 27FE              sbrs R2,7
 02C4 FDCF              rjmp L63
 02C6           X15:
 02C6                   .dbline 44
 02C6                   .dbline 44
 02C6                   .dbline 45
 02C6           ;  if(chkack()!=RESTART)return I2C_ERR;   //检查是否启动成功
 02C6 81B1              in R24,0x1
 02C8 887F              andi R24,248
 02CA 8031              cpi R24,16
 02CC 11F0              breq L66
 02CE           X16:
 02CE                   .dbline 45
 02CE 0027              clr R16
 02D0 3CC0              xjmp L57
 02D2           L66:
 02D2                   .dbline 46
 02D2           ;  write_tim(PCF8563_SLA_R);                              //发送读地址
 02D2 03EA              ldi R16,163
 02D4 C7DF              xcall _write_tim
 02D6                   .dbline 48
 02D6           ;       
 02D6           ;  timer[0]=read_tim()&0x7F;              //读出秒数据
 02D6 D4DF              xcall _read_tim
 02D8 802F              mov R24,R16
 02DA 8F77              andi R24,127
 02DC 80930000          sts _timer,R24
 02E0                   .dbline 49
 02E0           ;  timer[1]=read_tim()&0x7F;              //读出分数据
 02E0 CFDF              xcall _read_tim
 02E2 802F              mov R24,R16
 02E4 8F77              andi R24,127
 02E6 80930100          sts _timer+1,R24
 02EA                   .dbline 50
 02EA           ;  timer[2]=read_tim()&0x3F;              //读出时数据
 02EA CADF              xcall _read_tim
 02EC 402F              mov R20,R16
 02EE 842F              mov R24,R20
 02F0 8F73              andi R24,63
 02F2 80930200          sts _timer+2,R24
 02F6                   .dbline 51
 02F6           ;  timer[3]=read_tim()&0x3F;              //读出日数据
 02F6 C4DF              xcall _read_tim
 02F8 402F              mov R20,R16
 02FA 842F              mov R24,R20
 02FC 8F73              andi R24,63
 02FE 80930300          sts _timer+3,R24
 0302                   .dbline 52
 0302           ;  timer[4]=read_tim()&0x07;              //读出周数据
 0302 BEDF              xcall _read_tim
 0304 402F              mov R20,R16
 0306 842F              mov R24,R20
 0308 8770              andi R24,7
 030A 80930400          sts _timer+4,R24
 030E                   .dbline 53
 030E           ;  if(timer[4]==0)timer[4]=7;
 030E 8823              tst R24
 0310 19F4              brne L72
 0312           X17:
 0312                   .dbline 53
 0312 87E0              ldi R24,7
 0314 80930400          sts _timer+4,R24
 0318           L72:
 0318                   .dbline 54
 0318           ;  timer[5]=read_tim();                   //读出月数据
 0318 B3DF              xcall _read_tim
 031A A02E              mov R10,R16
 031C A0920500          sts _timer+5,R10
 0320                   .dbline 55
 0320           ;  if((timer[5]&0x80)==0)
 0320 07FD              sbrc R16,7
 0322 04C0              rjmp L77
 0324           X18:
 0324                   .dbline 56
 0324           ;   timer[7]=0x20;                        //世纪位为0,是21世纪
 0324 80E2              ldi R24,32
 0326 80930700          sts _timer+7,R24
 032A 03C0              xjmp L78
 032C           L77:
 032C                   .dbline 58
 032C           ;  else 
 032C           ;   timer[7]=0x19;                        //世纪位不为0,是20世纪
 032C 89E1              ldi R24,25
 032E 80930700          sts _timer+7,R24
 0332           L78:
 0332                   .dbline 59
 0332           ;  timer[5]=timer[5]&0x1F;
 0332 80910500          lds R24,_timer+5
 0336 8F71              andi R24,31
 0338 80930500          sts _timer+5,R24
 033C                   .dbline 60
 033C           ;  timer[6]=read_tim();                   //读出年数据
 033C A1DF              xcall _read_tim
 033E A02E              mov R10,R16
 0340 A0920600          sts _timer+6,R10
 0344                   .dbline 61
 0344           ;  stop();
 0344 84E9              ldi R24,148
 0346 86BF              out 0x36,R24
 0348                   .dbline 62
 0348           ;  return I2C_CRR;
 0348 01E0              ldi R16,1
 034A                   .dbline -2
 034A           L57:
 034A                   .dbline 0 ; func end
 034A 4991              ld R20,y+
 034C A990              ld R10,y+
 034E 0895              ret
 0350                   .dbend
 0350                   .dbfunc e write_timer _write_timer fc
 0350           ;            dat -> R20,R21
                        .even
 0350           _write_timer::
 0350 4A93              st -y,R20
 0352 5A93              st -y,R21
 0354 A801              movw R20,R16
 0356                   .dbline -1
 0356                   .dbline 69
 0356           ; }
 0356           ; 
 0356           ; /**********************************
 0356           ; *          写入时钟函数                         *
 0356           ; **********************************/
 0356           ; unsigned char write_timer(unsigned char *dat)
 0356           ; {
 0356                   .dbline 70
 0356           ;  start();                                       //启动总线
 0356 84EA              ldi R24,164
 0358 86BF              out 0x36,R24
 035A                   .dbline 71
 035A           ;  waitack();                                             //等待启动完成
 035A           L86:
 035A                   .dbline 71
 035A           L87:
 035A                   .dbline 71
 035A 26B6              in R2,0x36
 035C 27FE              sbrs R2,7
 035E FDCF              rjmp L86
 0360           X19:
 0360                   .dbline 71
 0360                   .dbline 71
 0360                   .dbline 72
 0360           ;  if(chkack()!=START)return I2C_ERR;             //检查是否启动成功
 0360 81B1              in R24,0x1
 0362 887F              andi R24,248
 0364 8830              cpi R24,8
 0366 11F0              breq L89
 0368           X20:
 0368                   .dbline 72
 0368 0027              clr R16
 036A 20C0              xjmp L85
 036C           L89:
 036C                   .dbline 73
 036C           ;  write_tim(PCF8563_SLA_W);                              //发送写地址
 036C 02EA              ldi R16,162
 036E 7ADF              xcall _write_tim
 0370                   .dbline 74
 0370           ;  write_tim(0x00);                               //写数据首地址
 0370 0027              clr R16
 0372 78DF              xcall _write_tim
 0374                   .dbline 75
 0374           ;  write_tim(0x20);                               //写控制/状态寄存器1,暂停计时
 0374 00E2              ldi R16,32
 0376 76DF              xcall _write_tim
 0378                   .dbline 76
 0378           ;  write_tim(0x00);                               //写控制/状态寄存器2
 0378 0027              clr R16
 037A 74DF              xcall _write_tim
 037C                   .dbline 77
 037C           ;  write_tim(dat[0]);                         //写秒数据0
 037C FA01              movw R30,R20
 037E 0081              ldd R16,z+0
 0380 71DF              xcall _write_tim
 0382                   .dbline 78
 0382           ;  write_tim(dat[1]);                     //写分数据
 0382 FA01              movw R30,R20
 0384 0181              ldd R16,z+1
 0386 6EDF              xcall _write_tim
 0388                   .dbline 79
 0388           ;  write_tim(dat[2]);                     //写时数据
 0388 FA01              movw R30,R20
 038A 0281              ldd R16,z+2
 038C 6BDF              xcall _write_tim
 038E                   .dbline 80
 038E           ;  write_tim(dat[3]);                     //写日数据
 038E FA01              movw R30,R20
 0390 0381              ldd R16,z+3
 0392 68DF              xcall _write_tim
 0394                   .dbline 81
 0394           ;  write_tim(dat[4]);                     //写周数据
 0394 FA01              movw R30,R20
 0396 0481              ldd R16,z+4
 0398 65DF              xcall _write_tim
 039A                   .dbline 82
 039A           ;  write_tim(dat[5]);                     //写月数据
 039A FA01              movw R30,R20
 039C 0581              ldd R16,z+5
 039E 62DF              xcall _write_tim
 03A0                   .dbline 83
 03A0           ;  write_tim(dat[6]);                     //写年数据
 03A0 FA01              movw R30,R20
 03A2 0681              ldd R16,z+6
 03A4 5FDF              xcall _write_tim
 03A6                   .dbline 84
 03A6           ;  stop();
 03A6 84E9              ldi R24,148
 03A8 86BF              out 0x36,R24
 03AA                   .dbline 85
 03AA           ;  return I2C_CRR;
 03AA 01E0              ldi R16,1
 03AC                   .dbline -2
 03AC           L85:
 03AC                   .dbline 0 ; func end
 03AC 5991              ld R21,y+
 03AE 4991              ld R20,y+
 03B0 0895              ret
 03B2                   .dbsym r dat 20 pc
 03B2                   .dbend
 03B2                   .dbfunc e start_timer _start_timer fc
                        .even
 03B2           _start_timer::
 03B2                   .dbline -1
 03B2                   .dbline 92
 03B2           ; }
 03B2           ; 
 03B2           ; /**********************************
 03B2           ; *          启动时钟函数                         *
 03B2           ; **********************************/
 03B2           ; unsigned char start_timer(void)
 03B2           ; {
 03B2                   .dbline 93
 03B2           ;   start();                                      //启动总线
 03B2 84EA              ldi R24,164
 03B4 86BF              out 0x36,R24
 03B6                   .dbline 94
 03B6           ;   waitack();                                            //等待启动完成
 03B6           L92:
 03B6                   .dbline 94
 03B6           L93:
 03B6                   .dbline 94
 03B6 26B6              in R2,0x36
 03B8 27FE              sbrs R2,7
 03BA FDCF              rjmp L92
 03BC           X21:
 03BC                   .dbline 94
 03BC                   .dbline 94
 03BC                   .dbline 95
 03BC           ;   if(chkack()!=START)return I2C_ERR;            //检查是否启动成功
 03BC 81B1              in R24,0x1
 03BE 887F              andi R24,248
 03C0 8830              cpi R24,8
 03C2 11F0              breq L95
 03C4           X22:
 03C4                   .dbline 95
 03C4 0027              clr R16
 03C6 09C0              xjmp L91
 03C8           L95:
 03C8                   .dbline 96
 03C8           ;   write_tim(PCF8563_SLA_W);                             //发送写地址
 03C8 02EA              ldi R16,162
 03CA 4CDF              xcall _write_tim
 03CC                   .dbline 97
 03CC           ;   write_tim(0x00);                              //写数据首地址
 03CC 0027              clr R16
 03CE 4ADF              xcall _write_tim
 03D0                   .dbline 98
 03D0           ;   write_tim(0x00);                              //写控制/状态寄存器1,暂停计时
 03D0 0027              clr R16
 03D2 48DF              xcall _write_tim
 03D4                   .dbline 99
 03D4           ;   stop();
 03D4 84E9              ldi R24,148
 03D6 86BF              out 0x36,R24
 03D8                   .dbline 100
 03D8           ;   return I2C_CRR;
 03D8 01E0              ldi R16,1
 03DA                   .dbline -2
 03DA           L91:
 03DA                   .dbline 0 ; func end
 03DA 0895              ret
 03DC                   .dbend
 03DC                   .dbfunc e timer_lcd _timer_lcd fV
                        .even
 03DC           _timer_lcd::
 03DC                   .dbline -1
 03DC                   .dbline 107
 03DC           ; }
 03DC           ; 
 03DC           ; /**********************************
 03DC           ; *   将时钟数据转换后在LCD上显示         *
 03DC           ; **********************************/ 
 03DC           ; void timer_lcd(void)
 03DC           ; {
 03DC                   .dbline 108
 03DC           ;  LCD_set_xy(4,0);                                      //写指令:第1行第4列地址
 03DC 2227              clr R18
 03DE 04E0              ldi R16,4
 03E0 5DDE              xcall _LCD_set_xy
 03E2                   .dbline 110
 03E2           ; 
 03E2           ;  LCD_write_char(0,(timer[7]>>4)+0x30);
 03E2 20910700          lds R18,_timer+7
 03E6 3327              clr R19
 03E8 3595              asr R19
 03EA 2795              ror R18
 03EC 3595              asr R19
 03EE 2795              ror R18
 03F0 3595              asr R19
 03F2 2795              ror R18
 03F4 3595              asr R19
 03F6 2795              ror R18
 03F8 205D              subi R18,208  ; offset = 48
 03FA 3F4F              sbci R19,255
 03FC 0027              clr R16

⌨️ 快捷键说明

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