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

📄 iic.lis

📁 AVR单片机对DS3231的读写操作源代码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00D8                   .dbfunc e ReceiveData _ReceiveData fc
 00D8           ;          value -> R20
 00D8           ;           temp -> R22
 00D8           ;          count -> R10
                        .even
 00D8           _ReceiveData::
 00D8 00D0              rcall push_gset3
 00DA                   .dbline -1
 00DA                   .dbline 76
 00DA           ; }
 00DA           ; /////////////接收数据///////////////////
 00DA           ; uchar  ReceiveData(void)  
 00DA           ; {
 00DA                   .dbline 79
 00DA           ;  uchar count;
 00DA           ;  uchar temp;
 00DA           ;  uchar value=0;
 00DA 4427              clr R20
 00DC                   .dbline 80
 00DC           ;  DDRD&=~0x04;//设置为输入
 00DC 8A98              cbi 0x11,2
 00DE                   .dbline 81
 00DE           ;   for(count=0;count!=8;count++)
 00DE AA24              clr R10
 00E0 12C0              rjmp L29
 00E2           L26:
 00E2                   .dbline 82
 00E2           ;       {
 00E2                   .dbline 83
 00E2           ;        value<<=1;
 00E2 440F              lsl R20
 00E4                   .dbline 84
 00E4           ;        CLK(1); DelayMs(2);
 00E4 01E0              ldi R16,1
 00E6 9BDF              rcall _CLK
 00E8                   .dbline 84
 00E8 02E0              ldi R16,2
 00EA 8ADF              rcall _DelayMs
 00EC                   .dbline 85
 00EC           ;        temp=PIND;//读引脚
 00EC 60B3              in R22,0x10
 00EE                   .dbline 86
 00EE           ;        if((temp&0x04)==0x04) value++;
 00EE 862F              mov R24,R22
 00F0 8470              andi R24,4
 00F2 8430              cpi R24,4
 00F4 09F4              brne L30
 00F6                   .dbline 86
 00F6 4395              inc R20
 00F8           L30:
 00F8                   .dbline 87
 00F8 02E0              ldi R16,2
 00FA 82DF              rcall _DelayMs
 00FC                   .dbline 88
 00FC 0027              clr R16
 00FE 8FDF              rcall _CLK
 0100                   .dbline 88
 0100 02E0              ldi R16,2
 0102 7EDF              rcall _DelayMs
 0104                   .dbline 89
 0104           L27:
 0104                   .dbline 81
 0104 A394              inc R10
 0106           L29:
 0106                   .dbline 81
 0106 8A2D              mov R24,R10
 0108 8830              cpi R24,8
 010A 59F7              brne L26
 010C                   .dbline 90
 010C           ;        DelayMs(2);
 010C           ;        CLK(0); DelayMs(2);
 010C           ;       }
 010C           ;  DDRD|=0x04;//设置为输出
 010C 8A9A              sbi 0x11,2
 010E                   .dbline 92
 010E           ;  //以下输出NOACK
 010E           ;  CLK(0);DelayMs(2);
 010E 0027              clr R16
 0110 86DF              rcall _CLK
 0112                   .dbline 92
 0112 02E0              ldi R16,2
 0114 75DF              rcall _DelayMs
 0116                   .dbline 93
 0116           ;  IO(1);DelayMs(2);
 0116 01E0              ldi R16,1
 0118 88DF              rcall _IO
 011A                   .dbline 93
 011A 02E0              ldi R16,2
 011C 71DF              rcall _DelayMs
 011E                   .dbline 94
 011E           ;  CLK(1);DelayMs(2);
 011E 01E0              ldi R16,1
 0120 7EDF              rcall _CLK
 0122                   .dbline 94
 0122 02E0              ldi R16,2
 0124 6DDF              rcall _DelayMs
 0126                   .dbline 95
 0126           ;  CLK(0);DelayMs(2);
 0126 0027              clr R16
 0128 7ADF              rcall _CLK
 012A                   .dbline 95
 012A 02E0              ldi R16,2
 012C 69DF              rcall _DelayMs
 012E                   .dbline 96
 012E           ;  return value;
 012E 042F              mov R16,R20
 0130                   .dbline -2
 0130           L25:
 0130 00D0              rcall pop_gset3
 0132                   .dbline 0 ; func end
 0132 0895              ret
 0134                   .dbsym r value 20 c
 0134                   .dbsym r temp 22 c
 0134                   .dbsym r count 10 c
 0134                   .dbend
 0134                   .dbfunc e Write24c02_OneByte _Write24c02_OneByte fV
 0134           ;          ddata -> R20
 0134           ;           addr -> R22
                        .even
 0134           _Write24c02_OneByte::
 0134 00D0              rcall push_gset2
 0136 422F              mov R20,R18
 0138 602F              mov R22,R16
 013A                   .dbline -1
 013A                   .dbline 103
 013A           ; }
 013A           ; 
 013A           ; //////////////以下供main调用/////////////////
 013A           ; 
 013A           ; //向addr写一个数据
 013A           ; void Write24c02_OneByte(unsigned char addr,unsigned char ddata)
 013A           ; {
 013A                   .dbline 105
 013A           ; 
 013A           ;     Start();
 013A 7DDF              rcall _Start
 013C                   .dbline 106
 013C           ;       SendData(0xa0);//器件寻址
 013C 00EA              ldi R16,160
 013E A5DF              rcall _SendData
 0140                   .dbline 107
 0140           ;       SendData(addr);//存储器寻址
 0140 062F              mov R16,R22
 0142 A3DF              rcall _SendData
 0144                   .dbline 108
 0144           ;       SendData(ddata);//写入数据
 0144 042F              mov R16,R20
 0146 A1DF              rcall _SendData
 0148                   .dbline 109
 0148           ;       Stop();
 0148 8BDF              rcall _Stop
 014A                   .dbline 110
 014A           ;       DelayMs(2000);
 014A 00ED              ldi R16,208
 014C 59DF              rcall _DelayMs
 014E                   .dbline -2
 014E           L32:
 014E 00D0              rcall pop_gset2
 0150                   .dbline 0 ; func end
 0150 0895              ret
 0152                   .dbsym r ddata 20 c
 0152                   .dbsym r addr 22 c
 0152                   .dbend
 0152                   .dbfunc e Read24c02_OneByte _Read24c02_OneByte fc
 0152           ;           temp -> R20
 0152           ;           addr -> R20
                        .even
 0152           _Read24c02_OneByte::
 0152 00D0              rcall push_gset1
 0154 402F              mov R20,R16
 0156                   .dbline -1
 0156                   .dbline 115
 0156           ; }
 0156           ; ///////////////////////////////
 0156           ; //从addr读一个数据
 0156           ; unsigned char Read24c02_OneByte(unsigned char addr)
 0156           ; {
 0156                   .dbline 117
 0156           ;     uchar temp;
 0156           ;     Start();
 0156 6FDF              rcall _Start
 0158                   .dbline 118
 0158           ;       SendData(0xa0);//器件寻址
 0158 00EA              ldi R16,160
 015A 97DF              rcall _SendData
 015C                   .dbline 119
 015C           ;       SendData(addr);//存储器寻址
 015C 042F              mov R16,R20
 015E 95DF              rcall _SendData
 0160                   .dbline 120
 0160           ;       Start();
 0160 6ADF              rcall _Start
 0162                   .dbline 121
 0162           ;     SendData(0xa1);   //设置读
 0162 01EA              ldi R16,161
 0164 92DF              rcall _SendData
 0166                   .dbline 122
 0166           ;       temp = ReceiveData();//读取数据
 0166 B8DF              rcall _ReceiveData
 0168 402F              mov R20,R16
 016A                   .dbline 123
 016A           ;       Stop();
 016A 7ADF              rcall _Stop
 016C                   .dbline 124
 016C           ;       DelayMs(2000);
 016C 00ED              ldi R16,208
 016E 48DF              rcall _DelayMs
 0170                   .dbline 125
 0170           ;       return temp;    
 0170 042F              mov R16,R20
 0172                   .dbline -2
 0172           L33:
 0172 00D0              rcall pop_gset1
 0174                   .dbline 0 ; func end
 0174 0895              ret
 0176                   .dbsym r temp 20 c
 0176                   .dbsym r addr 20 c
 0176                   .dbend
 0176                   .dbfunc e WriteDs3231_OneByte _WriteDs3231_OneByte fV
 0176           ;          ddata -> R20
 0176           ;           addr -> R22
                        .even
 0176           _WriteDs3231_OneByte::
 0176 00D0              rcall push_gset2
 0178 422F              mov R20,R18
 017A 602F              mov R22,R16
 017C                   .dbline -1
 017C                   .dbline 129
 017C           ; 
 017C           ; }
 017C           ; void WriteDs3231_OneByte(unsigned char addr,unsigned char ddata)
 017C           ; { 
 017C                   .dbline 130
 017C           ;     Start();
 017C 5CDF              rcall _Start
 017E                   .dbline 131
 017E           ;  SendData(0xd0);//器件寻址
 017E 00ED              ldi R16,208
 0180 84DF              rcall _SendData
 0182                   .dbline 132
 0182           ;  SendData(addr);//存储器寻址
 0182 062F              mov R16,R22
 0184 82DF              rcall _SendData
 0186                   .dbline 133
 0186           ;  SendData(ddata);//写入数据
 0186 042F              mov R16,R20
 0188 80DF              rcall _SendData
 018A                   .dbline 134
 018A           ;  Stop();
 018A 6ADF              rcall _Stop
 018C                   .dbline 135
 018C           ;  DelayMs(2000);
 018C 00ED              ldi R16,208
 018E 38DF              rcall _DelayMs
 0190                   .dbline -2
 0190           L34:
 0190 00D0              rcall pop_gset2
 0192                   .dbline 0 ; func end
 0192 0895              ret
 0194                   .dbsym r ddata 20 c
 0194                   .dbsym r addr 22 c
 0194                   .dbend
 0194                   .dbfunc e ReadDs3231_OneByte _ReadDs3231_OneByte fc
 0194           ;           temp -> R20
 0194           ;           addr -> R20
                        .even
 0194           _ReadDs3231_OneByte::
 0194 00D0              rcall push_gset1
 0196 402F              mov R20,R16
 0198                   .dbline -1
 0198                   .dbline 140
 0198           ; }
 0198           ; ///////////////////////////////
 0198           ; //从addr读一个数据
 0198           ; unsigned char ReadDs3231_OneByte(unsigned char addr)
 0198           ; {
 0198                   .dbline 142
 0198           ;     uchar temp;
 0198           ;     Start();
 0198 4EDF              rcall _Start
 019A                   .dbline 143
 019A           ;  SendData(0xd0);//器件寻址
 019A 00ED              ldi R16,208
 019C 76DF              rcall _SendData
 019E                   .dbline 144
 019E           ;  SendData(addr);//存储器寻址
 019E 042F              mov R16,R20
 01A0 74DF              rcall _SendData
 01A2                   .dbline 145
 01A2           ;  Start();
 01A2 49DF              rcall _Start
 01A4                   .dbline 146
 01A4           ;     SendData(0xd1);   //设置读
 01A4 01ED              ldi R16,209
 01A6 71DF              rcall _SendData
 01A8                   .dbline 147
 01A8           ;  temp = ReceiveData();//读取数据
 01A8 97DF              rcall _ReceiveData
 01AA 402F              mov R20,R16
 01AC                   .dbline 148
 01AC           ;  Stop();
 01AC 59DF              rcall _Stop
 01AE                   .dbline 149
 01AE           ;  DelayMs(2000);
 01AE 00ED              ldi R16,208
 01B0 27DF              rcall _DelayMs
 01B2                   .dbline 150
 01B2           ;  return temp;    
 01B2 042F              mov R16,R20
 01B4                   .dbline -2
 01B4           L35:
 01B4 00D0              rcall pop_gset1
 01B6                   .dbline 0 ; func end
 01B6 0895              ret
 01B8                   .dbsym r temp 20 c
 01B8                   .dbsym r addr 20 c
 01B8                   .dbend

⌨️ 快捷键说明

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