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

📄 bi2.lis

📁 驱动320240
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0042           ; void delay_nms(unsigned int n)       //N ms延时函数
 0042           ;   {
 0042                   .dbline 93
 0042           ;    unsigned int i=0;
 0042 4427              clr R20
 0044 5527              clr R21
 0046                   .dbline 94
 0046           ;    for (i=0;i<n;i++)
 0046 03C0              xjmp L16
 0048           L13:
 0048                   .dbline 95
 0048 EFDF              xcall _delay_1ms
 004A           L14:
 004A                   .dbline 94
 004A 4F5F              subi R20,255  ; offset = 1
 004C 5F4F              sbci R21,255
 004E           L16:
 004E                   .dbline 94
 004E 4617              cp R20,R22
 0050 5707              cpc R21,R23
 0052 D0F3              brlo L13
 0054                   .dbline -2
 0054           L12:
 0054 0E940000          xcall pop_gset2
 0058                   .dbline 0 ; func end
 0058 0895              ret
 005A                   .dbsym r i 20 i
 005A                   .dbsym r n 22 i
 005A                   .dbend
 005A                   .dbfunc e delay _delay fV
 005A           ;              i -> R20,R21
 005A           ;              n -> R22,R23
                        .even
 005A           _delay::
 005A 0E940000          xcall push_gset2
 005E B801              movw R22,R16
 0060                   .dbline -1
 0060                   .dbline 99
 0060           ;    delay_1ms();
 0060           ;   }
 0060           ;    
 0060           ; void delay(unsigned int n)//延时n毫秒
 0060           ; {
 0060                   .dbline 101
 0060           ;   unsigned int i;
 0060           ;   for (i=0;i<n;i++)//执行n次1毫秒延时
 0060 4427              clr R20
 0062 5527              clr R21
 0064 03C0              xjmp L21
 0066           L18:
 0066                   .dbline 102
 0066 E0DF              xcall _delay_1ms
 0068           L19:
 0068                   .dbline 101
 0068 4F5F              subi R20,255  ; offset = 1
 006A 5F4F              sbci R21,255
 006C           L21:
 006C                   .dbline 101
 006C 4617              cp R20,R22
 006E 5707              cpc R21,R23
 0070 D0F3              brlo L18
 0072                   .dbline -2
 0072           L17:
 0072 0E940000          xcall pop_gset2
 0076                   .dbline 0 ; func end
 0076 0895              ret
 0078                   .dbsym r i 20 i
 0078                   .dbsym r n 22 i
 0078                   .dbend
 0078                   .dbfunc e change_1302 _change_1302 fc
 0078           ;              j -> R20
 0078           ;              i -> R22
 0078           ;              p -> R16,R17
                        .even
 0078           _change_1302::
 0078 0E940000          xcall push_gset2
 007C                   .dbline -1
 007C                   .dbline 105
 007C           ;   delay_1ms();
 007C           ; }
 007C           ; char change_1302(char*p)
 007C           ; {
 007C                   .dbline 107
 007C           ;       unsigned char i,j;
 007C           ;       j=*p&0x0F;
 007C F801              movw R30,R16
 007E 4081              ldd R20,z+0
 0080 4F70              andi R20,15
 0082                   .dbline 108
 0082           ;       i=(*p>>4)&0x0f;
 0082 6081              ldd R22,z+0
 0084 6295              swap R22
 0086 6F70              andi R22,#0x0F
 0088 6F70              andi R22,15
 008A                   .dbline 109
 008A           ;       *p=i*10+j;
 008A 8AE0              ldi R24,10
 008C 869F              mul R24,R22
 008E 202C              mov R2,R0
 0090 240E              add R2,R20
 0092 2082              std z+0,R2
 0094                   .dbline 110
 0094           ;       return *p;
 0094 0081              ldd R16,z+0
 0096                   .dbline -2
 0096           L22:
 0096 0E940000          xcall pop_gset2
 009A                   .dbline 0 ; func end
 009A 0895              ret
 009C                   .dbsym r j 20 c
 009C                   .dbsym r i 22 c
 009C                   .dbsym r p 16 pc
 009C                   .dbend
 009C                   .dbfunc e init_SPI _init_SPI fV
                        .even
 009C           _init_SPI::
 009C                   .dbline -1
 009C                   .dbline 117
 009C           ; 
 009C           ; }
 009C           ; 
 009C           ; 
 009C           ; //初始化SPI接口
 009C           ; void init_SPI(void)
 009C           ; {
 009C                   .dbline 118
 009C           ;     SPCR = (1<<SPE)|(1<<MSTR)|(1<<DORD)|(1<<SPR0)|(1<<SPR1);          
 009C 83E7              ldi R24,115
 009E 8DB9              out 0xd,R24
 00A0                   .dbline -2
 00A0           L23:
 00A0                   .dbline 0 ; func end
 00A0 0895              ret
 00A2                   .dbend
 00A2                   .dbfunc e Single_SPI _Single_SPI fc
 00A2           ;          rdata -> y+0
 00A2           ;          wdata -> R20
 00A2           ;        command -> R22
                        .even
 00A2           _Single_SPI::
 00A2 0E940000          xcall push_gset2
 00A6 422F              mov R20,R18
 00A8 602F              mov R22,R16
 00AA 2197              sbiw R28,1
 00AC                   .dbline -1
 00AC                   .dbline 131
 00AC           ; // 使能SPI接口,主机模式,LSB低位在先,模式0,16分频,SPI时钟约460KHz
 00AC           ; 
 00AC           ; }
 00AC           ; /*-----------------------------------------------------------------------
 00AC           ; Single_SPI    : 使用SPI接口读写数据到DS1302
 00AC           ;  
 00AC           ; 输入参数:    command:        命令选择;
 00AC           ;                       wdata:          写入的数据;
 00AC           ; 返回值                rdata:          读回的数据;     
 00AC           ;    (SPI的收发是同时进行的)
 00AC           ; -----------------------------------------------------------------------*/
 00AC           ; unsigned char Single_SPI(unsigned char command,unsigned char wdata)
 00AC           ; {
 00AC                   .dbline 133
 00AC           ;     char rdata;
 00AC           ;     EnDS1302;                                                 // 使能LCD
 00AC C49A              sbi 0x18,4
 00AE                   .dbline 134
 00AE           ;    delay_nus(10);
 00AE 0AE0              ldi R16,10
 00B0 10E0              ldi R17,0
 00B2 ABDF              xcall _delay_nus
 00B4                   .dbline 135
 00B4           ;     SPDR = command;                                           // 传送命令到SPI寄存器
 00B4 6FB9              out 0xf,R22
 00B6           L25:
 00B6                   .dbline 137
 00B6           L26:
 00B6                   .dbline 136
 00B6           ;       while(!(SPSR&(1<<SPIF)))
 00B6 779B              sbis 0xe,7
 00B8 FECF              rjmp L25
 00BA                   .dbline 139
 00BA           ;      ;        
 00BA           ; 
 00BA           ;    delay_nus(10);
 00BA 0AE0              ldi R16,10
 00BC 10E0              ldi R17,0
 00BE A5DF              xcall _delay_nus
 00C0                   .dbline 140
 00C0           ;     SPDR = wdata;     
 00C0 4FB9              out 0xf,R20
 00C2                   .dbline 141
 00C2           ;           delay_nus(10);                                      // 传送数据到SPI寄存器
 00C2 0AE0              ldi R16,10
 00C4 10E0              ldi R17,0
 00C6 A1DF              xcall _delay_nus
 00C8           L28:
 00C8                   .dbline 143
 00C8           L29:
 00C8                   .dbline 142
 00C8           ;       while(!(SPSR&(1<<SPIF)))
 00C8 779B              sbis 0xe,7
 00CA FECF              rjmp L28
 00CC                   .dbline 145
 00CC           ;                  ;
 00CC           ; 
 00CC           ;     rdata=SPDR;                                                       // 读取数据
 00CC 2FB0              in R2,0xf
 00CE 2882              std y+0,R2
 00D0                   .dbline 146
 00D0           ;                   delay_nus(10);      
 00D0 0AE0              ldi R16,10
 00D2 10E0              ldi R17,0
 00D4 9ADF              xcall _delay_nus
 00D6                   .dbline 147
 00D6           ;     DiDS1302;                                                 // 关断LCD SPI通讯
 00D6 C498              cbi 0x18,4
 00D8                   .dbline 148
 00D8           ;     delay_nus(10);
 00D8 0AE0              ldi R16,10
 00DA 10E0              ldi R17,0
 00DC 96DF              xcall _delay_nus
 00DE                   .dbline 149
 00DE           ;       change_1302(& rdata);
 00DE 8E01              movw R16,R28
 00E0 CBDF              xcall _change_1302
 00E2                   .dbline 150
 00E2           ;     return rdata;
 00E2 0881              ldd R16,y+0
 00E4                   .dbline -2
 00E4           L24:
 00E4 2196              adiw R28,1
 00E6 0E940000          xcall pop_gset2
 00EA                   .dbline 0 ; func end
 00EA 0895              ret
 00EC                   .dbsym l rdata 0 c
 00EC                   .dbsym r wdata 20 c
 00EC                   .dbsym r command 22 c
 00EC                   .dbend
 00EC                   .dbfunc e Burst_SPI _Burst_SPI fV
 00EC           ;         prdata -> R20,R21
 00EC           ;         pwdata -> R22,R23
 00EC           ;            len -> R10
 00EC           ;            CMD -> R12
                        .even
 00EC           _Burst_SPI::
 00EC 0E940000          xcall push_gset4
 00F0 A22E              mov R10,R18
 00F2 C02E              mov R12,R16
 00F4 6885              ldd R22,y+8
 00F6 7985              ldd R23,y+9
 00F8 4A85              ldd R20,y+10
 00FA 5B85              ldd R21,y+11
 00FC                   .dbline -1
 00FC                   .dbline 167
 00FC           ; }
 00FC           ; 
 00FC           ; /*-----------------------------------------------------------------------
 00FC           ; Burst_SPI    : 使用SPI接口读写一批数据到DS1302
 00FC           ;  
 00FC           ; 输入参数:    CMD:            选择Clock/RAM,选择读写
 00FC           ;                       lenth:          数据长度
 00FC           ;                       pwdata:         写入数据的缓冲区;
 00FC           ;                       prdata:         读回数据的缓冲区;       
 00FC           ;    (SPI的收发是同时进行的)
 00FC           ; 读CLOCK的数据从SECOND寄存器开始,到CONTROL寄存器,最大8字节
 00FC           ; 写CLOCK的数据必须一次写完8个字节
 00FC           ; 读写RAM的数据从 RAM0地址开始,到RAM30地址,最大31字节
 00FC           ; -----------------------------------------------------------------------*/
 00FC           ; void Burst_SPI(unsigned char CMD,unsigned char len,
 00FC           ;                                               unsigned char *pwdata,unsigned char *prdata)
 00FC           ; {
 00FC                   .dbline 170
 00FC           ; //unsigned char *prdata;
 00FC           ; //*prdata=*temp[0];
 00FC           ;     EnDS1302;                                                         // 使能SPI通讯
 00FC C49A              sbi 0x18,4
 00FE                   .dbline 171
 00FE           ;     delay_nus(10);
 00FE 0AE0              ldi R16,10
 0100 10E0              ldi R17,0
 0102 83DF              xcall _delay_nus
 0104                   .dbline 172
 0104           ;       SPDR=CMD;                                                               // 传送命令到SPI寄存器
 0104 CFB8              out 0xf,R12
 0106           L32:
 0106                   .dbline 174
 0106           L33:
 0106                   .dbline 173
 0106           ;     while(!(SPSR&(1<<SPIF)))
 0106 779B              sbis 0xe,7
 0108 FECF              rjmp L32
 010A                   .dbline 175
 010A           ;                  ;
 010A           ;     delay_nus(10);    
 010A 0AE0              ldi R16,10
 010C 10E0              ldi R17,0
 010E 7DDF              xcall _delay_nus
 0110 0AC0              xjmp L36
 0112           L35:
 0112                   .dbline 177
 0112           ;     while (len--)
 0112           ;     {
 0112                   .dbline 178
 0112           ;       SPDR = *pwdata++;                                       // 传送数据到SPI寄存器
 0112 FB01              movw R30,R22
 0114 2190              ld R2,Z+

⌨️ 快捷键说明

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