📄 rtc.lis
字号:
00B8 .dbline 75
00B8 ; }
00B8 L27:
00B8 .dbline 0 ; func end
00B8 D8CF rjmp _SetSCL
00BA .dbend
00BA .dbfunc e Ack _Ack fV
.even
00BA _Ack::
00BA .dbline -1
00BA .dbline 78
00BA ;
00BA ; void Ack() //IIC总线应答
00BA ; {SetSDA(0);//SDA=0; //应答方式:读完一个字节后将SDA线拉低,即应答0
00BA .dbline 78
00BA 0027 clr R16
00BC DEDF rcall _SetSDA
00BE .dbline 79
00BE ; SetSCL(1);//SCL=1;
00BE 01E0 ldi R16,1
00C0 D4DF rcall _SetSCL
00C2 .dbline 80
00C2 ; NOPNOP(50);
00C2 02E3 ldi R16,50
00C4 CCDF rcall _NOPNOP
00C6 .dbline 85
00C6 ; //_nop_();
00C6 ; //_nop_();
00C6 ; //_nop_();
00C6 ; //_nop_();
00C6 ; SetSCL(0);//SCL=0;
00C6 0027 clr R16
00C8 D0DF rcall _SetSCL
00CA .dbline 86
00CA ; SetSDA(1);//SDA=1;
00CA 01E0 ldi R16,1
00CC .dbline -2
00CC .dbline 87
00CC ; }
00CC L28:
00CC .dbline 0 ; func end
00CC D6CF rjmp _SetSDA
00CE .dbend
00CE .dbfunc e Nack _Nack fV
.even
00CE _Nack::
00CE .dbline -1
00CE .dbline 90
00CE ;
00CE ; void Nack() //IIC总线应答
00CE ; {SetSDA(1);//SDA=1; //应答方式:读完所要求的字节数据后将SDA线拉高,即
00CE .dbline 90
00CE 01E0 ldi R16,1
00D0 D4DF rcall _SetSDA
00D2 .dbline 91
00D2 ; SetSCL(1);//SCL=1; //应答1,为结束IIC总线操作做准备
00D2 01E0 ldi R16,1
00D4 CADF rcall _SetSCL
00D6 .dbline 92
00D6 ; NOPNOP(50);
00D6 02E3 ldi R16,50
00D8 C2DF rcall _NOPNOP
00DA .dbline 97
00DA ; //_nop_();
00DA ; //_nop_();
00DA ; //_nop_();
00DA ; //_nop_();
00DA ; SetSCL(0);//SCL=0;
00DA 0027 clr R16
00DC C6DF rcall _SetSCL
00DE .dbline 98
00DE ; SetSDA(0);//SDA=0;
00DE 0027 clr R16
00E0 .dbline -2
00E0 .dbline 99
00E0 ; }
00E0 L29:
00E0 .dbline 0 ; func end
00E0 CCCF rjmp _SetSDA
00E2 .dbend
00E2 .dbfunc e Check_Ack _Check_Ack fV
.even
00E2 _Check_Ack::
00E2 .dbline -1
00E2 .dbline 102
00E2 ;
00E2 ; void Check_Ack() //检查IIC器件应答情况
00E2 ; {SetSDA(1);//SDA=1;
00E2 .dbline 102
00E2 01E0 ldi R16,1
00E4 CADF rcall _SetSDA
00E6 .dbline 103
00E6 ; SetSCL(1);//SCL=1;
00E6 01E0 ldi R16,1
00E8 C0DF rcall _SetSCL
00EA .dbline 104
00EA ; F_Flag=0;//F0=0;
00EA 2224 clr R2
00EC 20920000 sts _F_Flag,R2
00F0 .dbline 105
00F0 ; DDRC=DDRC&0xfd; //设置SDA为输入
00F0 84B3 in R24,0x14
00F2 8D7F andi R24,253
00F4 84BB out 0x14,R24
00F6 .dbline 107
00F6 ; //if(SDA==0)
00F6 ; if((PINC&0x02)==0)
00F6 9999 sbic 0x13,1
00F8 05C0 rjmp L31
00FA .dbline 108
00FA ; {
00FA .dbline 109
00FA ; SetSCL(0);//SCL=0;
00FA 0027 clr R16
00FC B6DF rcall _SetSCL
00FE .dbline 110
00FE ; NOPNOP(50);
00FE 02E3 ldi R16,50
0100 AEDF rcall _NOPNOP
0102 .dbline 115
0102 ; //_nop_();
0102 ; //_nop_();
0102 ; //_nop_();
0102 ; //_nop_();
0102 ; }
0102 07C0 rjmp L32
0104 L31:
0104 .dbline 117
0104 ; else
0104 ; {
0104 .dbline 118
0104 ; F_Flag=1;//F0=1;
0104 81E0 ldi R24,1
0106 80930000 sts _F_Flag,R24
010A .dbline 119
010A ; SetSCL(0);//SCL=0;
010A 0027 clr R16
010C AEDF rcall _SetSCL
010E .dbline 120
010E ; NOPNOP(50);
010E 02E3 ldi R16,50
0110 A6DF rcall _NOPNOP
0112 .dbline 125
0112 ; //_nop_();
0112 ; //_nop_();
0112 ; //_nop_();
0112 ; //_nop_();
0112 ; }
0112 L32:
0112 .dbline 126
0112 ; DDRC=DDRC|0x02; //重新设置SDA为输出
0112 A19A sbi 0x14,1
0114 .dbline -2
0114 .dbline 127
0114 ; }
0114 L30:
0114 .dbline 0 ; func end
0114 0895 ret
0116 .dbend
0116 .dbfunc e Write_Bit0 _Write_Bit0 fV
.even
0116 _Write_Bit0::
0116 .dbline -1
0116 .dbline 130
0116 ;
0116 ; void Write_Bit0() //写1bit数据:0
0116 ; {SetSDA(0);//SDA=0;
0116 .dbline 130
0116 0027 clr R16
0118 B0DF rcall _SetSDA
011A .dbline 131
011A ; SetSCL(1);//SCL=1;
011A 01E0 ldi R16,1
011C A6DF rcall _SetSCL
011E .dbline 132
011E ; NOPNOP(50);
011E 02E3 ldi R16,50
0120 9EDF rcall _NOPNOP
0122 .dbline 137
0122 ; //_nop_();
0122 ; //_nop_();
0122 ; //_nop_();
0122 ; //_nop_();
0122 ; SetSCL(0);//SCL=0;
0122 0027 clr R16
0124 .dbline -2
0124 .dbline 138
0124 ; }
0124 L33:
0124 .dbline 0 ; func end
0124 A2CF rjmp _SetSCL
0126 .dbend
0126 .dbfunc e Write_Bit1 _Write_Bit1 fV
.even
0126 _Write_Bit1::
0126 .dbline -1
0126 .dbline 141
0126 ;
0126 ; void Write_Bit1() //写1bit数据:1
0126 ; {SetSDA(1);//SDA=1;
0126 .dbline 141
0126 01E0 ldi R16,1
0128 A8DF rcall _SetSDA
012A .dbline 142
012A ; SetSCL(1);//SCL=1;
012A 01E0 ldi R16,1
012C 9EDF rcall _SetSCL
012E .dbline 143
012E ; NOPNOP(50);
012E 02E3 ldi R16,50
0130 96DF rcall _NOPNOP
0132 .dbline 148
0132 ; //_nop_();
0132 ; //_nop_();
0132 ; //_nop_();
0132 ; //_nop_();
0132 ; SetSCL(0);//SCL=0;
0132 0027 clr R16
0134 9ADF rcall _SetSCL
0136 .dbline 149
0136 ; SetSDA(0);//SDA=0;
0136 0027 clr R16
0138 .dbline -2
0138 .dbline 150
0138 ; }
0138 L34:
0138 .dbline 0 ; func end
0138 A0CF rjmp _SetSDA
013A .dbend
013A .dbfunc e Write_Byte _Write_Byte fV
013A ; i -> R20
013A ; Data -> R22
.even
013A _Write_Byte::
013A 00D0 rcall push_gset2
013C 602F mov R22,R16
013E .dbline -1
013E .dbline 153
013E ;
013E ; void Write_Byte(uchar Data) //写一字节数据:Data:要写入的数据
013E ; {uchar i;
013E .dbline 154
013E ; for(i=0;i<8;i++)
013E 4427 clr R20
0140 0AC0 rjmp L39
0142 L36:
0142 .dbline 155
0142 ; {if((Data&0x80)>0) //传输位从高位到低位,先传最高位
0142 .dbline 155
0142 2224 clr R2
0144 862F mov R24,R22
0146 8078 andi R24,128
0148 2816 cp R2,R24
014A 10F4 brsh L40
014C .dbline 156
014C ; Write_Bit1();
014C ECDF rcall _Write_Bit1
014E 01C0 rjmp L41
0150 L40:
0150 .dbline 158
0150 ; else
0150 ; Write_Bit0();
0150 E2DF rcall _Write_Bit0
0152 L41:
0152 .dbline 159
0152 660F lsl R22
0154 .dbline 160
0154 L37:
0154 .dbline 154
0154 4395 inc R20
0156 L39:
0156 .dbline 154
0156 4830 cpi R20,8
0158 A0F3 brlo L36
015A .dbline -2
015A .dbline 161
015A ; Data<<=1; //数据左移
015A ; }
015A ; }
015A L35:
015A 00D0 rcall pop_gset2
015C .dbline 0 ; func end
015C 0895 ret
015E .dbsym r i 20 c
015E .dbsym r Data 22 c
015E .dbend
015E .dbfunc e Read_Byte _Read_Byte fc
015E ; j -> R20
015E ; nn -> R22
.even
015E _Read_Byte::
015E 00D0 rcall push_gset2
0160 .dbline -1
0160 .dbline 165
0160 ;
0160 ;
0160 ; uchar Read_Byte() //读一字节数据:返回值即读的数据
0160 ; {uchar nn=0xff; //nn:初始化为0xff,读入的数据也放在此
0160 .dbline 165
0160 6FEF ldi R22,255
0162 .dbline 167
0162 ; uchar j;
0162 ; for (j=0;j<8;j++)
0162 4427 clr R20
0164 13C0 rjmp L46
0166 L43:
0166 .dbline 168
0166 ; {SetSDA(1);//SDA=1;
0166 .dbline 168
0166 01E0 ldi R16,1
0168 88DF rcall _SetSDA
016A .dbline 169
016A ; SetSCL(1);//SCL=1;
016A 01E0 ldi R16,1
016C 7EDF rcall _SetSCL
016E .dbline 170
016E ; DDRC=DDRC&0xfd;//设置SDA为输入线
016E 84B3 in R24,0x14
0170 8D7F andi R24,253
0172 84BB out 0x14,R24
0174 .dbline 172
0174 ; //if(SDA==0) //数据读出,若是0则移位;若是1则与0x01或
0174 ; if((PINC&0x02)==0)
0174 9999 sbic 0x13,1
0176 05C0 rjmp L47
0178 .dbline 173
0178 ; {nn<<=1;
0178 .dbline 173
0178 660F lsl R22
017A .dbline 174
017A ; nn=(nn&0xfe);
017A 6E7F andi R22,254
017C .dbline 175
017C ; SetSCL(0);}//SCL=0;}
017C 0027 clr R16
017E 75DF rcall _SetSCL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -