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

📄 ad7416.lst

📁 对AD7416用i2c操作,ad7416是一款用来测温的常用芯片。
💻 LST
字号:
__text_start:
__start:
    0030 E5CF      LDI	R28,0x5F
    0031 E0D4      LDI	R29,4
    0032 BFCD      OUT	P3D,R28
    0033 BFDE      OUT	P3E,R29
    0034 51C0      SUBI	R28,0x10
    0035 40D0      SBCI	R29,0
    0036 EA0A      LDI	R16,0xAA
    0037 8308      STD	R16,0+Y
    0038 2400      CLR	R0
    0039 E6E0      LDI	R30,0x60
    003A E0F0      LDI	R31,0
    003B E010      LDI	R17,0
    003C 36E2      CPI	R30,0x62
    003D 07F1      CPC	R31,R17
    003E F011      BEQ	0x0041
    003F 9201      ST	R0,Z+
    0040 CFFB      RJMP	0x003C
    0041 8300      STD	R16,0+Z
    0042 E6E0      LDI	R30,0x60
    0043 E0F0      LDI	R31,0
    0044 E6A0      LDI	R26,0x60
    0045 E0B0      LDI	R27,0
    0046 E010      LDI	R17,0
    0047 36E0      CPI	R30,0x60
    0048 07F1      CPC	R31,R17
    0049 F021      BEQ	0x004E
    004A 95C8      LPM
    004B 9631      ADIW	R30,1
    004C 920D      ST	R0,X+
    004D CFF9      RJMP	0x0047
    004E 940E009B  CALL	_main
_exit:
    0050 CFFF      RJMP	_exit
FILE: F:\程序—实验板\AD7416\AD7416.C
(0001)  
(0002) #include <iom16v.h>
(0003) #include <macros.h>
(0004) #include <stdlib.h>
(0005)  
(0006) #define SLD_R_AK  0xC4
(0007) #define SLD_R_NK  0x83
(0008) 
(0009) //TWI status
(0010) #define START_OK 0x08
(0011) #define R_STAR_OK 0x10 
(0012) #define SLA_W_OK 0x18
(0013) #define SLD_W_OK 0x28
(0014) #define SLA_R_OK 0x40
(0015) #define SLD_R_AK_OK 0x50
(0016) #define SLD_R_NK_OK 0x58 
(0017) 
(0018) #define uchar unsigned char
(0019) #define uint unsigned int
(0020) 
(0021) #define start() (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
(0022) #define stop()  (TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWSTO))
(0023) #define  wait() {while(!(TWCR&(1<<TWINT) ));} 
(0024)  #define writebyte(twi_d) {TWDR=(twi_d);TWCR=(1<<TWINT)|(1<<TWEN);}
(0025)  #define testack() (TWSR&0Xf8)
(0026)  #define twi()    (TWCR=(1<<TWINT)|(1<<TWEN))
(0027)  
(0028) uchar Tmp_data_high, Tmp_data_low;
(0029)   
(0030) void twi_init()
(0031) {
(0032)    TWBR=0X0C;
_twi_init:
    0051 E08C      LDI	R24,0xC
    0052 B980      OUT	P00,R24
(0033)   // TWCR=0X44;
(0034)    TWSR=0X00;
    0053 2422      CLR	R2
    0054 B821      OUT	P01,R2
(0035) }
    0055 9508      RET
(0036) //~~~~~~~~~~~~~~~~~~~~~~
(0037)  
(0038) uchar AD7416_read(void)
(0039) {
(0040)  
(0041)  start();	   		  //Generate START condition
_AD7416_read:
    0056 EA84      LDI	R24,0xA4
    0057 BF86      OUT	P36,R24
(0042)  wait();					  //START_OK (0x08) valified
    0058 B626      IN	R2,P36
    0059 FE27      SBRS	R2,7
    005A CFFD      RJMP	0x0058
(0043)   
(0044)  
(0045)  writebyte(0X90);  			  
    005B E980      LDI	R24,0x90
    005C B983      OUT	P03,R24
    005D E884      LDI	R24,0x84
    005E BF86      OUT	P36,R24
(0046)  wait();						  //SLA_R_OK (0x40) verified
    005F B626      IN	R2,P36
    0060 FE27      SBRS	R2,7
    0061 CFFD      RJMP	0x005F
(0047)    
(0048)  writebyte(0);  			  
    0062 2422      CLR	R2
    0063 B823      OUT	P03,R2
    0064 E884      LDI	R24,0x84
    0065 BF86      OUT	P36,R24
(0049)  wait();					  //ALD_W_OK (0x28) verified
    0066 B626      IN	R2,P36
    0067 FE27      SBRS	R2,7
    0068 CFFD      RJMP	0x0066
(0050)   
(0051)  start();	   		  //Generate RESTART condition
    0069 EA84      LDI	R24,0xA4
    006A BF86      OUT	P36,R24
(0052)  wait();						  //RESTART_OK (0x10) valified
    006B B626      IN	R2,P36
    006C FE27      SBRS	R2,7
    006D CFFD      RJMP	0x006B
(0053)  
(0054)  writebyte(0X91);     			  
    006E E981      LDI	R24,0x91
    006F B983      OUT	P03,R24
    0070 E884      LDI	R24,0x84
    0071 BF86      OUT	P36,R24
(0055)  wait();
    0072 B626      IN	R2,P36
    0073 FE27      SBRS	R2,7
    0074 CFFD      RJMP	0x0072
(0056)    
(0057)    twi();
    0075 E884      LDI	R24,0x84
    0076 BF86      OUT	P36,R24
(0058)  //writebyte(SLD_R_AK );    
(0059)  wait();	
    0077 B626      IN	R2,P36
    0078 FE27      SBRS	R2,7
    0079 CFFD      RJMP	0x0077
(0060)  
(0061)  Tmp_data_high=TWDR;
    007A B023      IN	R2,P03
    007B 92200061  STS	R2,_Tmp_data_high
(0062)   wait();
    007D B626      IN	R2,P36
    007E FE27      SBRS	R2,7
    007F CFFD      RJMP	0x007D
(0063)  //TWCR=SLD_R_AK;     			  //Read the pointed reg: low byte
(0064)  wait();	 			  //DLD_R_AK_OK (0x50) verified
    0080 B626      IN	R2,P36
    0081 FE27      SBRS	R2,7
    0082 CFFD      RJMP	0x0080
(0065)  Tmp_data_low = TWDR; 
    0083 B023      IN	R2,P03
    0084 92200060  STS	R2,_Tmp_data_low
(0066)  
(0067)  stop();	  		 	   	  //Generate STOP condition
    0086 E984      LDI	R24,0x94
    0087 BF86      OUT	P36,R24
(0068) } 
    0088 9508      RET
_delay:
  x                    --> R20
  z                    --> R16
    0089 940E00A7  CALL	push_gset1
(0069)  
(0070) void delay(uchar z)
(0071) {
(0072)    uint x;
(0073)    for(;z>0;z--)
    008B C009      RJMP	0x0095
(0074)       for(x=20000;x>0;x--);
    008C E240      LDI	R20,0x20
    008D E45E      LDI	R21,0x4E
    008E C002      RJMP	0x0091
    008F 5041      SUBI	R20,1
    0090 4050      SBCI	R21,0
    0091 3040      CPI	R20,0
    0092 0745      CPC	R20,R21
    0093 F7D9      BNE	0x008F
    0094 950A      DEC	R16
    0095 2422      CLR	R2
    0096 1620      CP	R2,R16
    0097 F3A0      BCS	0x008C
(0075) }	  
    0098 940E00AA  CALL	pop_gset1
    009A 9508      RET
(0076)  
(0077) void main(void)
(0078) { 		
(0079)  DDRD=0xff; 		 
_main:
    009B EF8F      LDI	R24,0xFF
    009C BB81      OUT	P11,R24
(0080)  twi_init();	
    009D DFB3      RCALL	_twi_init
    009E C006      RJMP	0x00A5
(0081)  while(1)
(0082)  {
(0083)    
(0084)   AD7416_read(); 
    009F DFB6      RCALL	_AD7416_read
(0085)   PORTD=Tmp_data_high;
    00A0 90200061  LDS	R2,_Tmp_data_high
    00A2 BA22      OUT	P12,R2
(0086)    delay(10);
    00A3 E00A      LDI	R16,0xA
    00A4 DFE4      RCALL	_delay
    00A5 CFF9      RJMP	0x009F
(0087)  }
(0088) }
FILE: <library>
    00A6 9508      RET
push_gset1:
    00A7 935A      ST	R21,-Y
    00A8 934A      ST	R20,-Y
    00A9 9508      RET
pop_gset1:
    00AA E0E1      LDI	R30,1
pop:
    00AB 9149      LD	R20,Y+
    00AC 9159      LD	R21,Y+
    00AD FDE0      SBRC	R30,0
    00AE 9508      RET
    00AF 9169      LD	R22,Y+
    00B0 9179      LD	R23,Y+
    00B1 FDE1      SBRC	R30,1
    00B2 9508      RET
    00B3 90A9      LD	R10,Y+
    00B4 90B9      LD	R11,Y+
    00B5 FDE2      SBRC	R30,2
    00B6 9508      RET
    00B7 90C9      LD	R12,Y+
    00B8 90D9      LD	R13,Y+
    00B9 FDE3      SBRC	R30,3
    00BA 9508      RET
    00BB 90E9      LD	R14,Y+
    00BC 90F9      LD	R15,Y+
    00BD 9508      RET

⌨️ 快捷键说明

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