📄 iic.lis
字号:
.module IIC.C
.area text(rom, con, rel)
0000 .dbfile F:\ouravr\ds3231\IIC.C
0000 .dbfunc e DelayMs _DelayMs fV
0000 ; count -> R20,R21
0000 ; i -> R16
.even
0000 _DelayMs::
0000 00D0 rcall push_gset1
0002 .dbline -1
0002 .dbline 18
0002 ; #include <iom16v.h>
0002 ; #include <macros.h>
0002 ; #define uchar unsigned char
0002 ; #define uint unsigned int
0002 ;
0002 ; void DelayUs(uchar i);
0002 ; void CLK(uchar PD);//设置SCL的电平
0002 ; void IO(uchar PD);//设置IO的电平
0002 ; void SetIO(uchar i);//设置IO为输入输出
0002 ;
0002 ; //IIC读写函数供外部main函数调用
0002 ; void Write24c02_OneByte(unsigned char addr,unsigned char ddata);
0002 ; unsigned char Read24c02_OneByte(unsigned char addr);
0002 ; void WriteDs3231_OneByte(unsigned char addr,unsigned char ddata);
0002 ; unsigned char ReadDs3231_OneByte(unsigned char addr);
0002 ;
0002 ; void DelayMs(uchar i)
0002 ; {
0002 .dbline 20
0002 09C0 rjmp L5
0004 L2:
0004 .dbline 20
0004 44E6 ldi R20,100
0006 50E0 ldi R21,0
0008 02C0 rjmp L9
000A L6:
000A .dbline 20
000A L7:
000A .dbline 20
000A 4150 subi R20,1
000C 5040 sbci R21,0
000E L9:
000E .dbline 20
000E 4030 cpi R20,0
0010 4507 cpc R20,R21
0012 D9F7 brne L6
0014 X0:
0014 L3:
0014 .dbline 20
0014 0A95 dec R16
0016 L5:
0016 .dbline 20
0016 ; uint count;
0016 ; for(;i!=0;i--)for(count=100;count!=0;count--);
0016 0023 tst R16
0018 A9F7 brne L2
001A .dbline -2
001A L1:
001A 00D0 rcall pop_gset1
001C .dbline 0 ; func end
001C 0895 ret
001E .dbsym r count 20 i
001E .dbsym r i 16 c
001E .dbend
001E .dbfunc e CLK _CLK fV
001E ; PD -> R16
.even
001E _CLK::
001E .dbline -1
001E .dbline 24
001E ; }
001E ; //设置SCL的电平
001E ; void CLK(uchar PD)
001E ; {if(PD==1) PORTD|=0x08;//SCL置1
001E .dbline 24
001E 0130 cpi R16,1
0020 11F4 brne L11
0022 .dbline 24
0022 939A sbi 0x12,3
0024 01C0 rjmp L12
0026 L11:
0026 .dbline 25
0026 9398 cbi 0x12,3
0028 L12:
0028 .dbline -2
0028 L10:
0028 .dbline 0 ; func end
0028 0895 ret
002A .dbsym r PD 16 c
002A .dbend
002A .dbfunc e IO _IO fV
002A ; PD -> R16
.even
002A _IO::
002A .dbline -1
002A .dbline 29
002A ; else PORTD&=~0x08;//SCL置0
002A ; }
002A ; //设置IO的电平
002A ; void IO(uchar PD)
002A ; {if(PD==1) PORTD|=0x04;//IO置1
002A .dbline 29
002A 0130 cpi R16,1
002C 11F4 brne L14
002E .dbline 29
002E 929A sbi 0x12,2
0030 01C0 rjmp L15
0032 L14:
0032 .dbline 30
0032 9298 cbi 0x12,2
0034 L15:
0034 .dbline -2
0034 L13:
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbsym r PD 16 c
0036 .dbend
0036 .dbfunc e Start _Start fV
.even
0036 _Start::
0036 .dbline -1
0036 .dbline 38
0036 ; else PORTD&=~0x04;//IO置0
0036 ; }
0036 ;
0036 ;
0036 ; /////////////////////////////////
0036 ; //IIC
0036 ; //*******************Start条件****************//
0036 ; void Start(void)
0036 ; {
0036 .dbline 39
0036 ; CLK(0);DelayMs(2);
0036 0027 clr R16
0038 F2DF rcall _CLK
003A .dbline 39
003A 02E0 ldi R16,2
003C E1DF rcall _DelayMs
003E .dbline 40
003E ; IO(1); DelayMs(2);
003E 01E0 ldi R16,1
0040 F4DF rcall _IO
0042 .dbline 40
0042 02E0 ldi R16,2
0044 DDDF rcall _DelayMs
0046 .dbline 41
0046 ; CLK(1);DelayMs(2);
0046 01E0 ldi R16,1
0048 EADF rcall _CLK
004A .dbline 41
004A 02E0 ldi R16,2
004C D9DF rcall _DelayMs
004E .dbline 42
004E ; IO(0); DelayMs(2);
004E 0027 clr R16
0050 ECDF rcall _IO
0052 .dbline 42
0052 02E0 ldi R16,2
0054 D5DF rcall _DelayMs
0056 .dbline 43
0056 ; CLK(0);DelayMs(2);
0056 0027 clr R16
0058 E2DF rcall _CLK
005A .dbline 43
005A 02E0 ldi R16,2
005C D1DF rcall _DelayMs
005E .dbline -2
005E L16:
005E .dbline 0 ; func end
005E 0895 ret
0060 .dbend
0060 .dbfunc e Stop _Stop fV
.even
0060 _Stop::
0060 .dbline -1
0060 .dbline 48
0060 ; }
0060 ;
0060 ; //*******************Stop条件****************//
0060 ; void Stop(void)
0060 ; {
0060 .dbline 49
0060 ; CLK(0); DelayMs(2);
0060 0027 clr R16
0062 DDDF rcall _CLK
0064 .dbline 49
0064 02E0 ldi R16,2
0066 CCDF rcall _DelayMs
0068 .dbline 50
0068 ; IO(0); DelayMs(2);
0068 0027 clr R16
006A DFDF rcall _IO
006C .dbline 50
006C 02E0 ldi R16,2
006E C8DF rcall _DelayMs
0070 .dbline 51
0070 ; CLK(1); DelayMs(2);
0070 01E0 ldi R16,1
0072 D5DF rcall _CLK
0074 .dbline 51
0074 02E0 ldi R16,2
0076 C4DF rcall _DelayMs
0078 .dbline 52
0078 ; IO(1); DelayMs(2);
0078 01E0 ldi R16,1
007A D7DF rcall _IO
007C .dbline 52
007C 02E0 ldi R16,2
007E C0DF rcall _DelayMs
0080 .dbline 53
0080 ; CLK(0); DelayMs(2);
0080 0027 clr R16
0082 CDDF rcall _CLK
0084 .dbline 53
0084 02E0 ldi R16,2
0086 BCDF rcall _DelayMs
0088 .dbline -2
0088 L17:
0088 .dbline 0 ; func end
0088 0895 ret
008A .dbend
008A .dbfunc e SendData _SendData fV
008A ; count -> R20
008A ; Xdata -> R22
.even
008A _SendData::
008A 00D0 rcall push_gset2
008C 602F mov R22,R16
008E .dbline -1
008E .dbline 57
008E ; }
008E ; //********************发送数据************//
008E ; void SendData(uchar Xdata)
008E ; {uchar count;
008E .dbline 58
008E ; for(count=0;count!=8;count++)
008E 4427 clr R20
0090 13C0 rjmp L22
0092 L19:
0092 .dbline 59
0092 ; {
0092 .dbline 60
0092 ; CLK(0); DelayMs(2);
0092 0027 clr R16
0094 C4DF rcall _CLK
0096 .dbline 60
0096 02E0 ldi R16,2
0098 B3DF rcall _DelayMs
009A .dbline 61
009A ; if(Xdata&0x80)
009A 67FF sbrs R22,7
009C 03C0 rjmp L23
009E .dbline 62
009E ; IO(1);
009E 01E0 ldi R16,1
00A0 C4DF rcall _IO
00A2 02C0 rjmp L24
00A4 L23:
00A4 .dbline 64
00A4 ; else
00A4 ; IO(0);
00A4 0027 clr R16
00A6 C1DF rcall _IO
00A8 L24:
00A8 .dbline 65
00A8 02E0 ldi R16,2
00AA AADF rcall _DelayMs
00AC .dbline 66
00AC 01E0 ldi R16,1
00AE B7DF rcall _CLK
00B0 .dbline 66
00B0 02E0 ldi R16,2
00B2 A6DF rcall _DelayMs
00B4 .dbline 67
00B4 660F lsl R22
00B6 .dbline 68
00B6 L20:
00B6 .dbline 58
00B6 4395 inc R20
00B8 L22:
00B8 .dbline 58
00B8 4830 cpi R20,8
00BA 59F7 brne L19
00BC .dbline 70
00BC ; DelayMs(2);
00BC ; CLK(1); DelayMs(2);
00BC ; Xdata<<=1;
00BC ; }
00BC ; //以下把SDA置1释放总线
00BC ; CLK(0);DelayMs(2);
00BC 0027 clr R16
00BE AFDF rcall _CLK
00C0 .dbline 70
00C0 02E0 ldi R16,2
00C2 9EDF rcall _DelayMs
00C4 .dbline 71
00C4 ; CLK(1);DelayMs(2);
00C4 01E0 ldi R16,1
00C6 ABDF rcall _CLK
00C8 .dbline 71
00C8 02E0 ldi R16,2
00CA 9ADF rcall _DelayMs
00CC .dbline 72
00CC ; CLK(0);DelayMs(2);
00CC 0027 clr R16
00CE A7DF rcall _CLK
00D0 .dbline 72
00D0 02E0 ldi R16,2
00D2 96DF rcall _DelayMs
00D4 .dbline -2
00D4 L18:
00D4 00D0 rcall pop_gset2
00D6 .dbline 0 ; func end
00D6 0895 ret
00D8 .dbsym r count 20 c
00D8 .dbsym r Xdata 22 c
00D8 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -