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

📄 cs5522.lst

📁 前段时间做的一个东西,用的24位高精度AD转换芯片CS5532和12DA转换器max531的AVR驱动.芯片用的是ATMEGA8515,开发环境ICCAVR.CS5532的内部寄存器太多,设置有些复杂
💻 LST
📖 第 1 页 / 共 2 页
字号:
    00D4 E00C      LDI	R16,0xC
    00D5 DF8F      RCALL	_Display
(0084)    Display(12); 
    00D6 E00C      LDI	R16,0xC
    00D7 DF8D      RCALL	_Display
(0085)    Display(Cacu_num); 
    00D8 2F04      MOV	R16,R20
    00D9 DF8B      RCALL	_Display
(0086)    Display(num[0]);
    00DA 8108      LDD	R16,0+Y
    00DB DF89      RCALL	_Display
(0087)    Display(num[1]); 			  
    00DC 8109      LDD	R16,1+Y
    00DD DF87      RCALL	_Display
(0088)    Display(num[2]);
    00DE 810A      LDD	R16,2+Y
    00DF DF85      RCALL	_Display
(0089)    Display(num[3]);   
    00E0 810B      LDD	R16,3+Y
    00E1 DF83      RCALL	_Display
(0090)    Display(12); 
    00E2 E00C      LDI	R16,0xC
    00E3 DF81      RCALL	_Display
(0091)    Display(12); 
    00E4 E00C      LDI	R16,0xC
    00E5 DF7F      RCALL	_Display
(0092)    Display(12); 
    00E6 E00C      LDI	R16,0xC
    00E7 DF7D      RCALL	_Display
(0093)    Display(12);  
    00E8 E00C      LDI	R16,0xC
    00E9 DF7B      RCALL	_Display
(0094)    
(0095) }
    00EA 9624      ADIW	R28,4
    00EB D1E1      RCALL	pop_gset2
    00EC 9508      RET
_Se_Cs_W:
  Cs_i                 --> R20
  Cs_Tem               --> R22
  Cs_Word              --> R10
    00ED D1DC      RCALL	push_gset3
    00EE 2EA0      MOV	R10,R16
FILE: C:\icc\project\cs5532\Cs5522.c
(0000) #include<io8515.h> 
(0001) //**************************************************
(0002) //PC1-CS5522_CS  PC0-CS5522_SCLK   PB4-CS5522_SDO  
(0003) //PB3-CS5522_SDI
(0004) //****************************************************
(0005) #define cs    0b00000010
(0006) #define sclk  0b00000001
(0007) #define sdi   0b00001000
(0008) #define sdo   0b00010000
(0009) //************************************
(0010) #define unch    unsigned char
(0011) //*************************************
(0012) unsigned char data[3];  //receive cs5522's number;
(0013) void Cacu_Display(unsigned char temp);
(0014) //***********************************
(0015) //向CS5522发送一个字节
(0016) void Se_Cs_W(unsigned char Cs_Word)
(0017)     {   unsigned char Cs_Tem;
(0018)         unsigned char Cs_i=8;      
    00EF E048      LDI	R20,0x8
    00F0 C00F      RJMP	0x0100
(0019)         while(Cs_i)
(0020) 	       {
(0021) 	          Cs_Tem=Cs_Word;
    00F1 2D6A      MOV	R22,R10
(0022) 			  Cs_Tem=Cs_Tem>>(Cs_i-1);
    00F2 2F14      MOV	R17,R20
    00F3 5011      SUBI	R17,1
    00F4 2F06      MOV	R16,R22
    00F5 D1FA      RCALL	lsr8
    00F6 2F60      MOV	R22,R16
(0023) 			  Cs_Tem&=0b00000001;
    00F7 7061      ANDI	R22,1
(0024) 			  if(Cs_Tem)
    00F8 2366      TST	R22
    00F9 F011      BEQ	0x00FC
(0025) 			       {PORTB=PORTB|sdi;} 
    00FA 9AC3      SBI	P18,3
    00FB C001      RJMP	0x00FD
(0026) 			  else
(0027) 			       {PORTB=PORTB&~sdi;}	   
    00FC 98C3      CBI	P18,3
(0028) 	          PORTC=PORTC|sclk;//clock=1.
    00FD 9AA8      SBI	P15,0
(0029) 			  PORTC=PORTC&(~sclk);//clock=0                      
    00FE 98A8      CBI	P15,0
(0030) 	          Cs_i--;
    00FF 954A      DEC	R20
(0031) 	        }
    0100 2344      TST	R20
    0101 F779      BNE	0x00F1
(0032)     }
    0102 D1CC      RCALL	pop_gset3
    0103 9508      RET
_ReadW:
  Read_Temp02          --> R20
  Read_i               --> R22
  Read_Temp01          --> R10
    0104 D1C5      RCALL	push_gset3
(0033) 
(0034) //***********************************
(0035) //读一个字节。
(0036) unsigned char ReadW()
(0037)                  {
(0038) 				   unsigned char Read_Temp01,Read_Temp02,Read_i;
(0039) 				   Read_i=8;
    0105 E068      LDI	R22,0x8
(0040) 				   Read_Temp01=0;
    0106 24AA      CLR	R10
(0041) 				   Read_Temp02=0;
    0107 2744      CLR	R20
    0108 C010      RJMP	0x0119
(0042) 				   while(Read_i)
(0043) 				       {       						  
(0044) 						  Read_Temp01=PINB;
    0109 B2A6      IN	R10,P16
(0045) 						  PORTC=PORTC|sclk;
    010A 9AA8      SBI	P15,0
(0046) 					      PORTC=PORTC&~sclk;
    010B 98A8      CBI	P15,0
(0047) 						  Read_Temp01=Read_Temp01&sdo;
    010C 2D8A      MOV	R24,R10
    010D 7180      ANDI	R24,0x10
    010E 2EA8      MOV	R10,R24
(0048) 						  Read_Temp01=Read_Temp01>>4;
    010F 9582      SWAP	R24
    0110 708F      ANDI	R24,0xF
    0111 2EA8      MOV	R10,R24
(0049) 			              Read_Temp01=Read_Temp01<<(Read_i-1);
    0112 2F16      MOV	R17,R22
    0113 5011      SUBI	R17,1
    0114 2D0A      MOV	R16,R10
    0115 D1D4      RCALL	lsl8
    0116 2EA0      MOV	R10,R16
(0050) 			              Read_Temp02=Read_Temp02+Read_Temp01;
    0117 0D4A      ADD	R20,R10
(0051) 			              Read_i--;						   
    0118 956A      DEC	R22
(0052) 					   }
    0119 2366      TST	R22
    011A F771      BNE	0x0109
(0053) 				  return(Read_Temp02); 		 
    011B 2F04      MOV	R16,R20
    011C 2711      CLR	R17
    011D D1B1      RCALL	pop_gset3
    011E 9508      RET
_Sen_Rec:
  comaw                --> R20
    011F D190      RCALL	push_gset1
    0120 2F40      MOV	R20,R16
(0054) 				 
(0055) 				 
(0056) 				 }	  		
(0057) //***********************************
(0058) //写1字节读3字节。
(0059)   void Sen_Rec(unsigned char comaw)
(0060)         { 
(0061) 		  DDRC=DDRC|cs;
    0121 9AA1      SBI	P14,1
(0062) 		  DDRC=DDRC|sclk;
    0122 9AA0      SBI	P14,0
(0063) 		  DDRB=DDRB|sdi;
    0123 9ABB      SBI	P17,3
(0064) 		  DDRB=DDRB&~sdo;
    0124 98BC      CBI	P17,4
(0065) 		  PORTB|=sdo;//选择为输入
    0125 9AC4      SBI	P18,4
(0066) 	      PORTC=PORTC&~cs;  //片选				  		  
    0126 98A9      CBI	P15,1
(0067) 	      Se_Cs_W(comaw);
    0127 2F04      MOV	R16,R20
    0128 DFC4      RCALL	_Se_Cs_W
(0068) 	      data[2]=ReadW();
    0129 DFDA      RCALL	_ReadW
    012A 2E20      MOV	R2,R16
    012B 2E31      MOV	R3,R17
    012C 92200066  STS	R2,_data+2
(0069) 	      data[1]=ReadW();
    012E DFD5      RCALL	_ReadW
    012F 2E20      MOV	R2,R16
    0130 2E31      MOV	R3,R17
    0131 92200065  STS	R2,_data+1
(0070) 	      data[0]=ReadW();
    0133 DFD0      RCALL	_ReadW
    0134 2E20      MOV	R2,R16
    0135 2E31      MOV	R3,R17
    0136 92200064  STS	R2,_data
(0071) 		  PORTC=PORTC|cs;	 
    0138 9AA9      SBI	P15,1
(0072) 		   }
    0139 D179      RCALL	pop_gset1
    013A 9508      RET
_F_Word:
  write4               --> Y+6
  write3               --> Y+4
  write2               --> R20
  write1               --> R22
    013B D18B      RCALL	push_gset2
    013C 2F42      MOV	R20,R18
    013D 2F60      MOV	R22,R16
(0073) //************************************
(0074) //直接写4字节。
(0075) void F_Word(unch write1,unch write2,unch write3,unch write4)
(0076)         { DDRC=DDRC|cs;
    013E 9AA1      SBI	P14,1
(0077) 		  DDRC=DDRC|sclk;
    013F 9AA0      SBI	P14,0
(0078) 		  DDRB=DDRB|sdi;		  
    0140 9ABB      SBI	P17,3
(0079) 	      PORTC=PORTC&~cs;  //片选	
    0141 98A9      CBI	P15,1
(0080) 		  PORTB|=sdi;			 
    0142 9AC3      SBI	P18,3
(0081) 		  Se_Cs_W(write1);
    0143 2F06      MOV	R16,R22
    0144 DFA8      RCALL	_Se_Cs_W
(0082) 		  Se_Cs_W(write2);
    0145 2F04      MOV	R16,R20
    0146 DFA6      RCALL	_Se_Cs_W
(0083) 		  Se_Cs_W(write3);
    0147 810C      LDD	R16,4+Y
    0148 DFA4      RCALL	_Se_Cs_W
(0084) 		  Se_Cs_W(write4);
    0149 810E      LDD	R16,6+Y
    014A DFA2      RCALL	_Se_Cs_W
(0085) 		  PORTC=PORTC|cs;	
    014B 9AA9      SBI	P15,1
(0086) 		
(0087) 		} 	 
    014C D180      RCALL	pop_gset2
    014D 9508      RET
_ADC:
  ADCtemp              --> R20
    014E D161      RCALL	push_gset1
    014F 2F40      MOV	R20,R16
(0088) //***********************************
(0089) void ADC(unsigned char ADCtemp)
(0090)       {
(0091) 	      
(0092) 		  DDRC=DDRC|cs;
    0150 9AA1      SBI	P14,1
(0093) 		  DDRC=DDRC|sclk;
    0151 9AA0      SBI	P14,0
(0094) 		  DDRB=DDRB|sdi;
    0152 9ABB      SBI	P17,3
(0095) 		  DDRB=DDRB&~sdo;
    0153 98BC      CBI	P17,4
(0096) 		  PORTB|=sdo;//选择为输入
    0154 9AC4      SBI	P18,4
(0097) 	      PORTC=PORTC&~cs;  //片选				  		  
    0155 98A9      CBI	P15,1
(0098) 	      Se_Cs_W(ADCtemp);	      
    0156 2F04      MOV	R16,R20
    0157 DF95      RCALL	_Se_Cs_W
(0099) 		  PORTC=PORTC|cs;	 
    0158 9AA9      SBI	P15,1
(0100) 	  
(0101) 	  }		
    0159 D159      RCALL	pop_gset1
    015A 9508      RET
_ReceiveData:
  ReceiveTemp          --> R20
    015B D154      RCALL	push_gset1
(0102) //**********************************
(0103) //接收CS5522的数据:
(0104) void ReceiveData(void)
(0105)         {
(0106) 		   unsigned char ReceiveTemp;
(0107) 		   DDRB=DDRB&~sdo;
    015C 98BC      CBI	P17,4
(0108) 		   PORTB|=sdo;//选择为输入
    015D 9AC4      SBI	P18,4
(0109) 		   DDRC=DDRC|cs;
    015E 9AA1      SBI	P14,1
(0110) 		   PORTC=PORTC&~cs;  //片选		
    015F 98A9      CBI	P15,1
(0111) 		   DDRC=DDRC|sclk;
    0160 9AA0      SBI	P14,0
(0112) 		   PORTC=PORTC|sclk;
    0161 9AA8      SBI	P15,0
(0113) 		  do	
(0114) 		   { 
(0115) 		     ReceiveTemp=PINB;
    0162 B346      IN	R20,P16
(0116) 		     ReceiveTemp=ReceiveTemp&sdo;
    0163 7140      ANDI	R20,0x10
(0117) 			 }
(0118) 		  while(ReceiveTemp);	 
    0164 2344      TST	R20
    0165 F7E1      BNE	0x0162
(0119) 		  data[2]=ReadW();
    0166 DF9D      RCALL	_ReadW
    0167 2E20      MOV	R2,R16
    0168 2E31      MOV	R3,R17
    0169 92200066  STS	R2,_data+2
(0120) 		  data[2]=ReadW();
    016B DF98      RCALL	_ReadW
    016C 2E20      MOV	R2,R16
    016D 2E31      MOV	R3,R17
    016E 92200066  STS	R2,_data+2
(0121) 	      data[1]=ReadW();
    0170 DF93      RCALL	_ReadW
    0171 2E20      MOV	R2,R16
    0172 2E31      MOV	R3,R17
    0173 92200065  STS	R2,_data+1
(0122) 	      data[0]=ReadW();		  	   
    0175 DF8E      RCALL	_ReadW
    0176 2E20      MOV	R2,R16
    0177 2E31      MOV	R3,R17
    0178 92200064  STS	R2,_data
(0123) 		  PORTC=PORTC|cs;	
    017A 9AA9      SBI	P15,1
(0124) 		}
    017B D137      RCALL	pop_gset1
    017C 9508      RET
_initserial:
  Init_Tem             --> R20
    017D D132      RCALL	push_gset1
(0125) //***********************************
(0126) //起动串口。
(0127)  void initserial(void)
(0128)     { 
(0129) 	  unsigned char Init_Tem=15;
    017E E04F      LDI	R20,0xF
(0130) 	  DDRC=DDRC|cs;
    017F 9AA1      SBI	P14,1
(0131) 	  DDRC=DDRC|sclk;
    0180 9AA0      SBI	P14,0
(0132) 	  PORTC=PORTC&~cs;
    0181 98A9      CBI	P15,1
(0133) 	  DDRB=DDRB|sdi;
    0182 9ABB      SBI	P17,3
    0183 C003      RJMP	0x0187
(0134) 	  while(Init_Tem)
(0135) 	      {
(0136) 		    Se_Cs_W(0xff);
    0184 EF0F      LDI	R16,0xFF
    0185 DF67      RCALL	_Se_Cs_W
(0137) 			Init_Tem--;		  
    0186 954A      DEC	R20
(0138) 		   }
    0187 2344      TST	R20
    0188 F7D9      BNE	0x0184
(0139) 	  Se_Cs_W(0xfe);	
    0189 EF0E      LDI	R16,0xFE
    018A DF62      RCALL	_Se_Cs_W
(0140) 	  PORTC=PORTC|cs;
    018B 9AA9      SBI	P15,1
(0141) 	}
    018C D126      RCALL	pop_gset1
    018D 9508      RET
_InitCs:
  InitTemp             --> R20
    018E D121      RCALL	push_gset1
    018F 9723      SBIW	R28,3
(0142) //***********************************
(0143) //配置CS5522
(0144) void InitCs(void)
(0145)         {
(0146) 		
(0147) 		     unsigned char InitTemp;
(0148) 		     initserial();    //起动串口。     
    0190 DFEC      RCALL	_initserial
(0149) //===================设置配置寄存器=======================
(0150) //配置RS位寄存器写一 
(0151)        //  distemp();
(0152)          F_Word(0x03,0x00,0x00,0x80);    //直接写4字节

⌨️ 快捷键说明

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