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

📄 pcf8591.lst

📁 ATmega16应用例子
💻 LST
📖 第 1 页 / 共 4 页
字号:
(0342) 
(0343) 	return I2C_CRR;
    018C E001      LDI	R16,1
    018D 940E02F5  CALL	pop_gset2
    018F 9508      RET
_I2C_Read_:
  i                    --> R20
  num                  --> R22
  pRdDat               --> R10
  rdDAdr               --> Y+8
  wordAdr              --> R20
  wrDAdr               --> R12
    0190 940E031A  CALL	push_gset4
    0192 2F42      MOV	R20,R18
    0193 0168      MOVW	R12,R16
    0194 84AA      LDD	R10,Y+10
    0195 84BB      LDD	R11,Y+11
    0196 856C      LDD	R22,Y+12
(0344) }
(0345) /*--------------------------------------------------------------------
(0346) 函数名称:I2C读器件,读N个数据
(0347) 函数功能:
(0348) 注意事项:
(0349) 提示说明:
(0350) 输    入:wrDAdr: write device-address 写器件地址
(0351) 		 wordAdr: word address 字地址
(0352) 		 rdDAdr: read device-address 读器件地址
(0353) 		 *pRdDat: p->read data 读取数据指针
(0354) 		 num: number 读取数据个数
(0355) 返    回:
(0356) --------------------------------------------------------------------*/
(0357) bool I2C_Read_(uint16 wrDAdr,uint8 wordAdr,
(0358) 			   uint8 rdDAdr,uint8 *pRdDat,uint8 num)
(0359) {
(0360)  	uint8 i;
(0361) 	
(0362) 	if( I2C_Start()==I2C_ERR )
    0197 DF12      RCALL	_I2C_Start
    0198 2300      TST	R16
    0199 F411      BNE	0x019C
(0363) 		return I2C_ERR;
    019A 2700      CLR	R16
    019B C032      RJMP	0x01CE
(0364) 
(0365) 	if( I2C_SendWrDAdr_(wrDAdr)==I2C_ERR )
    019C 0186      MOVW	R16,R12
    019D DF34      RCALL	_I2C_SendWrDAdr_
    019E 2300      TST	R16
    019F F411      BNE	0x01A2
(0366) 		return I2C_ERR;
    01A0 2700      CLR	R16
    01A1 C02C      RJMP	0x01CE
(0367) 
(0368) 	if( I2C_SendDat(wordAdr)==I2C_ERR )
    01A2 2F04      MOV	R16,R20
    01A3 DF70      RCALL	_I2C_SendDat
    01A4 2300      TST	R16
    01A5 F411      BNE	0x01A8
(0369) 		return I2C_ERR;
    01A6 2700      CLR	R16
    01A7 C026      RJMP	0x01CE
(0370) 
(0371) 	if( I2C_Restart()==I2C_ERR )
    01A8 DF0E      RCALL	_I2C_Restart
    01A9 2300      TST	R16
    01AA F411      BNE	0x01AD
(0372) 		return I2C_ERR;
    01AB 2700      CLR	R16
    01AC C021      RJMP	0x01CE
(0373) 
(0374) 	if( I2C_SendRdDAdr(rdDAdr)==I2C_ERR )
    01AD 8508      LDD	R16,Y+8
    01AE DF3D      RCALL	_I2C_SendRdDAdr
    01AF 2300      TST	R16
    01B0 F411      BNE	0x01B3
(0375) 		return I2C_ERR;
    01B1 2700      CLR	R16
    01B2 C01B      RJMP	0x01CE
(0376) 
(0377) 	for(i=0;i<num-1;i++)
    01B3 2744      CLR	R20
    01B4 C00A      RJMP	0x01BF
(0378) 		if( I2C_RcvAckDat(pRdDat+i)==I2C_ERR )
    01B5 2F04      MOV	R16,R20
    01B6 2711      CLR	R17
    01B7 0D0A      ADD	R16,R10
    01B8 1D1B      ADC	R17,R11
    01B9 DF78      RCALL	_I2C_RcvAckDat
    01BA 2300      TST	R16
    01BB F411      BNE	0x01BE
(0379) 			return I2C_ERR;
    01BC 2700      CLR	R16
    01BD C010      RJMP	0x01CE
    01BE 9543      INC	R20
    01BF 2F86      MOV	R24,R22
    01C0 5081      SUBI	R24,1
    01C1 1748      CP	R20,R24
    01C2 F390      BCS	0x01B5
(0380) 	
(0381) 	if( I2C_RcvNAckDat(pRdDat+i)==I2C_ERR )
    01C3 2F04      MOV	R16,R20
    01C4 2711      CLR	R17
    01C5 0D0A      ADD	R16,R10
    01C6 1D1B      ADC	R17,R11
    01C7 DF5A      RCALL	_I2C_RcvNAckDat
    01C8 2300      TST	R16
    01C9 F411      BNE	0x01CC
(0382) 			return I2C_ERR;
    01CA 2700      CLR	R16
    01CB C002      RJMP	0x01CE
(0383) 
(0384) 	I2C_Stop();
    01CC E984      LDI	R24,0x94
    01CD BF86      OUT	0x36,R24
(0385) }
    01CE 940E02F8  CALL	pop_gset4
    01D0 9508      RET
_delay50us:
  j                    --> R20
  t                    --> R16
    01D1 940E02FB  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) #include "D:\ICC_H\I2C.H"	//i2c即AVR的"twi"
(0050) 
(0051) /* hard configs */
(0052) #ifndef flash
(0053) 	#define flash	const
(0054) #endif
(0055) 
(0056) #ifndef code
(0057) 	#define code	const
(0058) #endif
(0059) 
(0060) #ifndef NOP
(0061) 	#define NOP()	asm("nop")
(0062) #endif
(0063) 
(0064) /* io configs */
(0065) #define sbi(io,bit)		(  io |=  (1<<bit) )	//example: sbi(PORTA,0);sbi(DDRA,0);
(0066) #define cbi(io,bit)		(  io &= ~(1<<bit) )	//example: cbi(PORTA,0);cbi(DDRA,0);
(0067) #define gbi(pin ,bit)	( pin &   (1<<bit) )	//example: gbi(PINA,0);
(0068) 
(0069) /* interrupt configs */
(0070) #define DIS_INT  asm("sei")
(0071) #define EN_INT   asm("cli")
(0072) 
(0073) /* wdt configs */
(0074) #define WDT()    asm("wdr")
(0075) 
(0076) /* bit operation */
(0077) //#ifndef BIT
(0078) //#define BIT(x)	( 1<<(x) )
(0079) //#endif
(0080) 
(0081) /* USART configs for 4 Mhz crystal */
(0082) //#define BAUD9600			25
(0083) //#define BAUD19000			12
(0084) //#define UART_TRAN_ON()	UCR |=  0x08
(0085) //#define UART_TRAN_OFF()	UCR &= ~0x08
(0086) //#define UART_RCV_ON()		UCR |=  0x10
(0087) //#define UART_RCV_OFF()	UCR &= ~0x10
(0088) 
(0089) /*--------------------------------------------------------------------
(0090) 函数全称:50us 延时
(0091) 函数功能:当然是 50us延时 啦
(0092) 注意事项:基于7.3728M晶振,稍微有点误差
(0093) 提示说明:调用Delay50us(20),得到1ms延时
(0094) 输    入:	
(0095) 返    回:无 
(0096) --------------------------------------------------------------------*/
(0097) void delay50us(sint16 t)
(0098) {
(0099)     uint8 j;		
(0100)     for(;t>0;t--)			
    01D3 C007      RJMP	0x01DB
(0101)         for(j=0;j<70;j++)	
    01D4 2744      CLR	R20
    01D5 C001      RJMP	0x01D7
    01D6 9543      INC	R20
    01D7 3446      CPI	R20,0x46
    01D8 F3E8      BCS	0x01D6
    01D9 5001      SUBI	R16,1
    01DA 4010      SBCI	R17,0
    01DB 2422      CLR	R2
    01DC 2433      CLR	R3
    01DD 1620      CP	R2,R16
    01DE 0631      CPC	R3,R17
    01DF F3A4      BLT	0x01D4
(0102)             ;
(0103) }
    01E0 940E02FE  CALL	pop_gset1
    01E2 9508      RET
_delay50ms:
  i                    --> R20
  t                    --> R16
    01E3 940E02FB  CALL	push_gset1
(0104) /*--------------------------------------------------------------------
(0105) 函数全称:50ms 延时
(0106) 函数功能:当然是 50ms延时 啦
(0107) 注意事项:基于7.3728M晶振,稍微有点误差
(0108) 提示说明:调用delay50ms(20),得到1s延时 
(0109) 输    入:
(0110) 返    回:无
(0111) --------------------------------------------------------------------*/
(0112) void delay50ms(sint16 t)
(0113) {
(0114) 	uint16 i; 
(0115) 	for(;t>0;t--)
    01E5 C00B      RJMP	0x01F1
(0116) 		for(i=0;i<52642;i++)
    01E6 2744      CLR	R20
    01E7 2755      CLR	R21
    01E8 C002      RJMP	0x01EB
    01E9 5F4F      SUBI	R20,0xFF
    01EA 4F5F      SBCI	R21,0xFF
    01EB 3A42      CPI	R20,0xA2
    01EC ECED      LDI	R30,0xCD
    01ED 075E      CPC	R21,R30
    01EE F3D0      BCS	0x01E9
    01EF 5001      SUBI	R16,1
    01F0 4010      SBCI	R17,0
    01F1 2422      CLR	R2
    01F2 2433      CLR	R3
    01F3 1620      CP	R2,R16
    01F4 0631      CPC	R3,R17
    01F5 F384      BLT	0x01E6
(0117) 			;								 
(0118) }
    01F6 940E02FE  CALL	pop_gset1
    01F8 9508      RET
_PCF8591_getAD:
  pRdDat               --> Y+8
  chan                 --> R20
  mode                 --> R22
    01F9 940E0312  CALL	push_gset2
    01FB 2F42      MOV	R20,R18
    01FC 2F60      MOV	R22,R16
    01FD 9724      SBIW	R28,4
FILE: D:\ICC_H\PCF8591.H
(0001) /*********************************************************************
(0002) 	微 雪 电 子   WaveShare   http://www.waveShare.net	
(0003) 
(0004) 目    的:   建立方便的PCF8591操作子程序
(0005) 
(0006) 目标系统:   基于任何兼容C51的微处理器
(0007) 
(0008) 应用软件:   Keil C                                               
(0009) 
(0010) 版    本:   Version 1.0
(0011) 
(0012) 圆版时间:   2004-11-26
(0013) 
(0014) 开发人员:   SEE(中文名不告诉你~怕你骂我)
(0015) 
(0016) 说	 明:   若用于商业用途,请保留此段文字或注明代码来源
(0017) 
(0018) 	深 圳 微 雪 电 子 保 留 所 有 的 版 权
(0019) *********************************************************************/
(0020) 
(0021) /*01010101010101010101010101010101010101010101010101010101010101010101
(0022) ----------------------------------------------------------------------
(0023) 版本更新记录:
(0024) 
(0025) ----------------------------------------------------------------------
(0026) 入口参数说明:
(0027) 	sbit I2C_SCL=P3^1;
(0028) 	sbit I2C_SDA=P3^0;
(0029) 	#define WR_DADR	0x90	//器件地址:A2 A1 A0 = 0 0 0
(0030) 	#define RD_DADR	0x91	//器件地址:A2 A1 A0 = 0 0 0
(0031) 
(0032) ----------------------------------------------------------------------
(0033) 待定参数说明:
(0034) 
(0035) ----------------------------------------------------------------------	
(0036) 对外变量说明:
(0037) 
(0038) ----------------------------------------------------------------------
(0039) 对外函数说明:
(0040) 
(0041) ----------------------------------------------------------------------
(0042) 10101010101010101010101010101010101010101010101010101010101010101010*/
(0043) 
(0044) #ifndef PCF8591_H
(0045) #define PCF8591_H
(0046) 
(0047) #include "D:\ICC_H\CmmICC.H"
(0048) //sbit I2C_SCL=P3^1;
(0049) //sbit I2C_SDA=P3^0;
(0050) #include "D:\ICC_H\I2C.H"
(0051) 
(0052) //器件地址:A0 A1 A2 = 0 0 0
(0053) #ifndef WR_DADR 
(0054) 	#define WR_DADR		0x90	//write device-address 
(0055) #endif
(0056) #ifndef RD_DADR 
(0057) 	#define RD_DADR		0x91	//read device-address
(0058) #endif
(0059) 
(0060) #define MODE0 	0x00	//Channel0 = AIN0;
(0061) 						//Channel1 = AIN1;
(0062) 						//Channel2 = AIN2;
(0063) 						//Channel3 = AIN3;
(0064) #define MODE1 	0x10	//Channel0 = AIN3-AIN0;
(0065) 						//Channel1 = AIN3-AIN1
(0066) 						//Channel2 = AIN3-AIN2;
(0067) #define MODE2 	0x20	//Channel0 = AIN0;
(0068) 						//Channel1 = AIN1;
(0069) 						//Channel2 = AIN3-AIN2;
(0070) #define MODE3 	0x30	//Channel0 = AIN1-AIN0;
(0071) 						//Channel1 = AIN3-AIN2;
(0072) 
(0073) #define CHNL0 	0		//Using Channel0
(0074) #define CHNL1 	1		//Using Channel1
(0075) #define CHNL2 	2		//Using Channel2
(0076) #define CHNL3 	3		//Using Channel3
(0077) 
(0078) #define DAouputEn	0x40	//0x50 or 0x60 or 0x70 is also ok!
(0079) 
(0080) /*--------------------------------------------------------------------
(0081) 函数全称:
(0082) 函数功能:
(0083) 注意事项:
(0084) 提示说明:
(0085) 输    入:	
(0086) 返    回:00H~FFH
(0087) --------------------------------------------------------------------*/
(0088) void PCF8591_getAD(uint8 mode,uint8 chan,uint8 *pRdDat)
(0089) {
(0090) 	I2C_Read(WR_DADR,mode|chan,RD_DADR,pRdDat);
    01FE 8408      LDD	R0,Y+8
    01FF 8419      LDD	R1,Y+9
    0200 821B      STD	Y+3,R1
    0201 820A      STD	Y+2,R0
    0202 E981      LDI	R24,0x91
    0203 8388      STD	Y+0,R24
    0204 2F26      MOV	R18,R22
    0205 2B24      OR	R18,R20
    0206 E900      LDI	R16,0x90
    0207 E010      LDI	R17,0
    0208 DF5A      RCALL	_I2C_Read
(0091) }
    0209 9624      ADIW	R28,4
    020A 940E02F5  CALL	pop_gset2
    020C 9508      RET
_PCF8591_setDA:
  val                  --> R20
    020D 940E02FB  CALL	push_gset1
    020F 2F40      MOV	R20,R16
    0210 9721      SBIW	R28,1
(0092) /*--------------------------------------------------------------------
(0093) 函数全称:
(0094) 函数功能:
(0095) 注意事项:
(0096) 提示说明:
(0097) 输    入:00H~FFH	
(0098) 返    回:
(0099) --------------------------------------------------------------------*/
(0100) void PCF8591_setDA(uint8 val)
(0101) {
(0102) 	I2C_Write(WR_DADR,DAouputEn,val);
    0211 8348      STD	Y+0,R20
    0212 E420      LDI	R18,0x40
    0213 E900      LDI	R16,0x90
    0214 E010      LDI	R17,0
    0215 DF2C      RCALL	_I2C_Write
(0103) }
    0216 9621      ADIW	R28,1
    0217 940E02FE  CALL	pop_gset1
    0219 9508      RET
FILE: E:\ProductPro\M16SD\ICCAVR\PCF8591\PCF8591\PCF8591.C
(0001) /*********************************************************************
(0002) 	微 雪 电 子   WaveShare   http://www.waveShare.net            	
(0003) 		                                                        

⌨️ 快捷键说明

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