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

📄 ds1302.lis

📁 使用mega16单片机对dallas公司的定时器芯片DS1302进行读取与写入的驱动程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module DS1302.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\单片机编程\iccavr\DS1302时钟\DS1302.c
 0000                   .dbfunc e SetDateTime _SetDateTime fV
 0000           ;              i -> R20
 0000           ;           data -> R18
 0000           ;            cmd -> R16
                        .even
 0000           _SetDateTime::
 0000 0E940000          xcall push_gset1
 0004                   .dbline -1
 0004                   .dbline 49
 0004           ; #include <iom16v.h>
 0004           ; #include <macros.h>
 0004           ; 
 0004           ; //秒
 0004           ; #define SEC_W 0x80
 0004           ; #define SEC_R 0x81
 0004           ; 
 0004           ; //分
 0004           ; #define MIN_W 0x82
 0004           ; #define MIN_R 0x83
 0004           ; 
 0004           ; //小时
 0004           ; #define HR_W 0x84
 0004           ; #define HR_R 0x85
 0004           ; 
 0004           ; //日期
 0004           ; #define DATE_W 0x86
 0004           ; #define DATE_R 0x87
 0004           ; 
 0004           ; //月
 0004           ; #define MONTH_W 0x88
 0004           ; #define MONTH_R 0x89
 0004           ; 
 0004           ; //星期几
 0004           ; #define DAY_W 0x8A
 0004           ; #define DAY_R 0x8B
 0004           ; 
 0004           ; //年
 0004           ; #define YEAR_W 0x8C
 0004           ; #define YEAR_R 0x8D
 0004           ; 
 0004           ; //控制写保护
 0004           ; #define CONTROL_W 0x8E
 0004           ; #define CONTROL_R 0x8F
 0004           ; 
 0004           ; //控制充电
 0004           ; #define TRIC_CHARGE_W 0x90
 0004           ; #define TRIC_CHARGE_R 0x91
 0004           ; 
 0004           ; //突发模式
 0004           ; #define CLOCK_BURST_W 0xBE
 0004           ; #define CLOCK_BURST_R 0xBF
 0004           ; 
 0004           ; //写入时钟控制信息
 0004           ; //SZRST--PD5
 0004           ; //SZSDA--PD6
 0004           ; //SZSCK--PD7
 0004           ; void SetDateTime(unsigned char cmd,unsigned char data)
 0004           ; {
 0004                   .dbline 50
 0004           ;     unsigned char i=0;
 0004 4427              clr R20
 0006                   .dbline 51
 0006           ;       PORTD&=0x1F;//设置PD5~PD7为低 0001 1111
 0006 82B3              in R24,0x12
 0008 8F71              andi R24,31
 000A 82BB              out 0x12,R24
 000C                   .dbline 52
 000C           ;       DDRD|=0xE0;//设置PD5~PD7为输出 1110 0000
 000C 81B3              in R24,0x11
 000E 806E              ori R24,224
 0010 81BB              out 0x11,R24
 0012                   .dbline 53
 0012           ;       PORTD|=0x20;//RESET为高 0010 0000
 0012 959A              sbi 0x12,5
 0014                   .dbline 54
 0014           ;       for(i=0;i<8;i++)
 0014 0DC0              xjmp L5
 0016           L2:
 0016                   .dbline 55
 0016           ;       {
 0016                   .dbline 56
 0016           ;           if(cmd&0x01)
 0016 00FF              sbrs R16,0
 0018 02C0              rjmp L6
 001A                   .dbline 57
 001A           ;               {
 001A                   .dbline 58
 001A           ;                   PORTD|=0x40;  //0100 0000
 001A 969A              sbi 0x12,6
 001C                   .dbline 59
 001C           ;               }
 001C 03C0              xjmp L7
 001E           L6:
 001E                   .dbline 61
 001E           ;               else
 001E           ;               {
 001E                   .dbline 62
 001E           ;                   PORTD&=0xBF;  //1011 1111
 001E 82B3              in R24,0x12
 0020 8F7B              andi R24,191
 0022 82BB              out 0x12,R24
 0024                   .dbline 63
 0024           ;               } 
 0024           L7:
 0024                   .dbline 64
 0024 979A              sbi 0x12,7
 0026                   .dbline 65
 0026 82B3              in R24,0x12
 0028 8F77              andi R24,127
 002A 82BB              out 0x12,R24
 002C                   .dbline 66
 002C 0695              lsr R16
 002E                   .dbline 67
 002E           L3:
 002E                   .dbline 54
 002E 4395              inc R20
 0030           L5:
 0030                   .dbline 54
 0030 4830              cpi R20,8
 0032 88F3              brlo L2
 0034                   .dbline 68
 0034           ;               PORTD|=0x80;    //1000 0000
 0034           ;               PORTD&=0x7F;    //0111 1111
 0034           ;               cmd=cmd>>1;
 0034           ;       }
 0034           ;       for(i=0;i<8;i++)
 0034 4427              clr R20
 0036 0DC0              xjmp L11
 0038           L8:
 0038                   .dbline 69
 0038           ;       {
 0038                   .dbline 70
 0038           ;           if(data&0x01)
 0038 20FF              sbrs R18,0
 003A 02C0              rjmp L12
 003C                   .dbline 71
 003C           ;               {
 003C                   .dbline 72
 003C           ;                   PORTD|=0x40;//0100 0000
 003C 969A              sbi 0x12,6
 003E                   .dbline 73
 003E           ;               }
 003E 03C0              xjmp L13
 0040           L12:
 0040                   .dbline 75
 0040           ;               else
 0040           ;               {
 0040                   .dbline 76
 0040           ;                   PORTD&=0xBF;//1011 1111
 0040 82B3              in R24,0x12
 0042 8F7B              andi R24,191
 0044 82BB              out 0x12,R24
 0046                   .dbline 77
 0046           ;               }
 0046           L13:
 0046                   .dbline 78
 0046 979A              sbi 0x12,7
 0048                   .dbline 79
 0048 82B3              in R24,0x12
 004A 8F77              andi R24,127
 004C 82BB              out 0x12,R24
 004E                   .dbline 80
 004E 2695              lsr R18
 0050                   .dbline 81
 0050           L9:
 0050                   .dbline 68
 0050 4395              inc R20
 0052           L11:
 0052                   .dbline 68
 0052 4830              cpi R20,8
 0054 88F3              brlo L8
 0056                   .dbline 82
 0056           ;               PORTD|=0x80;//SZSCK=1;
 0056           ;               PORTD&=0x7F;//SZSCK=0;
 0056           ;               data=data>>1;
 0056           ;       }
 0056           ;       PORTD&=0xDF;//设置RESET为低
 0056 82B3              in R24,0x12
 0058 8F7D              andi R24,223
 005A 82BB              out 0x12,R24
 005C                   .dbline -2
 005C                   .dbline 83
 005C           ; }
 005C           L1:
 005C 0E940000          xcall pop_gset1
 0060                   .dbline 0 ; func end
 0060 0895              ret
 0062                   .dbsym r i 20 c
 0062                   .dbsym r data 18 c
 0062                   .dbsym r cmd 16 c
 0062                   .dbend
 0062                   .dbfunc e ReadDateTime _ReadDateTime fc
 0062           ;           code -> R20
 0062           ;              i -> R22
 0062           ;            cmd -> R16
                        .even
 0062           _ReadDateTime::
 0062 0E940000          xcall push_gset2
 0066                   .dbline -1
 0066                   .dbline 91
 0066           ; 
 0066           ; 
 0066           ; //读出时钟控制信息
 0066           ; //SZRST--PD5
 0066           ; //SZSDA--PD6
 0066           ; //SZSCK--PD7
 0066           ; unsigned char ReadDateTime(unsigned char cmd)
 0066           ; {
 0066                   .dbline 92
 0066           ;     unsigned char i=0;
 0066 6627              clr R22
 0068                   .dbline 94
 0068           ;       unsigned char code;//返回的数据值
 0068           ;       PORTD&=0x1F;//设置PD5~PD7为低 0001 1111
 0068 82B3              in R24,0x12
 006A 8F71              andi R24,31
 006C 82BB              out 0x12,R24
 006E                   .dbline 95
 006E           ;       DDRD|=0xE0;//设置PD5~PD7为输出 1110 0000
 006E 81B3              in R24,0x11
 0070 806E              ori R24,224
 0072 81BB              out 0x11,R24
 0074                   .dbline 96
 0074           ;       PORTD|=0x20;//RESET为高 0010 0000
 0074 959A              sbi 0x12,5
 0076                   .dbline 97
 0076           ;     for(i=0;i<8;i++)
 0076 0DC0              xjmp L18
 0078           L15:
 0078                   .dbline 98
 0078           ;       {
 0078                   .dbline 99
 0078           ;           if(cmd&0x01)
 0078 00FF              sbrs R16,0
 007A 02C0              rjmp L19
 007C                   .dbline 100
 007C           ;               {
 007C                   .dbline 101
 007C           ;                   PORTD|=0x40;  //0100 0000
 007C 969A              sbi 0x12,6
 007E                   .dbline 102
 007E           ;               }
 007E 03C0              xjmp L20
 0080           L19:
 0080                   .dbline 104
 0080           ;               else
 0080           ;               {
 0080                   .dbline 105
 0080           ;                   PORTD&=0xBF;  //1011 1111
 0080 82B3              in R24,0x12
 0082 8F7B              andi R24,191
 0084 82BB              out 0x12,R24

⌨️ 快捷键说明

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