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

📄 iic.lis

📁 AVR单片机对DS3231的读写操作源代码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .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 + -