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

📄 ad7416.s

📁 对AD7416用i2c操作,ad7416是一款用来测温的常用芯片。
💻 S
字号:
	.module AD7416.C
	.area text(rom, con, rel)
	.dbfile F:\程序—实验板\AD7416\AD7416.C
	.dbfunc e twi_init _twi_init fV
	.even
_twi_init::
	.dbline -1
	.dbline 31
;  
; #include <iom16v.h>
; #include <macros.h>
; #include <stdlib.h>
;  
; #define SLD_R_AK  0xC4
; #define SLD_R_NK  0x83
; 
; //TWI status
; #define START_OK 0x08
; #define R_STAR_OK 0x10 
; #define SLA_W_OK 0x18
; #define SLD_W_OK 0x28
; #define SLA_R_OK 0x40
; #define SLD_R_AK_OK 0x50
; #define SLD_R_NK_OK 0x58 
; 
; #define uchar unsigned char
; #define uint unsigned int
; 
; #define start() (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
; #define stop()  (TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWSTO))
; #define  wait() {while(!(TWCR&(1<<TWINT) ));} 
;  #define writebyte(twi_d) {TWDR=(twi_d);TWCR=(1<<TWINT)|(1<<TWEN);}
;  #define testack() (TWSR&0Xf8)
;  #define twi()    (TWCR=(1<<TWINT)|(1<<TWEN))
;  
; uchar Tmp_data_high, Tmp_data_low;
;   
; void twi_init()
; {
	.dbline 32
;    TWBR=0X0C;
	ldi R24,12
	out 0x0,R24
	.dbline 34
;   // TWCR=0X44;
;    TWSR=0X00;
	clr R2
	out 0x1,R2
	.dbline -2
	.dbline 35
; }
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e AD7416_read _AD7416_read fc
	.even
_AD7416_read::
	.dbline -1
	.dbline 39
; //~~~~~~~~~~~~~~~~~~~~~~
;  
; uchar AD7416_read(void)
; {
	.dbline 41
;  
;  start();	   		  //Generate START condition
	ldi R24,164
	out 0x36,R24
	.dbline 42
L3:
	.dbline 42
L4:
	.dbline 42
;  wait();					  //START_OK (0x08) valified
	in R2,0x36
	sbrs R2,7
	rjmp L3
	.dbline 42
	.dbline 42
	.dbline 45
;   
;  
;  writebyte(0X90);  			  
	.dbline 45
	ldi R24,144
	out 0x3,R24
	.dbline 45
	ldi R24,132
	out 0x36,R24
	.dbline 45
	.dbline 45
	.dbline 46
L6:
	.dbline 46
L7:
	.dbline 46
;  wait();						  //SLA_R_OK (0x40) verified
	in R2,0x36
	sbrs R2,7
	rjmp L6
	.dbline 46
	.dbline 46
	.dbline 48
;    
;  writebyte(0);  			  
	.dbline 48
	clr R2
	out 0x3,R2
	.dbline 48
	ldi R24,132
	out 0x36,R24
	.dbline 48
	.dbline 48
	.dbline 49
L9:
	.dbline 49
L10:
	.dbline 49
;  wait();					  //ALD_W_OK (0x28) verified
	in R2,0x36
	sbrs R2,7
	rjmp L9
	.dbline 49
	.dbline 49
	.dbline 51
;   
;  start();	   		  //Generate RESTART condition
	ldi R24,164
	out 0x36,R24
	.dbline 52
L12:
	.dbline 52
L13:
	.dbline 52
;  wait();						  //RESTART_OK (0x10) valified
	in R2,0x36
	sbrs R2,7
	rjmp L12
	.dbline 52
	.dbline 52
	.dbline 54
;  
;  writebyte(0X91);     			  
	.dbline 54
	ldi R24,145
	out 0x3,R24
	.dbline 54
	ldi R24,132
	out 0x36,R24
	.dbline 54
	.dbline 54
	.dbline 55
L15:
	.dbline 55
L16:
	.dbline 55
;  wait();
	in R2,0x36
	sbrs R2,7
	rjmp L15
	.dbline 55
	.dbline 55
	.dbline 57
;    
;    twi();
	ldi R24,132
	out 0x36,R24
	.dbline 59
L18:
	.dbline 59
L19:
	.dbline 59
;  //writebyte(SLD_R_AK );    
;  wait();	
	in R2,0x36
	sbrs R2,7
	rjmp L18
	.dbline 59
	.dbline 59
	.dbline 61
;  
;  Tmp_data_high=TWDR;
	in R2,0x3
	sts _Tmp_data_high,R2
	.dbline 62
L21:
	.dbline 62
L22:
	.dbline 62
;   wait();
	in R2,0x36
	sbrs R2,7
	rjmp L21
	.dbline 62
	.dbline 62
	.dbline 64
L24:
	.dbline 64
L25:
	.dbline 64
;  //TWCR=SLD_R_AK;     			  //Read the pointed reg: low byte
;  wait();	 			  //DLD_R_AK_OK (0x50) verified
	in R2,0x36
	sbrs R2,7
	rjmp L24
	.dbline 64
	.dbline 64
	.dbline 65
;  Tmp_data_low = TWDR; 
	in R2,0x3
	sts _Tmp_data_low,R2
	.dbline 67
;  
;  stop();	  		 	   	  //Generate STOP condition
	ldi R24,148
	out 0x36,R24
	.dbline -2
	.dbline 68
; } 
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay _delay fV
;              x -> R20,R21
;              z -> R16
	.even
_delay::
	xcall push_gset1
	.dbline -1
	.dbline 71
;  
; void delay(uchar z)
; {
	.dbline 73
;    uint x;
;    for(;z>0;z--)
	xjmp L31
L28:
	.dbline 74
	ldi R20,20000
	ldi R21,78
	xjmp L35
L32:
	.dbline 74
L33:
	.dbline 74
	subi R20,1
	sbci R21,0
L35:
	.dbline 74
	cpi R20,0
	cpc R20,R21
	brne L32
X0:
L29:
	.dbline 73
	dec R16
L31:
	.dbline 73
	clr R2
	cp R2,R16
	brlo L28
	.dbline -2
	.dbline 75
;       for(x=20000;x>0;x--);
; }	  
L27:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r x 20 i
	.dbsym r z 16 c
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 78
;  
; void main(void)
; { 		
	.dbline 79
;  DDRD=0xff; 		 
	ldi R24,255
	out 0x11,R24
	.dbline 80
;  twi_init();	
	xcall _twi_init
	xjmp L38
L37:
	.dbline 82
	.dbline 84
	xcall _AD7416_read
	.dbline 85
	lds R2,_Tmp_data_high
	out 0x12,R2
	.dbline 86
	ldi R16,10
	xcall _delay
	.dbline 87
L38:
	.dbline 81
	xjmp L37
X1:
	.dbline -2
	.dbline 88
;  while(1)
;  {
;    
;   AD7416_read(); 
;   PORTD=Tmp_data_high;
;    delay(10);
;  }
; }
L36:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile F:\程序—实验板\AD7416\AD7416.C
_Tmp_data_low::
	.blkb 1
	.dbsym e Tmp_data_low _Tmp_data_low c
_Tmp_data_high::
	.blkb 1
	.dbsym e Tmp_data_high _Tmp_data_high c

⌨️ 快捷键说明

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