📄 bi2.lis
字号:
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 + -