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

📄 ds1302.lis

📁 我自己编写的atmega16的ds1302源程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module ds1302.c
                        .area data(ram, con, rel)
 0000           _INITDATE::
 0000                   .blkb 2
                        .area idata
 0000 5559              .byte 'U,'Y
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 2331              .byte 35,49
                        .area data(ram, con, rel)
 0004                   .blkb 2
                        .area idata
 0004 1202              .byte 18,2
                        .area data(ram, con, rel)
 0006                   .blkb 2
                        .area idata
 0006 0780              .byte 7,128
                        .area data(ram, con, rel)
 0008                   .dbfile F:\自编程序\M16\ds1302\ds1302.c
 0008                   .dbsym e INITDATE _INITDATE A[8:8]c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\自编程序\M16\ds1302\ds1302.c
 0000                   .dbfunc e RTInputByte _RTInputByte fV
 0000           ;              i -> R20
 0000           ;              j -> R10
 0000           ;              x -> R22
                        .even
 0000           _RTInputByte::
 0000 0E940000          xcall push_gset3
 0004 602F              mov R22,R16
 0006                   .dbline -1
 0006                   .dbline 21
 0006           ; #include<iom16v.h>
 0006           ; #include<macros.h> 
 0006           ; #include "ds1302.h"
 0006           ; unsigned char INITDATE[8]={0x55,      //55秒
 0006           ;                                                  0x59,        //59分
 0006           ;                                                  0x23,        //23时  24小时制
 0006           ;                                                  0x31,        //21日
 0006           ;                                                  0x12,        //08月
 0006           ;                                                  0x02,        //星期2
 0006           ;                                                  0x07,        //2007年
 0006           ;                                                  0x80         //写保护
 0006           ;                                                 };
 0006           ; /********************************************************************  
 0006           ;  函 数 名:RTInputByte() 
 0006           ;  功    能:实时时钟写入一字节 
 0006           ;  说    明:往DS1302写入1Byte数据 (内部函数) 
 0006           ;  入口参数:d 写入的数据  
 0006           ;  返 回 值:无   
 0006           ;  ***********************************************************************/ 
 0006           ; void RTInputByte(unsigned char  x)  
 0006           ; {  
 0006                   .dbline 23
 0006           ;     unsigned char  i,j; 
 0006           ;     for(i=0; i<8;i++) 
 0006 4427              clr R20
 0008 19C0              xjmp L5
 000A           L2:
 000A                   .dbline 24
 000A           ;     { 
 000A                   .dbline 25
 000A           ;          if(x&(1<<i))
 000A 01E0              ldi R16,1
 000C 142F              mov R17,R20
 000E 0E940000          xcall lsl8
 0012 262E              mov R2,R22
 0014 2022              and R2,R16
 0016 11F0              breq L6
 0018                   .dbline 26
 0018           ;           DS1302_PORT|=(1<<DS1302_DATA);
 0018 969A              sbi 0x12,6
 001A 01C0              xjmp L7
 001C           L6:
 001C                   .dbline 28
 001C           ;          else 
 001C           ;           DS1302_PORT&=~(1<<DS1302_DATA);  
 001C 9698              cbi 0x12,6
 001E           L7:
 001E                   .dbline 29
 001E           ;          DS1302_PORT|=(1<<DS1302_CLK);
 001E 979A              sbi 0x12,7
 0020                   .dbline 30
 0020 AA24              clr R10
 0022 01C0              xjmp L11
 0024           L8:
 0024                   .dbline 30
 0024           L9:
 0024                   .dbline 30
 0024 A394              inc R10
 0026           L11:
 0026                   .dbline 30
 0026           ;          for(j=0; j<5;j++);
 0026 8A2D              mov R24,R10
 0028 8530              cpi R24,5
 002A E0F3              brlo L8
 002C                   .dbline 31
 002C           ;          DS1302_PORT&=~(1<<DS1302_CLK);
 002C 9798              cbi 0x12,7
 002E                   .dbline 32
 002E AA24              clr R10
 0030 01C0              xjmp L15
 0032           L12:
 0032                   .dbline 32
 0032           L13:
 0032                   .dbline 32
 0032 A394              inc R10
 0034           L15:
 0034                   .dbline 32
 0034 8A2D              mov R24,R10
 0036 8530              cpi R24,5
 0038 E0F3              brlo L12
 003A                   .dbline 33
 003A           L3:
 003A                   .dbline 23
 003A 4395              inc R20
 003C           L5:
 003C                   .dbline 23
 003C 4830              cpi R20,8
 003E 28F3              brlo L2
 0040                   .dbline -2
 0040                   .dbline 34
 0040           ;          for(j=0; j<5;j++);                   
 0040           ;     }  
 0040           ; } 
 0040           L1:
 0040 0E940000          xcall pop_gset3
 0044                   .dbline 0 ; func end
 0044 0895              ret
 0046                   .dbsym r i 20 c
 0046                   .dbsym r j 10 c
 0046                   .dbsym r x 22 c
 0046                   .dbend
 0046                   .dbfunc e RTOutputByte _RTOutputByte fc
 0046           ;           data -> R20
 0046           ;              k -> R22
 0046           ;              i -> R10
 0046           ;              j -> R12
                        .even
 0046           _RTOutputByte::
 0046 0E940000          xcall push_gset4
 004A                   .dbline -1
 004A                   .dbline 43
 004A           ; /********************************************************************  
 004A           ;  函 数 名:RTOutputByte() 
 004A           ;  功    能:实时时钟读取一字节 
 004A           ;  说    明:从DS1302读取1Byte数据 (内部函数) 
 004A           ;  入口参数:无   
 004A           ;  返 回 值:ACC 
 004A           ;  ***********************************************************************/ 
 004A           ; unsigned char RTOutputByte(void)  
 004A           ; {  
 004A                   .dbline 45
 004A           ;     unsigned char i,k,data,j; 
 004A           ;       DS1302_DDR&=~(1<<DS1302_DATA);
 004A 8E98              cbi 0x11,6
 004C                   .dbline 46
 004C CC24              clr R12
 004E 01C0              xjmp L20
 0050           L17:
 0050                   .dbline 46
 0050           L18:
 0050                   .dbline 46
 0050 C394              inc R12
 0052           L20:
 0052                   .dbline 46
 0052           ;       for(j=0; j<5;j++); 
 0052 8C2D              mov R24,R12
 0054 8530              cpi R24,5
 0056 E0F3              brlo L17
 0058                   .dbline 47
 0058           ;     for(i=0; i<8; i++) 
 0058 AA24              clr R10
 005A 1FC0              xjmp L24
 005C           L21:
 005C                   .dbline 48
 005C           ;     {           
 005C                   .dbline 49
 005C           ;       k=(DS1302_PIN&(1<<DS1302_DATA));    //读数据,从低位开始  
 005C 60B3              in R22,0x10
 005E 6074              andi R22,64
 0060                   .dbline 50
 0060           ;       if(k)  
 0060 31F0              breq L25
 0062                   .dbline 51
 0062           ;         data|=(1<<i);  
 0062 01E0              ldi R16,1
 0064 1A2D              mov R17,R10
 0066 0E940000          xcall lsl8
 006A 402B              or R20,R16
 006C 07C0              xjmp L26
 006E           L25:
 006E                   .dbline 53
 006E           ;       else  
 006E           ;         data&=~(1<<i);  
 006E 01E0              ldi R16,1
 0070 1A2D              mov R17,R10
 0072 0E940000          xcall lsl8
 0076 202E              mov R2,R16
 0078 2094              com R2
 007A 4221              and R20,R2
 007C           L26:
 007C                   .dbline 54
 007C           ;       DS1302_PORT|=(1<<DS1302_CLK);
 007C 979A              sbi 0x12,7
 007E                   .dbline 55
 007E CC24              clr R12
 0080 01C0              xjmp L30
 0082           L27:
 0082                   .dbline 55
 0082           L28:
 0082                   .dbline 55
 0082 C394              inc R12
 0084           L30:
 0084                   .dbline 55
 0084           ;         for(j=0; j<5;j++);
 0084 8C2D              mov R24,R12
 0086 8530              cpi R24,5
 0088 E0F3              brlo L27
 008A                   .dbline 56
 008A           ;       DS1302_PORT&=~(1<<DS1302_CLK);
 008A 9798              cbi 0x12,7
 008C                   .dbline 57
 008C CC24              clr R12
 008E 01C0              xjmp L34
 0090           L31:
 0090                   .dbline 57
 0090           L32:
 0090                   .dbline 57
 0090 C394              inc R12
 0092           L34:
 0092                   .dbline 57
 0092 8C2D              mov R24,R12
 0094 8530              cpi R24,5
 0096 E0F3              brlo L31
 0098                   .dbline 58
 0098           L22:
 0098                   .dbline 47
 0098 A394              inc R10
 009A           L24:
 009A                   .dbline 47
 009A 8A2D              mov R24,R10
 009C 8830              cpi R24,8
 009E F0F2              brlo L21
 00A0                   .dbline 59
 00A0           ;         for(j=0; j<5;j++); 
 00A0           ;     }  
 00A0           ;       DS1302_DDR|=(1<<DS1302_DATA);
 00A0 8E9A              sbi 0x11,6
 00A2                   .dbline 60

⌨️ 快捷键说明

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