📄 m16i2crw24c02.lis
字号:
.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 + -