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

📄 m16i2crw24c02.lis

📁 AVR程序
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module M16I2CRW24C02.c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\job\M16学习板\I2C读写24C02(实验十)\M16I2CRW24C02.c
 0000                   .dbfile F:\job\M16学习板\I2C读写24C02(实验十)\..\ICC_H\SOFTWARE.H
 0000                   .dbfunc e ChangeIntToHex _ChangeIntToHex fV
 0000           ;            dec -> R20,R21
                        .even
 0000           _ChangeIntToHex::
 0000 0E940000          xcall push_gset1
 0004 A801              movw R20,R16
 0006                   .dbline -1
 0006                   .dbline 136
 0006           ; /*******************************************************************
 0006           ;                       实验十
 0006           ; 实验名称: I2C读写24C02实验
 0006           ; 实验目的: 学习AVR单片机的TWI功能
 0006           ; 实验现象: 先在24C02中写入一段数据,然后断电,再送电,将EEPROM中的数据发
 0006           ;                 送给PC机
 0006           ; 环      境: ICCAVR6.31A
 0006           ; 设 计 者: shinea8868
 0006           ; 说    明: 部分程序原型源自网络,经本人修改调试可用,请尊重知识产权,如
 0006           ;                 作商业用途请保留本段文字
 0006           ; 完成日期: 2007年4月10日
 0006           ; *******************************************************************/
 0006           ; #include <iom16v.h>
 0006           ; #include <macros.h>
 0006           ; #include "..\ICC_H\SOFTWARE.H"
 0006           ; #include "..\ICC_H\I2C.H"
 0006           ; 
 0006           ; //设定读写地址
 0006           ; #define WADD24C02 0xa0        //写字节命令及器件地址(根据地址实际情况改变), 1010 A2 A1 A0 0
 0006           ; #define RADD24C02 0xa1        //读命令字节及器件地址(根据地址实际情况改变), 1010 A2 A1 A0 1
 0006           ; /*-----------------------------------------------------------------
 0006           ; 函数名称: void Uart0Init(void) 
 0006           ; 函数功能: 串口初始化
 0006           ;                 波特率 600 0.2% 字符长度 8bit 无奇偶校验
 0006           ; 参    数: 
 0006           ; 返 回 值: 无
 0006           ; -----------------------------------------------------------------*/
 0006           ; void Uart0Init(void)
 0006           ; {
 0006           ;       UCSRB = 0x00;                                   //关串口
 0006           ;       UCSRA = 0x02;                                   //倍速模式   M16中文P151
 0006           ;       UCSRC = BIT(URSEL) | 0x06;              //写UCSRC寄存器,设定8个bit
 0006           ;       UBRR  = 12;                                     //设定串口波特率为600
 0006           ;       UCSRB = 0x98;                                   //开串口
 0006           ; }
 0006           ; /*-----------------------------------------------------------------
 0006           ; 函数名称: void UartRecvData(void)
 0006           ; 函数功能: 
 0006           ; 参    数: 
 0006           ; 返 回 值: 无
 0006           ; -----------------------------------------------------------------*/
 0006           ; #pragma interrupt_handler UartRecvData:12
 0006           ; void UartRecvData(void)
 0006           ; {
 0006           ;       uchar temp1;
 0006           ;       temp1 = UDR;
 0006           ; }
 0006           ; /*-----------------------------------------------------------------
 0006           ; 函数名称: void UartTransmitData(uchar *SendData, uchar len)
 0006           ; 函数功能: 发送字符串
 0006           ; 参    数: SendData  发送字符串的首地址
 0006           ;                 len           发送字符串的长度
 0006           ; 返 回 值: 无
 0006           ; -----------------------------------------------------------------*/
 0006           ; void UartTransmitData(uchar *SendData, uint len)
 0006           ; {
 0006           ;       uint i;
 0006           ;       for( i = 0; i < len; i++)
 0006           ;       {
 0006           ;               while(!(UCSRA&0x20));                           //判断数据寄存器是否为空
 0006           ;                       UDR = SendData[i];
 0006           ;       }
 0006           ; }
 0006           ; /*-----------------------------------------------------------------
 0006           ; 函数名称: void InitDevices(void) 
 0006           ; 函数功能: 初始化各种信息
 0006           ; 参    数: 
 0006           ; 返 回 值: 无
 0006           ; -----------------------------------------------------------------*/
 0006           ; void InitDevices(void)
 0006           ; {
 0006           ;       CLI();                                                          //关全部中断
 0006           ;       Uart0Init();
 0006           ;       SEI();                                                          //开全中断
 0006           ; }
 0006           ; 
 0006           ; void main(void)
 0006           ; {
 0006           ;       
 0006           ;       /*第一次写程序*/
 0006           ; /*    uchar temp[] = "abcdefgh";                      //上电初始化24C02中的数据,
 0006           ;       I2C_Write_(WADD24C02,0,temp,8);         //断电后屏蔽初始化程序,打开下面的程序*/
 0006           ;       uchar i,temp2[8];
 0006           ;       uint j;
 0006           ;       j = 2000;
 0006           ;       InitDevices();
 0006           ;       while(j --);
 0006           ;       {
 0006           ;               i = 167;
 0006           ;               while(i--);
 0006           ;       }
 0006           ;       I2C_Read_(WADD24C02,0x00,RADD24C02,temp2,8);
 0006           ;       j = 2000;
 0006           ;       while(j --);
 0006           ;       {
 0006           ;               i = 167;
 0006           ;               while(i--);
 0006           ;       }
 0006           ;       UartTransmitData(temp2, 8);
 0006           ;       while(1);
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006           ; }
 0006                   .dbline 137
 0006           ; }
 0006 FA01              movw R30,R20
 0008 2080              ldd R2,z+0
 000A 3324              clr R3
 000C 1AE0              ldi R17,10
 000E 022D              mov R16,R2
 0010 0E940000          xcall mod8u
 0014 402E              mov R4,R16
 0016 1AE0              ldi R17,10
 0018 022D              mov R16,R2
 001A 0E940000          xcall div8u
 001E 802F              mov R24,R16
 0020 8F70              andi R24,#0x0F
 0022 8295              swap R24
 0024 8429              or R24,R4
 0026 FA01              movw R30,R20
 0028 8083              std z+0,R24
 002A                   .dbline -2
 002A           L1:
 002A 0E940000          xcall pop_gset1
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbsym r dec 20 pc
 0030                   .dbend
 0030                   .dbfunc e ChangeHexToInt _ChangeHexToInt fV
 0030           ;            hex -> R16,R17
                        .even
 0030           _ChangeHexToInt::
 0030                   .dbline -1
 0030                   .dbline 166
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030           ; }
 0030                   .dbline 167
 0030           ; }
 0030 F801              movw R30,R16
 0032 2080              ldd R2,z+0
 0034 3324              clr R3
 0036 822D              mov R24,R2
 0038 8295              swap R24
 003A 8F70              andi R24,#0x0F
 003C 9AE0              ldi R25,10
 003E 989F              mul R25,R24
 0040 822D              mov R24,R2
 0042 8F70              andi R24,15
 0044 202C              mov R2,R0
 0046 280E              add R2,R24
 0048 2082              std z+0,R2
 004A                   .dbline -2
 004A           L2:
 004A                   .dbline 0 ; func end
 004A 0895              ret
 004C                   .dbsym r hex 16 pc
 004C                   .dbend
 004C                   .dbfunc e Delay _Delay fV
 004C           ;              i -> R16
                        .even
 004C           _Delay::
 004C                   .dbline -1
 004C                   .dbline 180
 004C           ; }
 004C           ; }
 004C           ; }
 004C           ; }
 004C           ; }
 004C           ; }
 004C           ; }
 004C           ; }
 004C           ; }
 004C           ; }
 004C           ; }
 004C           ; }
 004C           ; }
 004C                   .dbline 182
 004C           ; }
 004C           ; }
 004C 08EC              ldi R16,200
 004E           L4:
 004E                   .dbline 183
 004E           L5:
 004E                   .dbline 183
 004E           ; }
 004E 202E              mov R2,R16
 0050 3324              clr R3
 0052 0150              subi R16,1
 0054 2220              tst R2
 0056 D9F7              brne L4
 0058                   .dbline -2
 0058           L3:
 0058                   .dbline 0 ; func end
 0058 0895              ret
 005A                   .dbsym r i 16 c
 005A                   .dbend
 005A                   .dbfile F:\job\M16学习板\I2C读写24C02(实验十)\..\ICC_H\I2C.H
 005A                   .dbfunc e I2C_Start _I2C_Start fc
                        .even
 005A           _I2C_Start::
 005A                   .dbline -1
 005A                   .dbline 126
 005A                   .dbline 127
 005A 84EA              ldi R24,164
 005C 86BF              out 0x36,R24
 005E                   .dbline 128
 005E           L8:
 005E                   .dbline 128
 005E           L9:
 005E                   .dbline 128
 005E 26B6              in R2,0x36
 0060 27FE              sbrs R2,7
 0062 FDCF              rjmp L8
 0064                   .dbline 128
 0064                   .dbline 128
 0064                   .dbline 129
 0064 81B1              in R24,0x1
 0066 887F              andi R24,248
 0068 8830              cpi R24,8
 006A 11F0              breq L11
 006C                   .dbline 130
 006C 0027              clr R16
 006E 01C0              xjmp L7
 0070           L11:
 0070                   .dbline 131
 0070 01E0              ldi R16,1
 0072                   .dbline -2
 0072           L7:
 0072                   .dbline 0 ; func end
 0072 0895              ret
 0074                   .dbend
 0074                   .dbfunc e I2C_Restart _I2C_Restart fc
                        .even
 0074           _I2C_Restart::
 0074                   .dbline -1
 0074                   .dbline 142
 0074                   .dbline 143
 0074 84EA              ldi R24,164
 0076 86BF              out 0x36,R24
 0078                   .dbline 144
 0078           L14:
 0078                   .dbline 144
 0078           L15:
 0078                   .dbline 144
 0078 26B6              in R2,0x36
 007A 27FE              sbrs R2,7
 007C FDCF              rjmp L14
 007E                   .dbline 144
 007E                   .dbline 144
 007E                   .dbline 145
 007E 81B1              in R24,0x1
 0080 887F              andi R24,248
 0082 8031              cpi R24,16
 0084 11F0              breq L17
 0086                   .dbline 146
 0086 0027              clr R16
 0088 01C0              xjmp L13
 008A           L17:
 008A                   .dbline 147
 008A 01E0              ldi R16,1
 008C                   .dbline -2
 008C           L13:
 008C                   .dbline 0 ; func end
 008C 0895              ret
 008E                   .dbend
 008E                   .dbfunc e I2C_SendWrDAdr _I2C_SendWrDAdr fc
 008E           ;         wrDAdr -> R16
                        .even
 008E           _I2C_SendWrDAdr::
 008E                   .dbline -1
 008E                   .dbline 158
 008E                   .dbline 159
 008E                   .dbline 159
 008E 03B9              out 0x3,R16
 0090                   .dbline 159
 0090 84E8              ldi R24,132
 0092 86BF              out 0x36,R24
 0094                   .dbline 159
 0094                   .dbline 159

⌨️ 快捷键说明

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