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

📄 ds1302.lis

📁 LCD1602液晶屏的四线驱动模块
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module ds1302.c
                        .area data(ram, con, rel)
 0000           _time_buf::
 0000                   .blkb 2
                        .area idata
 0000 2007              .byte 32,7
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 0807              .byte 8,7
                        .area data(ram, con, rel)
 0004                   .blkb 2
                        .area idata
 0004 1115              .byte 17,21
                        .area data(ram, con, rel)
 0006                   .blkb 2
                        .area idata
 0006 0002              .byte 0,2
                        .area data(ram, con, rel)
 0008                   .dbfile D:\MYJOB~1\AVR资料\示例程序\DS1302-LCD1602-4bitBUS\ds1302.c
 0008                   .dbsym e time_buf _time_buf A[8:8]c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\MYJOB~1\AVR资料\示例程序\DS1302-LCD1602-4bitBUS\ds1302.c
 0000                   .dbfunc e ds1302_write_byte _ds1302_write_byte fV
 0000           ;              i -> R20
 0000           ;              d -> R18
 0000           ;           addr -> R16
                        .even
 0000           _ds1302_write_byte::
 0000 0E940000          xcall push_gset1
 0004                   .dbline -1
 0004                   .dbline 37
 0004           ; 
 0004           ; #include "iom16v.h"
 0004           ; 
 0004           ; /*复位脚*/
 0004           ; #define RST_CLR       PORTC &= ~(1 << PC4)/*电平置低*/
 0004           ; #define RST_SET       PORTC |= (1 << PC4)/*电平置高*/
 0004           ; #define RST_IN        DDRC &= ~(1 << PC4)/*方向输入*/
 0004           ; #define RST_OUT       DDRC |= (1 << PC4)/*方向输出*/
 0004           ; 
 0004           ; /*双向数据*/
 0004           ; #define IO_CLR        PORTC &= ~(1 << PC3)/*电平置低*/
 0004           ; #define IO_SET        PORTC |= (1 << PC3)/*电平置高*/
 0004           ; #define IO_R  PINC & (1 << PC3)/*电平读取*/
 0004           ; #define IO_IN DDRC &= ~(1 << PC3)/*方向输入*/
 0004           ; #define IO_OUT        DDRC |= (1 << PC3)/*方向输出*/
 0004           ; 
 0004           ; /*时钟信号*/
 0004           ; #define SCK_CLR       PORTC &= ~(1 << PC2)/*时钟信号*/
 0004           ; #define SCK_SET       PORTC |= (1 << PC2)/*电平置高*/
 0004           ; #define SCK_IN        DDRC &= ~(1 << PC2)/*方向输入*/
 0004           ; #define SCK_OUT       DDRC |= (1 << PC2)/*方向输出*/
 0004           ; 
 0004           ; #define ds1302_sec_add                        0x80            //秒数据地址
 0004           ; #define ds1302_min_add                        0x82            //分数据地址
 0004           ; #define ds1302_hr_add                 0x84            //时数据地址
 0004           ; #define ds1302_date_add                       0x86            //日数据地址
 0004           ; #define ds1302_month_add              0x88            //月数据地址
 0004           ; #define ds1302_day_add                        0x8a            //星期数据地址
 0004           ; #define ds1302_year_add                       0x8c            //年数据地址
 0004           ; #define ds1302_control_add            0x8e            //控制数据地址
 0004           ; #define ds1302_charger_add            0x90                                     
 0004           ; #define ds1302_clkburst_add           0xbe
 0004           ; 
 0004           ; unsigned char time_buf[8] = {0x20,0x07,0x08,0x07,0x11,0x15,0x00,0x02};
 0004           ; 
 0004           ; /*向DS1302写入一字节数据*/
 0004           ; void ds1302_write_byte(unsigned char addr, unsigned char d) {
 0004                   .dbline 40
 0004           ; 
 0004           ;       unsigned char i;
 0004           ;       RST_SET;                                        /*启动DS1302总线*/
 0004 AC9A              sbi 0x15,4
 0006                   .dbline 43
 0006           ;       
 0006           ;       /*写入目标地址:addr*/
 0006           ;       IO_OUT;
 0006 A39A              sbi 0x14,3
 0008                   .dbline 44
 0008           ;       addr = addr & 0xFE;/*最低位置零*/
 0008 0E7F              andi R16,254
 000A                   .dbline 45
 000A 4427              clr R20
 000C 09C0              xjmp L5
 000E           L2:
 000E                   .dbline 45
 000E           ;       for (i = 0; i < 8; i ++) {
 000E                   .dbline 46
 000E           ;               if (addr & 0x01) {
 000E 00FF              sbrs R16,0
 0010 02C0              rjmp L6
 0012                   .dbline 46
 0012                   .dbline 47
 0012           ;                       IO_SET;
 0012 AB9A              sbi 0x15,3
 0014                   .dbline 48
 0014           ;                       }
 0014 01C0              xjmp L7
 0016           L6:
 0016                   .dbline 49
 0016           ;               else {
 0016                   .dbline 50
 0016           ;                       IO_CLR;
 0016 AB98              cbi 0x15,3
 0018                   .dbline 51
 0018           ;                       }
 0018           L7:
 0018                   .dbline 52
 0018 AA9A              sbi 0x15,2
 001A                   .dbline 53
 001A AA98              cbi 0x15,2
 001C                   .dbline 54
 001C 0695              lsr R16
 001E                   .dbline 55
 001E           L3:
 001E                   .dbline 45
 001E 4395              inc R20
 0020           L5:
 0020                   .dbline 45
 0020 4830              cpi R20,8
 0022 A8F3              brlo L2
 0024                   .dbline 58
 0024           ;               SCK_SET;
 0024           ;               SCK_CLR;
 0024           ;               addr = addr >> 1;
 0024           ;               }
 0024           ;       
 0024           ;       /*写入数据:d*/
 0024           ;       IO_OUT;
 0024 A39A              sbi 0x14,3
 0026                   .dbline 59
 0026 4427              clr R20
 0028 09C0              xjmp L11
 002A           L8:
 002A                   .dbline 59
 002A           ;       for (i = 0; i < 8; i ++) {
 002A                   .dbline 60
 002A           ;               if (d & 0x01) {
 002A 20FF              sbrs R18,0
 002C 02C0              rjmp L12
 002E                   .dbline 60
 002E                   .dbline 61
 002E           ;                       IO_SET;
 002E AB9A              sbi 0x15,3
 0030                   .dbline 62
 0030           ;                       }
 0030 01C0              xjmp L13
 0032           L12:
 0032                   .dbline 63
 0032           ;               else {
 0032                   .dbline 64
 0032           ;                       IO_CLR;
 0032 AB98              cbi 0x15,3
 0034                   .dbline 65
 0034           ;                       }
 0034           L13:
 0034                   .dbline 66
 0034 AA9A              sbi 0x15,2
 0036                   .dbline 67
 0036 AA98              cbi 0x15,2
 0038                   .dbline 68
 0038 2695              lsr R18
 003A                   .dbline 69
 003A           L9:
 003A                   .dbline 59
 003A 4395              inc R20
 003C           L11:
 003C                   .dbline 59
 003C 4830              cpi R20,8
 003E A8F3              brlo L8
 0040                   .dbline 70
 0040           ;               SCK_SET;
 0040           ;               SCK_CLR;
 0040           ;               d = d >> 1;
 0040           ;               }
 0040           ;       RST_CLR;                                        /*停止DS1302总线*/
 0040 AC98              cbi 0x15,4
 0042                   .dbline -2
 0042           L1:
 0042 0E940000          xcall pop_gset1
 0046                   .dbline 0 ; func end
 0046 0895              ret
 0048                   .dbsym r i 20 c
 0048                   .dbsym r d 18 c
 0048                   .dbsym r addr 16 c
 0048                   .dbend
 0048                   .dbfunc e ds1302_read_byte _ds1302_read_byte fc
 0048           ;           temp -> R20
 0048           ;              i -> R22
 0048           ;           addr -> R16
                        .even
 0048           _ds1302_read_byte::
 0048 0E940000          xcall push_gset2
 004C                   .dbline -1
 004C                   .dbline 74
 004C           ; }
 004C           ; 
 004C           ; /*从DS1302读出一字节数据*/
 004C           ; unsigned char ds1302_read_byte(unsigned char addr) {
 004C                   .dbline 78
 004C           ; 
 004C           ;       unsigned char i;
 004C           ;       unsigned char temp;
 004C           ;       RST_SET;                                        /*启动DS1302总线*/
 004C AC9A              sbi 0x15,4
 004E                   .dbline 81
 004E           ; 
 004E           ;       /*写入目标地址:addr*/
 004E           ;       IO_OUT;
 004E A39A              sbi 0x14,3
 0050                   .dbline 82
 0050           ;       addr = addr | 0x01;/*最低位置高*/
 0050 0160              ori R16,1
 0052                   .dbline 83
 0052 6627              clr R22
 0054 09C0              xjmp L18
 0056           L15:
 0056                   .dbline 83
 0056           ;       for (i = 0; i < 8; i ++) {
 0056                   .dbline 84
 0056           ;               if (addr & 0x01) {
 0056 00FF              sbrs R16,0
 0058 02C0              rjmp L19
 005A                   .dbline 84
 005A                   .dbline 85
 005A           ;                       IO_SET;
 005A AB9A              sbi 0x15,3
 005C                   .dbline 86
 005C           ;                       }
 005C 01C0              xjmp L20
 005E           L19:
 005E                   .dbline 87
 005E           ;               else {
 005E                   .dbline 88
 005E           ;                       IO_CLR;
 005E AB98              cbi 0x15,3

⌨️ 快捷键说明

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