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

📄 ds12887.lis

📁 高精度时钟芯片。avr驱动
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module DS12887.C
                        .area text(rom, con, rel)
 0000                   .dbfile D:\开发板\OK400C\程序\avr程序\OK400C.H
 0000                   .dbfunc e Delayus _Delayus fV
 0000           ;              i -> R20,R21
 0000           ;             US -> R22,R23
                        .even
 0000           _Delayus::
 0000 0E940000          xcall push_gset2
 0004 B801              movw R22,R16
 0006                   .dbline -1
 0006                   .dbline 36
 0006           ; /*******************************************
 0006           ;   文件:hongwai.C
 0006           ;   环境:编译为ICC AVR6.25A,仿真为AVR Studio4.10 
 0006           ;   硬件:ATMEGA16芯片
 0006           ;   日期:2008年12月10日 
 0006           ;   功能:红外遥控器数码管键值显示
 0006           ;   备注:
 0006           ; /******************************************/
 0006           ; #include <D:\开发板\OK400C\程序\avr程序\OK400C.H>
 0006           ; #include <stdio.h>                    //标准输入输出头文件
 0006           ; 
 0006           ; /* 命令常量定义 */
 0006           ; #define CMD_START_DS12C887     0x20   
 0006           ; /* 开启时钟芯片 */
 0006           ; #define CMD_START_OSCILLATOR 0x70     
 0006           ; /* 开启振荡器,处于抑制状态 */
 0006           ; #define CMD_CLOSE_DS12C887     0x30   
 0006           ; /* 关掉时钟芯片 */
 0006           ; /* 所有的置位使用或操作,清除使用与操作 */
 0006           ; #define MASK_SETB_SET         0x80            
 0006           ; /* 禁止刷新 */
 0006           ; #define MASK_CLR_SET         0x7f            
 0006           ; /* 使能刷新 */
 0006           ; #define MASK_SETB_DM         0x04            
 0006           ; /* 使用HEX格式 */
 0006           ; #define MASK_CLR_DM             0xfb            
 0006           ; /* 使用BCD码格式 */
 0006           ; #define MASK_SETB_2412         0x02            
 0006           ; /* 使用24小时模式 */
 0006           ; #define MASK_CLR_2412         0xfd            
 0006           ; /* 使用12小时模式 */
 0006           ; #define MASK_SETB_DSE         0x01            
 0006           ; /* 使用夏令时 */
 0006           ; #define MASK_CLR_DSE         0xfe            
 0006           ; /* 不使用夏令时 */
 0006           ; 
 0006                   .dbline 38
 0006           ; // 寄存器地址通道定义 
 0006           ; #define  chSecondsChannel  0X00
 0006 05E0              ldi R16,5
 0008 10E0              ldi R17,0
 000A 9B01              movw R18,R22
 000C 0E940000          xcall empy16s
 0010 B801              movw R22,R16
 0012 7695              lsr R23
 0014 6795              ror R22
 0016 7695              lsr R23
 0018 6795              ror R22
 001A                   .dbline 39
 001A 4427              clr R20
 001C 5527              clr R21
 001E 02C0              xjmp L5
 0020           L2:
 0020                   .dbline 39
 0020           L3:
 0020                   .dbline 39
 0020 4F5F              subi R20,255  ; offset = 1
 0022 5F4F              sbci R21,255
 0024           L5:
 0024                   .dbline 39
 0024           ; #define  chMinutesChannel  0X02
 0024 4617              cp R20,R22
 0026 5707              cpc R21,R23
 0028 D8F3              brlo L2
 002A                   .dbline -2
 002A                   .dbline 40
 002A           ; #define  chHoursChannel    0X04
 002A           L1:
 002A 0E940000          xcall pop_gset2
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbsym r i 20 i
 0030                   .dbsym r US 22 i
 0030                   .dbend
 0030                   .dbfunc e Delayms _Delayms fV
 0030           ;              i -> R20,R21
 0030           ;              j -> R22,R23
 0030           ;             MS -> R16,R17
                        .even
 0030           _Delayms::
 0030 0E940000          xcall push_gset2
 0034                   .dbline -1
 0034                   .dbline 48
 0034           ; #define  chDofWChannel     0X06
 0034           ; #define  chDateChannel     0X07
 0034           ; #define  chMonthChannel    0X08
 0034           ; #define  chYearChannel     0X09
 0034           ; #define  chCenturyChannel  0X32
 0034           ; #define  chRegA     0X0a
 0034           ; #define  chRegB     0X0b
 0034           ; #define  chRegC     0X0c
 0034                   .dbline 50
 0034           ; #define  chRegD     0X0d
 0034           ; 
 0034 4427              clr R20
 0036 5527              clr R21
 0038 0BC0              xjmp L10
 003A           L7:
 003A                   .dbline 51
 003A 6627              clr R22
 003C 7727              clr R23
 003E 02C0              xjmp L14
 0040           L11:
 0040                   .dbline 51
 0040           L12:
 0040                   .dbline 51
 0040 6F5F              subi R22,255  ; offset = 1
 0042 7F4F              sbci R23,255
 0044           L14:
 0044                   .dbline 51
 0044 6537              cpi R22,117
 0046 E4E0              ldi R30,4
 0048 7E07              cpc R23,R30
 004A D0F3              brlo L11
 004C           L8:
 004C                   .dbline 50
 004C 4F5F              subi R20,255  ; offset = 1
 004E 5F4F              sbci R21,255
 0050           L10:
 0050                   .dbline 50
 0050 4017              cp R20,R16
 0052 5107              cpc R21,R17
 0054 90F3              brlo L7
 0056                   .dbline -2
 0056                   .dbline 52
 0056           ; uchar  temp_data1[3] = {0x00,0x00,0x00};
 0056           ; uchar  temp_data2[3] = {0x00,0x00,0x00};
 0056           L6:
 0056 0E940000          xcall pop_gset2
 005A                   .dbline 0 ; func end
 005A 0895              ret
 005C                   .dbsym r i 20 i
 005C                   .dbsym r j 22 i
 005C                   .dbsym r MS 16 i
 005C                   .dbend
 005C                   .dbfunc e Board_init _Board_init fV
                        .even
 005C           _Board_init::
 005C                   .dbline -1
 005C                   .dbline 60
 005C           ; uchar  display[6] =   {0x00,0x00,0x00,0x00,0x00,0x00}; 
 005C           ; /*******************************************
 005C           ; 函数名称: LCD1602_portini
 005C           ; 功    能: 初始化1602液晶用到的IO口
 005C           ; 参    数: 无
 005C           ; 返回值  : 无
 005C           ; /********************************************/
 005C           ; void LCD1602_portini(void)
 005C                   .dbline 61
 005C           ; {
 005C 8FEF              ldi R24,255
 005E 8ABB              out 0x1a,R24
 0060                   .dbline 62
 0060           ;       LCDa_CTRL_DDR |= BIT(LCDa_RS)|BIT(LCDa_RW)|BIT(LCDa_E);//配置控制管脚为输出
 0060 87BB              out 0x17,R24
 0062                   .dbline 63
 0062           ;       LCDa_DATA_DDR |= 0xFF;//配置数据管脚为输出
 0062 84BB              out 0x14,R24
 0064                   .dbline 64
 0064           ; }
 0064 81BB              out 0x11,R24
 0066                   .dbline 66
 0066           ; /*******************************************
 0066           ; 函数名称: LCD1602_readbyte
 0066 2224              clr R2
 0068 2DB8              out 0xd,R2
 006A                   .dbline 68
 006A           ; 功    能: 从1602液晶读出一个字节数据或者指令
 006A           ; 参    数: DatCmd--为iDat时是数据,为iCmd时是指令
 006A AB9A              sbi 0x15,3
 006C                   .dbline 69
 006C           ; 返回值  : dByte--读回的数据或者指令
 006C A998              cbi 0x15,1
 006E                   .dbline 70
 006E           ; /********************************************/
 006E D998              cbi 0x1b,1
 0070                   .dbline 71
 0070           ; uchar LCD1602_readbyte(uchar DatCmd)
 0070 88BB              out 0x18,R24
 0072                   .dbline 72
 0072           ; {
 0072 DD9A              sbi 0x1b,5
 0074                   .dbline 73
 0074           ;       uchar dByte;
 0074 05E0              ldi R16,5
 0076 10E0              ldi R17,0
 0078 C3DF              xcall _Delayus
 007A                   .dbline 74
 007A           ;       if (DatCmd == iCmd)              //指令操作
 007A DD98              cbi 0x1b,5
 007C                   .dbline 76
 007C           ;               LCDa_CLR_RS;
 007C           ;       else
 007C 2224              clr R2
 007E 28BA              out 0x18,R2
 0080                   .dbline 77
 0080           ;               LCDa_SET_RS;
 0080 DE9A              sbi 0x1b,6
 0082                   .dbline 78
 0082           ;               
 0082 02E3              ldi R16,50
 0084 10E0              ldi R17,0
 0086 BCDF              xcall _Delayus
 0088                   .dbline 79
 0088           ;       LCDa_SET_RW;                     //读操作
 0088 DE98              cbi 0x1b,6
 008A                   .dbline 81
 008A           ;       LCDa_SET_E;
 008A           ;       LCDa_DATA_DDR=0x00;              //数据总线定义为输入
 008A 8FEF              ldi R24,255
 008C 88BB              out 0x18,R24
 008E                   .dbline 82
 008E           ;       dByte=LCDa_DI;                   //读数据或者指令
 008E DF9A              sbi 0x1b,7
 0090                   .dbline 83
 0090           ;       Delayms(1);                              //时序调整
 0090 02E3              ldi R16,50
 0092 10E0              ldi R17,0
 0094 B5DF              xcall _Delayus
 0096                   .dbline 84
 0096           ;       LCDa_CLR_E;     
 0096 DF98              cbi 0x1b,7
 0098                   .dbline 86
 0098           ;       LCDa_DATA_DDR|=0xff;     //数据总线还原为输出
 0098           ;       return dByte;
 0098 8FEF              ldi R24,255
 009A 82BB              out 0x12,R24
 009C                   .dbline 87
 009C           ; }
 009C DF9A              sbi 0x1b,7
 009E                   .dbline 88
 009E           ; /*******************************************
 009E 02E3              ldi R16,50
 00A0 10E0              ldi R17,0
 00A2 AEDF              xcall _Delayus
 00A4                   .dbline 89
 00A4           ; 函数名称: LCD1602_sendbyte
 00A4 DF98              cbi 0x1b,7
 00A6                   .dbline -2
 00A6                   .dbline 92
 00A6           ; 功    能: 向1602液晶写入一个字节数据或者指令
 00A6           ; 参    数: DatCmd--为iDat时是数据,为iCmd时是指令
 00A6           ;                 dByte--为写入1602的数据或者指令
 00A6           L15:
 00A6                   .dbline 0 ; func end
 00A6 0895              ret
 00A8                   .dbend
                        .area data(ram, con, rel)
 0000                   .dbfile D:\开发板\OK400C\程序\avr程序\OK400C.H
 0000           _temp_data1::
 0000                   .blkb 2
                        .area idata
 0000 0000              .byte 0,0
                        .area data(ram, con, rel)
 0002                   .dbfile D:\开发板\OK400C\程序\avr程序\OK400C.H
 0002                   .blkb 1
                        .area idata
 0002 00                .byte 0
                        .area data(ram, con, rel)
 0003                   .dbfile D:\开发板\OK400C\程序\avr程序\OK400C.H
 0003                   .dbfile D:\开发板\OK400C\程序\avr程序\26.ds12c887实时时钟LCD1602显示\DS12887.C
 0003                   .dbsym e temp_data1 _temp_data1 A[3:3]c
 0003           _temp_data2::
 0003                   .blkb 2
                        .area idata
 0003 0000              .byte 0,0
                        .area data(ram, con, rel)
 0005                   .dbfile D:\开发板\OK400C\程序\avr程序\26.ds12c887实时时钟LCD1602显示\DS12887.C
 0005                   .blkb 1
                        .area idata
 0005 00                .byte 0
                        .area data(ram, con, rel)
 0006                   .dbfile D:\开发板\OK400C\程序\avr程序\26.ds12c887实时时钟LCD1602显示\DS12887.C
 0006                   .dbsym e temp_data2 _temp_data2 A[3:3]c
 0006           _display::
 0006                   .blkb 2
                        .area idata
 0006 0000              .byte 0,0
                        .area data(ram, con, rel)
 0008                   .dbfile D:\开发板\OK400C\程序\avr程序\26.ds12c887实时时钟LCD1602显示\DS12887.C
 0008                   .blkb 2
                        .area idata
 0008 0000              .byte 0,0
                        .area data(ram, con, rel)
 000A                   .dbfile D:\开发板\OK400C\程序\avr程序\26.ds12c887实时时钟LCD1602显示\DS12887.C
 000A                   .blkb 2
                        .area idata
 000A 0000              .byte 0,0
                        .area data(ram, con, rel)
 000C                   .dbfile D:\开发板\OK400C\程序\avr程序\26.ds12c887实时时钟LCD1602显示\DS12887.C
 000C                   .dbsym e display _display A[6:6]c
                        .area text(rom, con, rel)
 00A8                   .dbfile D:\开发板\OK400C\程序\avr程序\26.ds12c887实时时钟LCD1602显示\DS12887.C
 00A8                   .dbfunc e LCD1602_portini _LCD1602_portini fV

⌨️ 快捷键说明

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