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

📄 ds1302.lis

📁 使用mega16单片机对dallas公司的定时器芯片DS1302进行读取与写入的驱动程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0086                   .dbline 106
 0086           ;               } 
 0086           L20:
 0086                   .dbline 107
 0086 979A              sbi 0x12,7
 0088                   .dbline 108
 0088 82B3              in R24,0x12
 008A 8F77              andi R24,127
 008C 82BB              out 0x12,R24
 008E                   .dbline 109
 008E 0695              lsr R16
 0090                   .dbline 110
 0090           L16:
 0090                   .dbline 97
 0090 6395              inc R22
 0092           L18:
 0092                   .dbline 97
 0092 6830              cpi R22,8
 0094 88F3              brlo L15
 0096                   .dbline 111
 0096           ;               PORTD|=0x80;    //1000 0000 SZSCK=1
 0096           ;               PORTD&=0x7F;//SZSCK=0;
 0096           ;               cmd=cmd>>1;
 0096           ;       }
 0096           ;       DDRD&=0xBF;//设置PD6(SZSDA)为输入模式
 0096 81B3              in R24,0x11
 0098 8F7B              andi R24,191
 009A 81BB              out 0x11,R24
 009C                   .dbline 112
 009C           ;       for(i=0;i<8;i++)
 009C 6627              clr R22
 009E 0CC0              xjmp L24
 00A0           L21:
 00A0                   .dbline 113
 00A0           ;       {
 00A0                   .dbline 114
 00A0           ;           code=code>>1;
 00A0 4695              lsr R20
 00A2                   .dbline 115
 00A2           ;           PORTD&=0x7F;//0111 1111 设置PD7(SZSCK)为低
 00A2 82B3              in R24,0x12
 00A4 8F77              andi R24,127
 00A6 82BB              out 0x12,R24
 00A8                   .dbline 116
 00A8           ;               if(PIND&0x40)
 00A8 869B              sbis 0x10,6
 00AA 01C0              rjmp L25
 00AC                   .dbline 117
 00AC           ;               {
 00AC                   .dbline 118
 00AC           ;                   code|=0x80;
 00AC 4068              ori R20,128
 00AE                   .dbline 119
 00AE           ;               }
 00AE           L25:
 00AE                   .dbline 120
 00AE 979A              sbi 0x12,7
 00B0                   .dbline 121
 00B0 82B3              in R24,0x12
 00B2 8F77              andi R24,127
 00B4 82BB              out 0x12,R24
 00B6                   .dbline 122
 00B6           L22:
 00B6                   .dbline 112
 00B6 6395              inc R22
 00B8           L24:
 00B8                   .dbline 112
 00B8 6830              cpi R22,8
 00BA 90F3              brlo L21
 00BC                   .dbline 123
 00BC           ;               PORTD|=0x80;//SZSCK=1;
 00BC           ;               PORTD&=0x7F;//SZSCK=0;
 00BC           ;       }
 00BC           ;       PORTD&=0xDF;//设置RESET为低 1101 1111
 00BC 82B3              in R24,0x12
 00BE 8F7D              andi R24,223
 00C0 82BB              out 0x12,R24
 00C2                   .dbline 124
 00C2           ;       return code;
 00C2 042F              mov R16,R20
 00C4                   .dbline -2
 00C4           L14:
 00C4 0E940000          xcall pop_gset2
 00C8                   .dbline 0 ; func end
 00C8 0895              ret
 00CA                   .dbsym r code 20 c
 00CA                   .dbsym r i 22 c
 00CA                   .dbsym r cmd 16 c
 00CA                   .dbend
 00CA                   .dbfunc e ASCIItoBCD _ASCIItoBCD fc
 00CA           ;            tmp -> R22
 00CA           ;           data -> R20
                        .even
 00CA           _ASCIItoBCD::
 00CA 0E940000          xcall push_gset2
 00CE 402F              mov R20,R16
 00D0                   .dbline -1
 00D0                   .dbline 131
 00D0           ; }
 00D0           ; 
 00D0           ; //ASCII码转换为BCD码
 00D0           ; //输入参数data为输入的数字
 00D0           ; //返回值为BCD码表示的数字
 00D0           ; unsigned char ASCIItoBCD(unsigned char data)
 00D0           ; {
 00D0                   .dbline 133
 00D0           ;     unsigned char tmp;
 00D0           ;     if(data>10)
 00D0 8AE0              ldi R24,10
 00D2 8417              cp R24,R20
 00D4 70F4              brsh L28
 00D6                   .dbline 134
 00D6           ;     {
 00D6                   .dbline 135
 00D6           ;         tmp=data/10;
 00D6 1AE0              ldi R17,10
 00D8 042F              mov R16,R20
 00DA 0E940000          xcall div8u
 00DE 602F              mov R22,R16
 00E0                   .dbline 136
 00E0           ;         data=data%10;
 00E0 1AE0              ldi R17,10
 00E2 042F              mov R16,R20
 00E4 0E940000          xcall mod8u
 00E8 402F              mov R20,R16
 00EA                   .dbline 137
 00EA           ;         data=(tmp<<4)|data;
 00EA 862F              mov R24,R22
 00EC 8F70              andi R24,#0x0F
 00EE 8295              swap R24
 00F0 482B              or R20,R24
 00F2                   .dbline 138
 00F2           ;     }
 00F2           L28:
 00F2                   .dbline 139
 00F2           ;     return data;
 00F2 042F              mov R16,R20
 00F4                   .dbline -2
 00F4           L27:
 00F4 0E940000          xcall pop_gset2
 00F8                   .dbline 0 ; func end
 00F8 0895              ret
 00FA                   .dbsym r tmp 22 c
 00FA                   .dbsym r data 20 c
 00FA                   .dbend
 00FA                   .dbfunc e BCDtoASCII _BCDtoASCII fc
 00FA           ;            tmp -> R22
 00FA           ;           mask -> R10
 00FA           ;           data -> R20
                        .even
 00FA           _BCDtoASCII::
 00FA 0E940000          xcall push_gset3
 00FE A22E              mov R10,R18
 0100 402F              mov R20,R16
 0102                   .dbline -1
 0102                   .dbline 147
 0102           ; }
 0102           ; 
 0102           ; //BCD码转换为ASCII码
 0102           ; //输入参数data为BCD码
 0102           ; //输入参数num为转换从最右边开始到第mask位结束
 0102           ; //返回值为ASCII表示的数字
 0102           ; unsigned char BCDtoASCII(unsigned char data,unsigned char mask)
 0102           ; {
 0102                   .dbline 148
 0102           ;     unsigned char tmp=0xff;
 0102 6FEF              ldi R22,255
 0104                   .dbline 149
 0104           ;     tmp=tmp>>(8-mask);
 0104 18E0              ldi R17,8
 0106 1A19              sub R17,R10
 0108 062F              mov R16,R22
 010A 0E940000          xcall lsr8
 010E 602F              mov R22,R16
 0110                   .dbline 150
 0110           ;     data=data&tmp;
 0110 4023              and R20,R16
 0112                   .dbline 151
 0112           ;     if(data>0x0f)
 0112 8FE0              ldi R24,15
 0114 8417              cp R24,R20
 0116 50F4              brsh L31
 0118                   .dbline 152
 0118           ;     {
 0118                   .dbline 153
 0118           ;         tmp=data&0x0f;
 0118 642F              mov R22,R20
 011A 6F70              andi R22,15
 011C                   .dbline 154
 011C           ;         data=data>>4;
 011C 842F              mov R24,R20
 011E 8295              swap R24
 0120 8F70              andi R24,#0x0F
 0122 482F              mov R20,R24
 0124                   .dbline 155
 0124           ;         data=data*10+tmp;
 0124 8AE0              ldi R24,10
 0126 849F              mul R24,R20
 0128 402D              mov R20,R0
 012A 460F              add R20,R22
 012C                   .dbline 156
 012C           ;     }
 012C           L31:
 012C                   .dbline 157
 012C           ;     return data;
 012C 042F              mov R16,R20
 012E                   .dbline -2
 012E           L30:
 012E 0E940000          xcall pop_gset3
 0132                   .dbline 0 ; func end
 0132 0895              ret
 0134                   .dbsym r tmp 22 c
 0134                   .dbsym r mask 10 c
 0134                   .dbsym r data 20 c
 0134                   .dbend
 0134                   .dbfunc e main _main fV
 0134           ;           data -> R20
                        .even
 0134           _main::
 0134                   .dbline -1
 0134                   .dbline 162
 0134           ; }
 0134           ; 
 0134           ; 
 0134           ; void main()
 0134           ; {
 0134                   .dbline 164
 0134           ;     unsigned char data;
 0134           ;     SetDateTime(TRIC_CHARGE_W,0xA5);
 0134 25EA              ldi R18,165
 0136 00E9              ldi R16,144
 0138 63DF              xcall _SetDateTime
 013A                   .dbline 165
 013A           ;     data=ReadDateTime(TRIC_CHARGE_R);
 013A 01E9              ldi R16,145
 013C 92DF              xcall _ReadDateTime
 013E 402F              mov R20,R16
 0140           L34:
 0140                   .dbline 167
 0140           L35:
 0140                   .dbline 166
 0140 FFCF              xjmp L34
 0142           X0:
 0142                   .dbline -2
 0142                   .dbline 168
 0142           ;     while(1)
 0142           ;         ;
 0142           ; }
 0142           L33:
 0142                   .dbline 0 ; func end
 0142 0895              ret
 0144                   .dbsym r data 20 c
 0144                   .dbend

⌨️ 快捷键说明

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