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

📄 time_8515.lis

📁 AVR开发板例子源代码
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 00A0 C4DF              rcall _write_data
 00A2                   .dbline 120
 00A2           L19:
 00A2                   .dbline 117
 00A2 4395              inc R20
 00A4           L21:
 00A4                   .dbline 117
 00A4 4032              cpi R20,32
 00A6 B8F3              brlo L18
 00A8                   .dbline -2
 00A8           L13:
 00A8 00D0              rcall pop_gset2
 00AA                   .dbline 0 ; func end
 00AA 0895              ret
 00AC                   .dbsym r i 20 c
 00AC                   .dbsym r p 22 pc
 00AC                   .dbend
 00AC                   .dbfunc e InputByte _InputByte fV
 00AC           ;              i -> R20
 00AC           ;             CD -> R22
                        .even
 00AC           _InputByte::
 00AC 00D0              rcall push_gset2
 00AE 602F              mov R22,R16
 00B0                   .dbline -1
 00B0                   .dbline 130
 00B0           ;        {
 00B0           ;            write_data(p[i]);
 00B0           ;        }
 00B0           ; }
 00B0           ; /************************************************
 00B0           ; 函 数 名:    InputByte()
 00B0           ; 功    能:    串行写入1字节的数据函数
 00B0           ; 输入参数:     /
 00B0           ; 输出参数:    /
 00B0           ; 描    述:    PA4为数据端,PA3为时钟端,bit0在先,时钟上升沿写入。
 00B0           ; ***********************************************/
 00B0           ; void InputByte (uchar CD) 
 00B0           ; {
 00B0                   .dbline 132
 00B0           ;     uchar i;
 00B0           ;       for(i=0;i<8;i++)
 00B0 4427              clr R20
 00B2 0CC0              rjmp L26
 00B4           L23:
 00B4                   .dbline 133
 00B4           ;       {
 00B4                   .dbline 134
 00B4           ;          if((CD & (1<<i))==0)
 00B4 01E0              ldi R16,1
 00B6 142F              mov R17,R20
 00B8 00D0              rcall lsl8
 00BA 262E              mov R2,R22
 00BC 2022              and R2,R16
 00BE 11F4              brne L27
 00C0                   .dbline 135
 00C0           ;          PORTA &= ~(1<<PA4);             //数据端输出0
 00C0 DC98              cbi 0x1b,4
 00C2 01C0              rjmp L28
 00C4           L27:
 00C4                   .dbline 137
 00C4           ;          else 
 00C4           ;          PORTA |= (1<<PA4);             //否则输出1
 00C4 DC9A              sbi 0x1b,4
 00C6           L28:
 00C6                   .dbline 138
 00C6 DB9A              sbi 0x1b,3
 00C8                   .dbline 139
 00C8 DB98              cbi 0x1b,3
 00CA                   .dbline 140
 00CA           L24:
 00CA                   .dbline 132
 00CA 4395              inc R20
 00CC           L26:
 00CC                   .dbline 132
 00CC 4830              cpi R20,8
 00CE 90F3              brlo L23
 00D0                   .dbline -2
 00D0           L22:
 00D0 00D0              rcall pop_gset2
 00D2                   .dbline 0 ; func end
 00D2 0895              ret
 00D4                   .dbsym r i 20 c
 00D4                   .dbsym r CD 22 c
 00D4                   .dbend
 00D4                   .dbfunc e OutputByte _OutputByte fc
 00D4           ;            mid -> R20
 00D4           ;              i -> R22
                        .even
 00D4           _OutputByte::
 00D4 00D0              rcall push_gset2
 00D6                   .dbline -1
 00D6                   .dbline 150
 00D6           ;          PORTA |= (1<<PA3);             //时钟置高,产生上升沿。
 00D6           ;          PORTA &= ~(1<<PA3);            //时钟置低
 00D6           ;        }
 00D6           ; }
 00D6           ; /************************************************
 00D6           ; 函 数 名:    OutputByte
 00D6           ; 功    能:    从DS1302串行读出1字节的数据函数
 00D6           ; 输入参数:     /
 00D6           ; 输出参数:    /
 00D6           ; 描    述:    PA4为数据端,PA3为时钟端,bit0在先,时钟下降沿读出。
 00D6           ; ***********************************************/
 00D6           ; uchar OutputByte (void) 
 00D6           ; {
 00D6                   .dbline 151
 00D6           ;     uchar i,mid=0;
 00D6 4427              clr R20
 00D8                   .dbline 152
 00D8           ;       for(i=0;i<8;i++)
 00D8 6627              clr R22
 00DA 10C0              rjmp L33
 00DC           L30:
 00DC                   .dbline 153
 00DC           ;       {
 00DC                   .dbline 154
 00DC           ;          if((PINA & 0x10)==0)    //操作的是PA4
 00DC CC99              sbic 0x19,4
 00DE 07C0              rjmp L34
 00E0                   .dbline 155
 00E0           ;          {
 00E0                   .dbline 156
 00E0           ;              mid &= ~(1<<i);         //读取0
 00E0 01E0              ldi R16,1
 00E2 162F              mov R17,R22
 00E4 00D0              rcall lsl8
 00E6 202E              mov R2,R16
 00E8 2094              com R2
 00EA 4221              and R20,R2
 00EC                   .dbline 157
 00EC           ;          }
 00EC 04C0              rjmp L35
 00EE           L34:
 00EE                   .dbline 159
 00EE           ;          else
 00EE           ;          {
 00EE                   .dbline 160
 00EE           ;              mid |= (1<<i);          //读取1
 00EE 01E0              ldi R16,1
 00F0 162F              mov R17,R22
 00F2 00D0              rcall lsl8
 00F4 402B              or R20,R16
 00F6                   .dbline 161
 00F6           ;          }
 00F6           L35:
 00F6                   .dbline 162
 00F6 DB9A              sbi 0x1b,3
 00F8                   .dbline 163
 00F8 DB98              cbi 0x1b,3
 00FA                   .dbline 164
 00FA           L31:
 00FA                   .dbline 152
 00FA 6395              inc R22
 00FC           L33:
 00FC                   .dbline 152
 00FC 6830              cpi R22,8
 00FE 70F3              brlo L30
 0100                   .dbline 165
 0100           ;          PORTA |= (1<<PA3);      //时钟置高
 0100           ;          PORTA &= ~(1<<PA3);     //时钟置低,产生下降沿
 0100           ;        }
 0100           ;        return (mid);
 0100 042F              mov R16,R20
 0102                   .dbline -2
 0102           L29:
 0102 00D0              rcall pop_gset2
 0104                   .dbline 0 ; func end
 0104 0895              ret
 0106                   .dbsym r mid 20 c
 0106                   .dbsym r i 22 c
 0106                   .dbend
 0106                   .dbfunc e write_DS1302 _write_DS1302 fV
 0106           ;              i -> R20
                        .even
 0106           _write_DS1302::
 0106 00D0              rcall push_gset1
 0108                   .dbline -1
 0108                   .dbline 176
 0108           ; }
 0108           ; /************************************************
 0108           ; 函 数 名:    write_DS1302
 0108           ; 功    能:    给DS1302写入上电数据,置需要设定的时钟值
 0108           ; 输入参数:     /
 0108           ; 输出参数:    /
 0108           ; 描    述:    单字节和多字节操作模式都用了。
 0108           ;               数据格式为:秒 分 时 日 月 星期 年 写保护字节
 0108           ; ***********************************************/
 0108           ; void write_DS1302 (void)
 0108           ; {
 0108                   .dbline 179
 0108           ;      uchar i;
 0108           ; 
 0108           ;        DDRA |= (1<<DDA5)|(1<<DDA4)|(1<<DDA3); //复位,数据和时钟脚都为输出   
 0108 8AB3              in R24,0x1a
 010A 8863              ori R24,56
 010C 8ABB              out 0x1a,R24
 010E                   .dbline 180
 010E           ;        PORTA &= ~(1<<PA5);        //RST=0
 010E DD98              cbi 0x1b,5
 0110                   .dbline 181
 0110           ;        PORTA &= ~(1<<PA3);        //CLK=0
 0110 DB98              cbi 0x1b,3
 0112                   .dbline 182
 0112           ;        PORTA |= (1<<PA5);         //RST=1 
 0112 DD9A              sbi 0x1b,5
 0114                   .dbline 183
 0114           ;        NOP();
 0114 0000              nop
 0116                   .dbline 184
 0116           ;        InputByte(0x8e);    //写保护命令字节的地址
 0116 0EE8              ldi R16,142
 0118 C9DF              rcall _InputByte
 011A                   .dbline 185
 011A           ;        InputByte(0x00);    //解除写保护命令
 011A 0027              clr R16
 011C C7DF              rcall _InputByte
 011E                   .dbline 186
 011E           ;        PORTA &= ~(1<<PA5);        //RST=0
 011E DD98              cbi 0x1b,5
 0120                   .dbline 187
 0120           ;        PORTA &= ~(1<<PA3);        //CLK=0
 0120 DB98              cbi 0x1b,3
 0122                   .dbline 188
 0122           ;        PORTA |= (1<<PA5);        //RST=1
 0122 DD9A              sbi 0x1b,5
 0124                   .dbline 189
 0124           ;        NOP();
 0124 0000              nop
 0126                   .dbline 190
 0126           ;        InputByte(0b10010000);    //涓流充电寄存器的地址
 0126 00E9              ldi R16,144
 0128 C1DF              rcall _InputByte
 012A                   .dbline 191
 012A           ;        InputByte(0b10101010);    //设置涓流充电
 012A 0AEA              ldi R16,170
 012C BFDF              rcall _InputByte
 012E                   .dbline 192
 012E           ;        PORTA &= ~(1<<PA5);        //RST=0
 012E DD98              cbi 0x1b,5
 0130                   .dbline 193
 0130           ;        PORTA &= ~(1<<PA3);        //CLK=0
 0130 DB98              cbi 0x1b,3
 0132                   .dbline 194
 0132           ;        PORTA |= (1<<PA5);        //RST=1
 0132 DD9A              sbi 0x1b,5
 0134                   .dbline 195
 0134           ;        NOP();
 0134 0000              nop
 0136                   .dbline 196
 0136           ;        InputByte(0xbe);    //多字节写操作命令
 0136 0EEB              ldi R16,190
 0138 B9DF              rcall _InputByte
 013A                   .dbline 197
 013A           ;        for (i=0;i<8;i++)
 013A 4427              clr R20
 013C 09C0              rjmp L40
 013E           L37:
 013E                   .dbline 198
 013E                   .dbline 199
 013E 80E0              ldi R24,<_buf_write
 0140 90E0              ldi R25,>_buf_write
 0142 E42F              mov R30,R20
 0144 FF27              clr R31
 0146 E80F              add R30,R24
 0148 F91F              adc R31,R25
 014A 0081              ldd R16,z+0
 014C AFDF              rcall _InputByte
 014E                   .dbline 200
 014E           L38:
 014E                   .dbline 197
 014E 4395              inc R20
 0150           L40:
 0150                   .dbline 197
 0150 4830              cpi R20,8
 0152 A8F3              brlo L37
 0154                   .dbline 201
 0154           ;        {
 0154           ;           InputByte(buf_write[i]);
 0154           ;        }
 0154           ;        PORTA &= ~(1<<PA5);   //RST=0
 0154 DD98              cbi 0x1b,5
 0156                   .dbline -2
 0156           L36:
 0156 00D0              rcall pop_gset1
 0158                   .dbline 0 ; func end
 0158 0895              ret
 015A                   .dbsym r i 20 c
 015A                   .dbend
 015A                   .dbfunc e read_DS1302 _read_DS1302 fV
 015A           ;              i -> R20
                        .even
 015A           _read_DS1302::
 015A 00D0              rcall push_gset1
 015C                   .dbline -1
 015C                   .dbline 212
 015C           ; }
 015C           ; /************************************************
 015C           ; 函 数 名:    read_DS1302
 015C           ; 功    能:    读取DS1302的所有时间数据
 015C           ; 输入参数:     /
 015C           ; 输出参数:    /
 015C           ; 描    述:    使用多字节方式。
 015C           ;               数据格式为:秒 分 时 日 月 星期 年
 015C           ; ***********************************************/
 015C           ; void read_DS1302 (void) 
 015C           ; {
 015C                   .dbline 214
 015C           ;     uchar i;
 015C           ;       DDRA |= (1<<DDA5)|(1<<DDA3); //复位和时钟脚都为输出
 015C 8AB3              in R24,0x1a
 015E 8862              ori R24,40
 0160 8ABB              out 0x1a,R24
 0162                   .dbline 215
 0162           ;       PORTA &= ~(1<<PA5);          //RST=0
 0162 DD98              cbi 0x1b,5
 0164                   .dbline 216
 0164           ;     PORTA &= ~(1<<PA3);          //CLK=0
 0164 DB98              cbi 0x1b,3
 0166                   .dbline 217
 0166           ;       PORTA |= (1<<PA5);           //RST=1
 0166 DD9A              sbi 0x1b,5
 0168                   .dbline 218
 0168           ;       DDRA |= (1<<DDA4);          //数据脚为输出 
 0168 D49A              sbi 0x1a,4
 016A                   .dbline 219
 016A           ;       NOP();
 016A 0000              nop
 016C                   .dbline 220
 016C           ;       InputByte(0xbf);            //多字节读命令
 016C 0FEB              ldi R16,191
 016E 9EDF              rcall _InputByte

⌨️ 快捷键说明

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