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

📄 eeprom.lst

📁 AVR microcontrol programme is a EEROM example
💻 LST
📖 第 1 页 / 共 4 页
字号:
    0184 F411      BNE	0x0187
(0338) 		return I2C_ERR;
    0185 2700      CLR	R16
    0186 C00A      RJMP	0x0191
(0339) 
(0340) 	if( I2C_RcvNAckDat(pRdDat)==I2C_ERR )
    0187 810E      LDD	R16,Y+6
    0188 811F      LDD	R17,Y+7
    0189 DF9C      RCALL	_I2C_RcvNAckDat
    018A 2300      TST	R16
    018B F411      BNE	0x018E
(0341) 		return I2C_ERR;
    018C 2700      CLR	R16
    018D C003      RJMP	0x0191
(0342) 
(0343) 	I2C_Stop();
    018E E984      LDI	R24,0x94
    018F BF86      OUT	0x36,R24
(0344) 
(0345) 	return I2C_CRR;
    0190 E001      LDI	R16,1
    0191 940E02EA  CALL	pop_gset2
    0193 9508      RET
_I2C_Read_:
  i                    --> R20
  num                  --> R22
  pRdDat               --> R10
  rdDAdr               --> Y+8
  wordAdr              --> R20
  wrDAdr               --> R12
    0194 940E02F2  CALL	push_gset4
    0196 2F42      MOV	R20,R18
    0197 0168      MOVW	R12,R16
    0198 84AA      LDD	R10,Y+10
    0199 84BB      LDD	R11,Y+11
    019A 856C      LDD	R22,Y+12
(0346) }
(0347) /*--------------------------------------------------------------------
(0348) 函数名称:I2C读器件,读N个数据
(0349) 函数功能:
(0350) 注意事项:
(0351) 提示说明:
(0352) 输    入:wrDAdr: write device-address 写器件地址
(0353) 		 wordAdr: word address 字地址
(0354) 		 rdDAdr: read device-address 读器件地址
(0355) 		 *pRdDat: p->read data 读取数据指针
(0356) 		 num: number 读取数据个数
(0357) 返    回:
(0358) --------------------------------------------------------------------*/
(0359) bool I2C_Read_(uint16 wrDAdr,uint8 wordAdr,
(0360) 			   uint8 rdDAdr,uint8 *pRdDat,uint8 num)
(0361) {
(0362)  	uint8 i;
(0363) 	
(0364) 	if( I2C_Start()==I2C_ERR )
    019B DF12      RCALL	_I2C_Start
    019C 2300      TST	R16
    019D F411      BNE	0x01A0
(0365) 		return I2C_ERR;
    019E 2700      CLR	R16
    019F C033      RJMP	0x01D3
(0366) 
(0367) 	if( I2C_SendWrDAdr_(wrDAdr)==I2C_ERR )
    01A0 0186      MOVW	R16,R12
    01A1 DF34      RCALL	_I2C_SendWrDAdr_
    01A2 2300      TST	R16
    01A3 F411      BNE	0x01A6
(0368) 		return I2C_ERR;
    01A4 2700      CLR	R16
    01A5 C02D      RJMP	0x01D3
(0369) 
(0370) 	if( I2C_SendDat(wordAdr)==I2C_ERR )
    01A6 2F04      MOV	R16,R20
    01A7 DF70      RCALL	_I2C_SendDat
    01A8 2300      TST	R16
    01A9 F411      BNE	0x01AC
(0371) 		return I2C_ERR;
    01AA 2700      CLR	R16
    01AB C027      RJMP	0x01D3
(0372) 
(0373) 	if( I2C_Restart()==I2C_ERR )
    01AC DF0E      RCALL	_I2C_Restart
    01AD 2300      TST	R16
    01AE F411      BNE	0x01B1
(0374) 		return I2C_ERR;
    01AF 2700      CLR	R16
    01B0 C022      RJMP	0x01D3
(0375) 
(0376) 	if( I2C_SendRdDAdr(rdDAdr)==I2C_ERR )
    01B1 8508      LDD	R16,Y+8
    01B2 DF3D      RCALL	_I2C_SendRdDAdr
    01B3 2300      TST	R16
    01B4 F411      BNE	0x01B7
(0377) 		return I2C_ERR;
    01B5 2700      CLR	R16
    01B6 C01C      RJMP	0x01D3
(0378) 
(0379) 	for(i=0;i<num-1;i++)
    01B7 2744      CLR	R20
    01B8 C00A      RJMP	0x01C3
(0380) 		if( I2C_RcvAckDat(pRdDat+i)==I2C_ERR )
    01B9 2F04      MOV	R16,R20
    01BA 2711      CLR	R17
    01BB 0D0A      ADD	R16,R10
    01BC 1D1B      ADC	R17,R11
    01BD DF78      RCALL	_I2C_RcvAckDat
    01BE 2300      TST	R16
    01BF F411      BNE	0x01C2
(0381) 			return I2C_ERR;
    01C0 2700      CLR	R16
    01C1 C011      RJMP	0x01D3
    01C2 9543      INC	R20
    01C3 2F86      MOV	R24,R22
    01C4 5081      SUBI	R24,1
    01C5 1748      CP	R20,R24
    01C6 F390      BCS	0x01B9
(0382) 	
(0383) 	if( I2C_RcvNAckDat(pRdDat+i)==I2C_ERR )
    01C7 2F04      MOV	R16,R20
    01C8 2711      CLR	R17
    01C9 0D0A      ADD	R16,R10
    01CA 1D1B      ADC	R17,R11
    01CB DF5A      RCALL	_I2C_RcvNAckDat
    01CC 2300      TST	R16
    01CD F411      BNE	0x01D0
(0384) 			return I2C_ERR;
    01CE 2700      CLR	R16
    01CF C003      RJMP	0x01D3
(0385) 
(0386) 	I2C_Stop();
    01D0 E984      LDI	R24,0x94
    01D1 BF86      OUT	0x36,R24
(0387) 	
(0388) 	return I2C_CRR;
    01D2 E001      LDI	R16,1
    01D3 940E02ED  CALL	pop_gset4
    01D5 9508      RET
_delay50us:
  j                    --> R20
  t                    --> R16
    01D6 940E02F8  CALL	push_gset1
FILE: D:\ICC_H\Hardware.H
(0001) /*********************************************************************
(0002) 	微 雪 电 子   WaveShare   http://www.waveShare.net            	
(0003) 		                                                        
(0004) 目    的:   建立AVR的硬件提取库,增加各类补丁,方便移植
(0005) 					
(0006) 目标系统:   基于AVR单片机
(0007) 		                                                                
(0008) 应用软件:   ICCAVR
(0009) 		                                                                
(0010) 版    本:   Version 1.0                                                          
(0011) 		                                                                
(0012) 圆版时间:   2005-06-25
(0013) 	
(0014) 开发人员:   SEE
(0015) 
(0016) 说    明:   若用于商业用途,请保留此段文字或注明代码来源
(0017) 	
(0018) 	深 圳 市 微 雪 电 子 有 限 公 司 保 留 所 有 的 版 权     
(0019) *********************************************************************/
(0020) 
(0021) /*01010101010101010101010101010101010101010101010101010101010101010101
(0022) ----------------------------------------------------------------------
(0023) 版本更新记录:
(0024) 
(0025) ----------------------------------------------------------------------
(0026) 入口参数说明:
(0027) 
(0028) ----------------------------------------------------------------------
(0029) 待定参数说明:
(0030) 
(0031) ----------------------------------------------------------------------	
(0032) 对外变量说明:
(0033)     
(0034) ----------------------------------------------------------------------
(0035) 对外函数说明:
(0036)    
(0037) ----------------------------------------------------------------------
(0038) 10101010101010101010101010101010101010101010101010101010101010101010*/
(0039) 
(0040) #ifndef Hardware_H
(0041) #define Hardware_H
(0042) 
(0043) #include <math.h>
(0044) #include <string.h>
(0045) #include <stdio.h>
(0046) #include <macros.h>
(0047) #include <eeprom.h>
(0048) //#include <wdt.h>
(0049) 
(0050) /* TWI configs */
(0051) //如使用ATMEGA162(没有TWI接口)之类的MCU,在加载Hardware.H前,务必加“#define NO_INCLUDE_I2C_H 1”语句
(0052) #if NO_INCLUDE_I2C_H
(0053) ;
(0054) #else
(0055) #include "D:\ICC_H\I2C.H"	//i2c即AVR的"twi"
(0056) #endif
(0057) 
(0058) /* hard configs */
(0059) #ifndef flash
(0060) 	#define flash	const
(0061) #endif
(0062) 
(0063) #ifndef code
(0064) 	#define code	const
(0065) #endif
(0066) 
(0067) #ifndef NOP
(0068) 	#define NOP()	asm("nop")
(0069) #endif
(0070) 
(0071) /* io configs */
(0072) #define sbi(io,bit)		(  io |=  (1<<bit) )	//example: sbi(PORTA,0);sbi(DDRA,0);
(0073) #define cbi(io,bit)		(  io &= ~(1<<bit) )	//example: cbi(PORTA,0);cbi(DDRA,0);
(0074) #define gbi(pin ,bit)	( pin &   (1<<bit) )	//example: gbi(PINA,0);
(0075) 
(0076) /* interrupt configs */
(0077) #define DIS_INT  asm("sei")
(0078) #define EN_INT   asm("cli")
(0079) 
(0080) /* wdt configs */
(0081) #define WDT()    asm("wdr")
(0082) 
(0083) /* bit operation */
(0084) //#ifndef BIT
(0085) //#define BIT(x)	( 1<<(x) )
(0086) //#endif
(0087) 
(0088) /* USART configs for 4 Mhz crystal */
(0089) //#define BAUD9600			25
(0090) //#define BAUD19000			12
(0091) //#define UART_TRAN_ON()	UCR |=  0x08
(0092) //#define UART_TRAN_OFF()	UCR &= ~0x08
(0093) //#define UART_RCV_ON()		UCR |=  0x10
(0094) //#define UART_RCV_OFF()	UCR &= ~0x10
(0095) 
(0096) /*--------------------------------------------------------------------
(0097) 函数全称:50us 延时
(0098) 函数功能:当然是 50us延时 啦
(0099) 注意事项:基于7.3728M晶振,稍微有点误差
(0100) 提示说明:调用delay50us(20),得到1ms延时
(0101) 输    入:	
(0102) 返    回:无 
(0103) --------------------------------------------------------------------*/
(0104) void delay50us(sint16 t)
(0105) {
(0106)     uint8 j;		
(0107)     for(;t>0;t--)			
    01D8 C007      RJMP	0x01E0
(0108)         for(j=0;j<70;j++)	
    01D9 2744      CLR	R20
    01DA C001      RJMP	0x01DC
    01DB 9543      INC	R20
    01DC 3446      CPI	R20,0x46
    01DD F3E8      BCS	0x01DB
    01DE 5001      SUBI	R16,1
    01DF 4010      SBCI	R17,0
    01E0 2422      CLR	R2
    01E1 2433      CLR	R3
    01E2 1620      CP	R2,R16
    01E3 0631      CPC	R3,R17
    01E4 F3A4      BLT	0x01D9
    01E5 940E02FB  CALL	pop_gset1
    01E7 9508      RET
_delay50ms:
  i                    --> R20
  t                    --> R16
    01E8 940E02F8  CALL	push_gset1
(0109)             ;
(0110) }
(0111) /*--------------------------------------------------------------------
(0112) 函数全称:50ms 延时
(0113) 函数功能:当然是 50ms延时 啦
(0114) 注意事项:基于7.3728M晶振,稍微有点误差
(0115) 提示说明:调用delay50ms(20),得到1s延时 
(0116) 输    入:
(0117) 返    回:无
(0118) --------------------------------------------------------------------*/
(0119) void delay50ms(sint16 t)
(0120) {
(0121) 	uint16 i; 
(0122) 	for(;t>0;t--)
    01EA C00B      RJMP	0x01F6
(0123) 		for(i=0;i<52642;i++)
    01EB 2744      CLR	R20
    01EC 2755      CLR	R21
    01ED C002      RJMP	0x01F0
    01EE 5F4F      SUBI	R20,0xFF
    01EF 4F5F      SBCI	R21,0xFF
    01F0 3A42      CPI	R20,0xA2
    01F1 ECED      LDI	R30,0xCD
    01F2 075E      CPC	R21,R30
    01F3 F3D0      BCS	0x01EE
    01F4 5001      SUBI	R16,1
    01F5 4010      SBCI	R17,0
    01F6 2422      CLR	R2
    01F7 2433      CLR	R3
    01F8 1620      CP	R2,R16
    01F9 0631      CPC	R3,R17
    01FA F384      BLT	0x01EB
    01FB 940E02FB  CALL	pop_gset1
    01FD 9508      RET
_main:
  wrDat_               --> Y+10
  wrDat                --> R20
  rdDat_               --> Y+2
  i                    --> R20
    01FE 9762      SBIW	R28,0x12
FILE: E:\微雪电子CD1\产品资料\开发板实验板\SMK系列\SMK1632\实验教程\内核及主板相关实验\内核-EEPROM\EEPROM\EEPROM.C
(0001) /*********************************************************************
(0002) 	微 雪 电 子   WaveShare   http://www.waveShare.net	
(0003) 
(0004) 功能目的:   建立EEPROM操作示例程序
(0005) 
(0006) 目标系统:   基于AVR单片机
(0007) 
(0008) 应用软件:   ICCAVR                                               
(0009) 
(0010) 版    本:   Version 1.0
(0011) 
(0012) 圆版时间:   2005-03-01
(0013) 
(0014) 开发人员:   SEE
(0015) 
(0016) 说    明:   若用于商业用途,请保留此段文字或注明代码来源
(0017) 
(0018) 	深 圳 市 微 雪 电 子 有 限 公 司 保 留 所 有 的 版 权
(0019) *********************************************************************/
(0020) 
(0021) /*01010101010101010101010101010101010101010101010101010101010101010101
(0022) ---------------------------------------------------------------------
(0023) 版本更新记录:
(0024) 
(0025) ----------------------------------------------------------------------
(0026) 实验内容:
(0027) 写入一些测试数据进EEPROM,再读出,使用PB口的LED做指示,观测是否与写入一致。
(0028) ----------------------------------------------------------------------
(0029) 硬件连接:	
(0030) 将PB口的LED指示灯使能开关切换到"ON"状态。
(0031) ----------------------------------------------------------------------
(0032) 注意事项: 
(0033) (1)若有加载库函数,请将光盘根目录下的“库函数”下的“ICC_H”文件夹拷到D盘
(0034) (2)请详细阅读:光盘根目录下的“产品资料\开发板实验板\SMK系列\SMK1632\说明资料”
(0035) 		
(0036) ----------------------------------------------------------------------
(0037) 10101010101010101010101010101010101010101010101010101010101010101010*/
(0038) 
(0039) #include <iom16v.h>
(0040) #include "D:\ICC_H\CmmICC.H"
(0041) 
(0042) #define DISP_DDR   DDRB
(0043) #define DISP_PORT  PORTB
(0044) 
(0045) /*--------------------------------------------------------------------
(0046) 函数名称:
(0047) 函数功能:
(0048) 注意事项:
(0049) 提示说明:
(0050) 输    入:
(0051) 返    回:
(0052) --------------------------------------------------------------------*/
(0053) void main(void) 
(0054) {
(0055) 	uint8 i;
(0056) 	uint8 wrDat=0xAA;
    01FF EA4A      LDI	R20,0xAA
(0057) 	uint8 wrDat_[]={1,2,3,4,5,6,7,8},rdDat_[8];
    0200 E584      LDI	R24,0x54
    0201 E090      LDI	R25,0
    0202 01FE      MOVW	R30,R28
    0203 963A      ADIW	R30,0xA
    0204 E008      LDI	R16,0x8
    0205 E010      LDI	R17,0
    0206 93FA      ST	R31,-Y
    0207 93EA      ST	R30,-Y
    0208 939A      ST	R25,-Y
    0209 938A      ST	R24,-Y
    020A 940E0334  CALL	asgncblk
(0058) 	DISP_DDR=0xFF;
    020C EF8F      LDI	R24,0xFF
    020D BB87      OUT	0x17,R24
(0059) 	EEPROMwrite(0x01,wrDat);		//写入单个数据
    020E 2F24      MOV	R18,R20
    020F E001      LDI	R16,1
    0210 E010      LDI	R17,0
    0211 940E0352  CALL	_EEPROMwrite
(0060) 	DISP_PORT=EEPROMread(0x01);		//读出用指示灯验证是否正确
    0213 E001      LDI	R16,1
    0214 E010      LDI	R17,0
    0215 940E034D  CALL	_EEPROMread
    0217 BB08      OUT	0x18,R16
(0061) 	delay50ms(40);				//有2S的观察时间
    0218 E208      LDI	R16,0x28
    0219 E010      LDI	R17,0
    021A DFCD      RCALL	_delay50ms
(0062) 	EEPROMWriteBytes(1,wrDat_,8);	//写入数组						  
    021B E088      LDI	R24,0x8
    021C E090      LDI	R25,0
    021D 8399      STD	Y+1,R25
    021E 8388      STD	Y+0,R24
    021F 019E      MOVW	R18,R28
    0220 5F26      SUBI	R18,0xF6
    0221 4F3F      SBCI	R19,0xFF
    0222 E001      LDI	R16,1
    0223 E010      LDI	R17,0
    0224 940E0387  CALL	_EEPROMWriteBytes
(0063) 	EEPROMReadBytes(1,rdDat_,8);	
    0226 E088      LDI	R24,0x8
    0227 E090      LDI	R25,0
    0228 8399      STD	Y+1,R25
    0229 8388      STD	Y+0,R24

⌨️ 快捷键说明

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