📄 m16i2crw24c02.s
字号:
.module M16I2CRW24C02.c
.area text(rom, con, rel)
.dbfile F:\job\M16学习板\I2C读写24C02(实验十)\M16I2CRW24C02.c
.dbfile F:\job\M16学习板\I2C读写24C02(实验十)\..\ICC_H\SOFTWARE.H
.dbfunc e ChangeIntToHex _ChangeIntToHex fV
; dec -> R20,R21
.even
_ChangeIntToHex::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 136
; /*******************************************************************
; 实验十
; 实验名称: I2C读写24C02实验
; 实验目的: 学习AVR单片机的TWI功能
; 实验现象: 先在24C02中写入一段数据,然后断电,再送电,将EEPROM中的数据发
; 送给PC机
; 环 境: ICCAVR6.31A
; 设 计 者: shinea8868
; 说 明: 部分程序原型源自网络,经本人修改调试可用,请尊重知识产权,如
; 作商业用途请保留本段文字
; 完成日期: 2007年4月10日
; *******************************************************************/
; #include <iom16v.h>
; #include <macros.h>
; #include "..\ICC_H\SOFTWARE.H"
; #include "..\ICC_H\I2C.H"
;
; //设定读写地址
; #define WADD24C02 0xa0 //写字节命令及器件地址(根据地址实际情况改变), 1010 A2 A1 A0 0
; #define RADD24C02 0xa1 //读命令字节及器件地址(根据地址实际情况改变), 1010 A2 A1 A0 1
; /*-----------------------------------------------------------------
; 函数名称: void Uart0Init(void)
; 函数功能: 串口初始化
; 波特率 600 0.2% 字符长度 8bit 无奇偶校验
; 参 数:
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void Uart0Init(void)
; {
; UCSRB = 0x00; //关串口
; UCSRA = 0x02; //倍速模式 M16中文P151
; UCSRC = BIT(URSEL) | 0x06; //写UCSRC寄存器,设定8个bit
; UBRR = 12; //设定串口波特率为600
; UCSRB = 0x98; //开串口
; }
; /*-----------------------------------------------------------------
; 函数名称: void UartRecvData(void)
; 函数功能:
; 参 数:
; 返 回 值: 无
; -----------------------------------------------------------------*/
; #pragma interrupt_handler UartRecvData:12
; void UartRecvData(void)
; {
; uchar temp1;
; temp1 = UDR;
; }
; /*-----------------------------------------------------------------
; 函数名称: void UartTransmitData(uchar *SendData, uchar len)
; 函数功能: 发送字符串
; 参 数: SendData 发送字符串的首地址
; len 发送字符串的长度
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void UartTransmitData(uchar *SendData, uint len)
; {
; uint i;
; for( i = 0; i < len; i++)
; {
; while(!(UCSRA&0x20)); //判断数据寄存器是否为空
; UDR = SendData[i];
; }
; }
; /*-----------------------------------------------------------------
; 函数名称: void InitDevices(void)
; 函数功能: 初始化各种信息
; 参 数:
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void InitDevices(void)
; {
; CLI(); //关全部中断
; Uart0Init();
; SEI(); //开全中断
; }
;
; void main(void)
; {
;
; /*第一次写程序*/
; /* uchar temp[] = "abcdefgh"; //上电初始化24C02中的数据,
; I2C_Write_(WADD24C02,0,temp,8); //断电后屏蔽初始化程序,打开下面的程序*/
; uchar i,temp2[8];
; uint j;
; j = 2000;
; InitDevices();
; while(j --);
; {
; i = 167;
; while(i--);
; }
; I2C_Read_(WADD24C02,0x00,RADD24C02,temp2,8);
; j = 2000;
; while(j --);
; {
; i = 167;
; while(i--);
; }
; UartTransmitData(temp2, 8);
; while(1);
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 137
; }
movw R30,R20
ldd R2,z+0
clr R3
ldi R17,10
mov R16,R2
xcall mod8u
mov R4,R16
ldi R17,10
mov R16,R2
xcall div8u
mov R24,R16
andi R24,#0x0F
swap R24
or R24,R4
movw R30,R20
std z+0,R24
.dbline -2
L1:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r dec 20 pc
.dbend
.dbfunc e ChangeHexToInt _ChangeHexToInt fV
; hex -> R16,R17
.even
_ChangeHexToInt::
.dbline -1
.dbline 166
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 167
; }
movw R30,R16
ldd R2,z+0
clr R3
mov R24,R2
swap R24
andi R24,#0x0F
ldi R25,10
mul R25,R24
mov R24,R2
andi R24,15
mov R2,R0
add R2,R24
std z+0,R2
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbsym r hex 16 pc
.dbend
.dbfunc e Delay _Delay fV
; i -> R16
.even
_Delay::
.dbline -1
.dbline 180
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 182
; }
; }
ldi R16,200
L4:
.dbline 183
L5:
.dbline 183
; }
mov R2,R16
clr R3
subi R16,1
tst R2
brne L4
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfile F:\job\M16学习板\I2C读写24C02(实验十)\..\ICC_H\I2C.H
.dbfunc e I2C_Start _I2C_Start fc
.even
_I2C_Start::
.dbline -1
.dbline 126
.dbline 127
ldi R24,164
out 0x36,R24
.dbline 128
L8:
.dbline 128
L9:
.dbline 128
in R2,0x36
sbrs R2,7
rjmp L8
.dbline 128
.dbline 128
.dbline 129
in R24,0x1
andi R24,248
cpi R24,8
breq L11
.dbline 130
clr R16
xjmp L7
L11:
.dbline 131
ldi R16,1
.dbline -2
L7:
.dbline 0 ; func end
ret
.dbend
.dbfunc e I2C_Restart _I2C_Restart fc
.even
_I2C_Restart::
.dbline -1
.dbline 142
.dbline 143
ldi R24,164
out 0x36,R24
.dbline 144
L14:
.dbline 144
L15:
.dbline 144
in R2,0x36
sbrs R2,7
rjmp L14
.dbline 144
.dbline 144
.dbline 145
in R24,0x1
andi R24,248
cpi R24,16
breq L17
.dbline 146
clr R16
xjmp L13
L17:
.dbline 147
ldi R16,1
.dbline -2
L13:
.dbline 0 ; func end
ret
.dbend
.dbfunc e I2C_SendWrDAdr _I2C_SendWrDAdr fc
; wrDAdr -> R16
.even
_I2C_SendWrDAdr::
.dbline -1
.dbline 158
.dbline 159
.dbline 159
out 0x3,R16
.dbline 159
ldi R24,132
out 0x36,R24
.dbline 159
.dbline 159
.dbline 160
L20:
.dbline 160
L21:
.dbline 160
in R2,0x36
sbrs R2,7
rjmp L20
.dbline 160
.dbline 160
.dbline 161
in R24,0x1
andi R24,248
cpi R24,24
breq L23
.dbline 162
clr R16
xjmp L19
L23:
.dbline 163
ldi R16,1
.dbline -2
L19:
.dbline 0 ; func end
ret
.dbsym r wrDAdr 16 c
.dbend
.dbfunc e I2C_SendWrDAdr_ _I2C_SendWrDAdr_ fc
; wrDAdr -> R20,R21
.even
_I2C_SendWrDAdr_::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 174
.dbline 175
sbrs R20,0
rjmp L26
.dbline 176
mov R16,R20
clr R17
mov R16,R17
clr R17
sbrc R16,7
com R17
xcall _I2C_SendWrDAdr
tst R16
brne L28
.dbline 177
clr R16
xjmp L25
L28:
L26:
.dbline 178
mov R16,R20
xcall _I2C_SendWrDAdr
tst R16
brne L30
.dbline 179
clr R16
xjmp L25
L30:
.dbline 180
ldi R16,1
.dbline -2
L25:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r wrDAdr 20 i
.dbend
.dbfunc e I2C_SendRdDAdr _I2C_SendRdDAdr fc
; rdDAdr -> R16
.even
_I2C_SendRdDAdr::
.dbline -1
.dbline 191
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 192
; }
.dbline 192
out 0x3,R16
.dbline 192
ldi R24,132
out 0x36,R24
.dbline 192
.dbline 192
.dbline 193
L33:
.dbline 193
L34:
.dbline 193
; }
in R2,0x36
sbrs R2,7
rjmp L33
.dbline 193
.dbline 193
.dbline 194
; }
in R24,0x1
andi R24,248
cpi R24,64
breq L36
.dbline 195
; }
clr R16
xjmp L32
L36:
.dbline 196
; }
ldi R16,1
.dbline -2
L32:
.dbline 0 ; func end
ret
.dbsym r rdDAdr 16 c
.dbend
.dbfunc e I2C_SendRdDAdr_ _I2C_SendRdDAdr_ fc
; rdDAdr -> R20
.even
_I2C_SendRdDAdr_::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 207
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 208
; }
sbrs R20,0
rjmp L39
.dbline 209
; }
mov R16,R20
clr R17
mov R16,R17
clr R17
sbrc R16,7
com R17
xcall _I2C_SendWrDAdr
tst R16
brne L41
.dbline 210
; }
clr R16
xjmp L38
L41:
L39:
.dbline 211
; }
mov R16,R20
xcall _I2C_SendWrDAdr
tst R16
brne L43
.dbline 212
; }
clr R16
xjmp L38
L43:
.dbline 213
; }
ldi R16,1
.dbline -2
L38:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r rdDAdr 20 c
.dbend
.dbfunc e I2C_SendDat _I2C_SendDat fc
; configDat -> R16
.even
_I2C_SendDat::
.dbline -1
.dbline 224
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 225
; }
.dbline 225
out 0x3,R16
.dbline 225
ldi R24,132
out 0x36,R24
.dbline 225
.dbline 225
.dbline 226
L46:
.dbline 226
L47:
.dbline 226
; }
in R2,0x36
sbrs R2,7
rjmp L46
.dbline 226
.dbline 226
.dbline 227
; }
in R24,0x1
andi R24,248
cpi R24,40
breq L49
.dbline 228
; }
clr R16
xjmp L45
L49:
.dbline 229
; }
ldi R16,1
.dbline -2
L45:
.dbline 0 ; func end
ret
.dbsym r configDat 16 c
.dbend
.dbfunc e I2C_RcvNAckDat _I2C_RcvNAckDat fc
; pRdDat -> R16,R17
.even
_I2C_RcvNAckDat::
.dbline -1
.dbline 240
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 241
; }
ldi R24,132
out 0x36,R24
.dbline 242
L52:
.dbline 242
L53:
.dbline 242
; }
in R2,0x36
sbrs R2,7
rjmp L52
.dbline 242
.dbline 242
.dbline 243
; }
in R24,0x1
andi R24,248
cpi R24,88
breq L55
.dbline 244
; }
clr R16
xjmp L51
L55:
.dbline 245
; }
in R2,0x3
movw R30,R16
std z+0,R2
.dbline 246
; }
ldi R16,1
.dbline -2
L51:
.dbline 0 ; func end
ret
.dbsym r pRdDat 16 pc
.dbend
.dbfunc e I2C_RcvAckDat _I2C_RcvAckDat fc
; pRdDat -> R16,R17
.even
_I2C_RcvAckDat::
.dbline -1
.dbline 257
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 258
; }
ldi R24,196
out 0x36,R24
.dbline 259
L58:
.dbline 259
L59:
.dbline 259
; }
in R2,0x36
sbrs R2,7
rjmp L58
.dbline 259
.dbline 259
.dbline 260
; }
in R24,0x1
andi R24,248
cpi R24,80
breq L61
.dbline 261
; }
clr R16
xjmp L57
L61:
.dbline 262
; }
in R2,0x3
movw R30,R16
std z+0,R2
.dbline 263
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -