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

📄 m16i2crw24c02.s

📁 AVR程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.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 + -