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

📄 max531.s

📁 前段时间做的一个东西,用的24位高精度AD转换芯片CS5532和12DA转换器max531的AVR驱动.芯片用的是ATMEGA8515,开发环境ICCAVR.CS5532的内部寄存器太多,设置有些复杂
💻 S
字号:
	.module max531.c
	.area text(rom, con, rel)
	.dbfile C:\icc\project\cs5532\max531.c
	.dbfunc s DAtrans _DAtrans fI
;          max_i -> R20
;       max_temp -> R22
;        DA_data -> R10
	.even
_DAtrans::
	rcall push_gset3
	mov R10,R16
	.dbline -1
	.dbline 13
; #include<io8515.h> 
; //*************************************
; //PD3-MAX_CS   PD4-MAX_SCLK   PD5-MAX_DIN
; //*************************************
; #define  MAX_CS     0b00001000
; #define  MAX_SCLK   0b00010000
; #define  MAX_DIN    0b00100000
; #define  MAX_DDR    DDRD
; #define  MAX_ALL    0b00111000
; #define  MAX_POART  PORTD
; //*************************************
; void DAtrans(unsigned char DA_data)
; 	 	{ 
	.dbline 16
; 		
; 		   unsigned char max_temp,max_i;		   
; 		   max_i=8;
	ldi R20,8
	rjmp L3
L2:
	.dbline 18
; 		   while(max_i)
; 		       { 
	.dbline 19
; 			      max_temp=DA_data;
	mov R22,R10
	.dbline 20
; 			   	  max_temp=max_temp>>(max_i-1);
	mov R17,R20
	subi R17,1
	mov R16,R22
	rcall lsr8
	mov R22,R16
	.dbline 21
; 				  max_temp=max_temp&0b00000001;
	andi R22,1
	.dbline 22
; 				  MAX_POART=MAX_POART&~MAX_SCLK;
	cbi 0x12,4
	.dbline 23
; 				  if(max_temp)
	tst R22
	breq L5
	.dbline 24
; 				      {
	.dbline 25
; 					    MAX_POART=MAX_POART|MAX_DIN;
	sbi 0x12,5
	.dbline 26
; 						MAX_POART=MAX_POART|MAX_SCLK;
	sbi 0x12,4
	.dbline 27
; 					  }
	rjmp L6
L5:
	.dbline 29
; 				  else
; 				      {
	.dbline 30
; 					    MAX_POART=MAX_POART&~MAX_DIN;
	cbi 0x12,5
	.dbline 31
; 						MAX_POART=MAX_POART|MAX_SCLK;
	sbi 0x12,4
	.dbline 33
; 					  
; 					  }  	  
L6:
	.dbline 35
	dec R20
	.dbline 36
L3:
	.dbline 17
	tst R20
	brne L2
	.dbline -2
	.dbline 38
; 				  
; 			     max_i--;
; 			     }
; 			
; 		    }
L1:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r max_i 20 c
	.dbsym r max_temp 22 c
	.dbsym r DA_data 10 c
	.dbfunc s DAconvter _DAconvter fI
;         DA_low -> R20
;       DA_hight -> R22
	.even
_DAconvter::
	rcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 41
; //******************************************************
; void DAconvter(unsigned char DA_hight,unsigned char DA_low)
;             {
	.dbline 42
; 			  DDRD=DDRD|MAX_ALL;
	in R24,0x11
	ori R24,56
	out 0x11,R24
	.dbline 43
; 	          MAX_POART=MAX_POART&~MAX_CS;//cs=0
	cbi 0x12,3
	.dbline 44
; 			  DAtrans(DA_hight);
	mov R16,R22
	rcall _DAtrans
	.dbline 45
; 			  DAtrans(DA_low);
	mov R16,R20
	rcall _DAtrans
	.dbline 46
; 			  MAX_POART=MAX_POART|MAX_CS;//cs=1
	sbi 0x12,3
	.dbline -2
	.dbline 47
; 			}			
L7:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r DA_low 20 c
	.dbsym r DA_hight 22 c

⌨️ 快捷键说明

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