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

📄 cs5522.lst

📁 前段时间做的一个东西,用的24位高精度AD转换芯片CS5532和12DA转换器max531的AVR驱动.芯片用的是ATMEGA8515,开发环境ICCAVR.CS5532的内部寄存器太多,设置有些复杂
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
    0016 E5CF      LDI	R28,0x5F
    0017 E0D2      LDI	R29,2
    0018 BFCD      OUT	P3D,R28
    0019 BFDE      OUT	P3E,R29
    001A 51C0      SUBI	R28,0x10
    001B 40D0      SBCI	R29,0
    001C EA0A      LDI	R16,0xAA
    001D 8308      STD	R16,0+Y
    001E 2400      CLR	R0
    001F E6E0      LDI	R30,0x60
    0020 E0F0      LDI	R31,0
    0021 E010      LDI	R17,0
    0022 38E5      CPI	R30,0x85
    0023 07F1      CPC	R31,R17
    0024 F011      BEQ	0x0027
    0025 9201      ST	R0,Z+
    0026 CFFB      RJMP	0x0022
    0027 8300      STD	R16,0+Z
    0028 E2EB      LDI	R30,0x2B
    0029 E0F0      LDI	R31,0
    002A E6A0      LDI	R26,0x60
    002B E0B0      LDI	R27,0
    002C E010      LDI	R17,0
    002D 32EB      CPI	R30,0x2B
    002E 07F1      CPC	R31,R17
    002F F021      BEQ	0x0034
    0030 95C8      LPM
    0031 9631      ADIW	R30,1
    0032 920D      ST	R0,X+
    0033 CFF9      RJMP	0x002D
    0034 D001      RCALL	_main
_exit:
    0035 CFFF      RJMP	_exit
FILE: C:\icc\project\cs5532\main01.c
(0000) #include<io8515.h> 
(0001) //**************************************
(0002) //**************************************************
(0003) //PC1-CS5522_CS  PC0-CS5522_SCLK   PB4-CS5522_SDO  
(0004) //PB3-CS5522_SDI
(0005) //****************************************************
(0006) #define cs    0b00000010
(0007) #define sclk  0b00000001
(0008) #define sdi   0b00001000
(0009) #define sdo   0b00010000
(0010) //************************************
(0011) #define unch    unsigned char
(0012) //*************************************
(0013) 
(0014) extern unsigned char data[3];  //receive cs5522's number;
(0015) void Cacu_Display(unsigned char tempCaH,unsigned char tempCaL);
(0016) void ADC(unsigned char ADCtemp);
(0017) void F_Word(unch write1,unch write2,unch write3,unch write4);
(0018) void ReceiveData(void);
(0019) 
(0020)  void prosses(void);
(0021) 
(0022) 
(0023) void DAconvter(unsigned char DA_hight,unsigned char DA_low);
(0024) void InitCs(void);
(0025)  main()
(0026) 	 {  
(0027) 	     unsigned char main_i,main_j,main_k;
(0028) 		 unsigned int main_int;
(0029) 		 //DAconvter(0b00000000,0b10101111);
(0030) 		 			
(0031) 		 main_i=70;
_main:
  main_int             --> Y+1
  main_i               --> R20
  main_j               --> R22
  main_k               --> R10
    0036 E446      LDI	R20,0x46
    0037 C00C      RJMP	0x0044
(0032) 		 while(main_i)
(0033) 		       {   main_j=0xff;
    0038 EF6F      LDI	R22,0xFF
    0039 C007      RJMP	0x0041
(0034) 			       while(main_j)
(0035) 				        {
(0036) 						   main_k=0xff;
    003A EF8F      LDI	R24,0xFF
    003B 2EA8      MOV	R10,R24
    003C C001      RJMP	0x003E
(0037) 						   while(main_k)
(0038) 						       {
(0039) 							     main_k--;
    003D 94AA      DEC	R10
(0040) 							   }
    003E 20AA      TST	R10
    003F F7E9      BNE	0x003D
(0041) 						   main_j--;
    0040 956A      DEC	R22
(0042) 						}
    0041 2366      TST	R22
    0042 F7B9      BNE	0x003A
(0043) 			        main_i--;
    0043 954A      DEC	R20
(0044) 			   } 	
    0044 2344      TST	R20
    0045 F791      BNE	0x0038
(0045) 		DAconvter(0b00001100,0b10101111);		   	
    0046 EA2F      LDI	R18,0xAF
    0047 E00C      LDI	R16,0xC
    0048 D18C      RCALL	_DAconvter
(0046) 	    InitCs();	//cs5522初始化 
    0049 D144      RCALL	_InitCs
    004A C018      RJMP	0x0063
(0047) 		
(0048) 		
(0049) 		while(1)
(0050) 		{
(0051) 		
(0052) 		 ADC(0x80);		 
    004B E800      LDI	R16,0x80
    004C D101      RCALL	_ADC
(0053) 		 ReceiveData();//接收数据 	
    004D D10D      RCALL	_ReceiveData
(0054) 		// prosses();	 	 
(0055) 	  	 Cacu_Display(data[2],data[1]);
    004E 91200065  LDS	R18,_data+1
    0050 91000066  LDS	R16,_data+2
    0052 D03E      RCALL	_Cacu_Display
(0056) 		 //--------------------------
(0057) 		 main_i=10;
    0053 E04A      LDI	R20,0xA
    0054 C00C      RJMP	0x0061
(0058) 		 while(main_i)
(0059) 		       {   main_j=0xff;
    0055 EF6F      LDI	R22,0xFF
    0056 C007      RJMP	0x005E
(0060) 			       while(main_j)
(0061) 				        {
(0062) 						   main_k=0xff;
    0057 EF8F      LDI	R24,0xFF
    0058 2EA8      MOV	R10,R24
    0059 C001      RJMP	0x005B
(0063) 						   while(main_k)
(0064) 						       {
(0065) 							     main_k--;
    005A 94AA      DEC	R10
(0066) 							   }
    005B 20AA      TST	R10
    005C F7E9      BNE	0x005A
(0067) 						   main_j--;
    005D 956A      DEC	R22
(0068) 						}
    005E 2366      TST	R22
    005F F7B9      BNE	0x0057
(0069) 			        main_i--;
    0060 954A      DEC	R20
(0070) 			   } 	
    0061 2344      TST	R20
    0062 F791      BNE	0x0055
(0071) 		 //-------------------------
(0072) 		 }
    0063 CFE7      RJMP	0x004B
(0073) 		 
(0074) //----------------------------------
(0075)         
(0076) //___________________________________________			   		 
(0077) 		 
(0078) 		
(0079) //*****************************************
(0080)        }    0064 9508      RET
_Display:
  Disi                 --> R20
  DisTem               --> R22
  DisNum               --> R10
    0065 D264      RCALL	push_gset3
    0066 2EA0      MOV	R10,R16
FILE: C:\icc\project\cs5532\Display.c
(0000) #include<io8515.h> 
(0001) //***************************************************
(0002) //显示子程序,用于显示一个数字,小数点在最高位。
(0003) //传递一个0-9的数字  
(0004) //DisPort——显示的端口。DisPortD——端口方向。
(0005) //DisTab[10]——显示码(const unsigned char)
(0006) //74ls4093三个输入口 str,dada,clock  
(0007) //and3=str+data+clock. 
(0008) //**************************************************
(0009) //P0  data
(0010) //P1  clock
(0011) //P2   TRO
(0012) //STR-PB0   CLOCK-PB1   DATA-PB2
(0013) #define  DisPort   PORTB
(0014) #define  DisDdr    DDRB
(0015) #define  str       0b00000100
(0016) #define  data      0b00000001
(0017) #define  clock     0b00000010
(0018) #define  and3      0b00000111
(0019) 
(0020) //===============================================================
(0021) unsigned char num[4];
(0022) //最后三条为"E""-""全灭"
(0023) const unsigned char DisTab[13]={ 0x3f,0x6,0x5b,0x4f,0x66,
(0024)                                   0x6d,0x7d,0x7,0x7f,0x6f,0x79,0x40,0x00};
(0025)                                    
(0026) //=============================================================== 
(0027) void Display(unsigned char DisNum)
(0028) {  unsigned char DisTem;
(0029)    unsigned char Disi=8;
    0067 E048      LDI	R20,0x8
(0030)    DisTem= DisNum;
    0068 2D6A      MOV	R22,R10
(0031)    DisTem=DisTem&0b01111111;
    0069 776F      ANDI	R22,0x7F
(0032)    DisTem=DisTab[DisTem];
    006A E18A      LDI	R24,0x1A
    006B E090      LDI	R25,0
    006C 2E26      MOV	R2,R22
    006D 2433      CLR	R3
    006E 0E28      ADD	R2,R24
    006F 1E39      ADC	R3,R25
    0070 2DE2      MOV	R30,R2
    0071 2DF3      MOV	R31,R3
    0072 95C8      LPM
    0073 2D60      MOV	R22,R0
(0033)    DisNum=DisNum&0b10000000;
    0074 2D8A      MOV	R24,R10
    0075 7880      ANDI	R24,0x80
    0076 2EA8      MOV	R10,R24
(0034)    DisNum=DisNum|DisTem;
    0077 2AA6      OR	R10,R22
(0035)    DisNum=~DisNum;
    0078 94A0      COM	R10
(0036)    DisDdr=and3;
    0079 E087      LDI	R24,7
    007A BB87      OUT	P17,R24
(0037)    DisPort=DisPort|str;//set str=1  	
    007B 9AC2      SBI	P18,2
    007C C010      RJMP	0x008D
(0038) 	while(Disi)
(0039) 	   {DisTem=DisNum;
    007D 2D6A      MOV	R22,R10
(0040) 	    DisPort=DisPort&~clock;//clock=0
    007E 98C1      CBI	P18,1
(0041) 	    DisTem=DisTem>>(Disi-1);
    007F 2F14      MOV	R17,R20
    0080 5011      SUBI	R17,1
    0081 2F06      MOV	R16,R22
    0082 D26D      RCALL	lsr8
    0083 2F60      MOV	R22,R16
(0042) 	    DisTem=DisTem&0b00000001;
    0084 7061      ANDI	R22,1
(0043) 	    if(DisTem==1)
    0085 3061      CPI	R22,1
    0086 F419      BNE	0x008A
(0044) 		      {DisPort=DisPort|data;
    0087 9AC0      SBI	P18,0
(0045) 			   DisPort=DisPort|clock;}
    0088 9AC1      SBI	P18,1
    0089 C002      RJMP	0x008C
(0046) 		else
(0047) 		      {DisPort=DisPort&~data;
    008A 98C0      CBI	P18,0
(0048) 			   DisPort=DisPort|clock;}      	  
    008B 9AC1      SBI	P18,1
(0049) 	    Disi--;
    008C 954A      DEC	R20
(0050) 	    }	
    008D 2344      TST	R20
    008E F771      BNE	0x007D
(0051) }	
    008F D23F      RCALL	pop_gset3
    0090 9508      RET
_Cacu_Display:
  num                  --> Y+0
  Cacu_num             --> R20
  tempCaL              --> R22
  tempCaH              --> R20
    0091 D235      RCALL	push_gset2
    0092 2F62      MOV	R22,R18
    0093 2F40      MOV	R20,R16
    0094 9724      SBIW	R28,4
(0052) //=============================================================
(0053) //***************************************************************
(0054) //计算显示一个不带小数点的数
(0055) void Cacu_Display(unsigned char tempCaH,unsigned char tempCaL)
(0056) {  
(0057)    
(0058)    unsigned int Cacu_num;
(0059)    unsigned char num[4]={0,0,0,0};
    0095 E287      LDI	R24,0x27
    0096 E090      LDI	R25,0
    0097 2FEC      MOV	R30,R28
    0098 2FFD      MOV	R31,R29
    0099 E004      LDI	R16,4
    009A E010      LDI	R17,0
    009B 93FA      ST	R31,-Y
    009C 93EA      ST	R30,-Y
    009D 939A      ST	R25,-Y
    009E 938A      ST	R24,-Y
    009F D231      RCALL	asgncblk
(0060)    Cacu_num=tempCaH*256+tempCaL;      
    00A0 2E26      MOV	R2,R22
    00A1 2433      CLR	R3
    00A2 2E44      MOV	R4,R20
    00A3 2455      CLR	R5
    00A4 2C54      MOV	R5,R4
    00A5 2444      CLR	R4
    00A6 0C42      ADD	R4,R2
    00A7 1C53      ADC	R5,R3
    00A8 2D44      MOV	R20,R4
    00A9 2D55      MOV	R21,R5
    00AA C005      RJMP	0x00B0
(0061)    while(Cacu_num>=10000)
(0062) 			 {
(0063) 			   Cacu_num=Cacu_num-10000;								 
    00AB 5140      SUBI	R20,0x10
    00AC 4257      SBCI	R21,0x27
(0064) 			   num[3]=num[3]+1;
    00AD 818B      LDD	R24,3+Y
    00AE 5F8F      SUBI	R24,0xFF
    00AF 838B      STD	R24,3+Y
(0065) 			 }
    00B0 3140      CPI	R20,0x10
    00B1 E2E7      LDI	R30,0x27
    00B2 075E      CPC	R21,R30
    00B3 F7B8      BCC	0x00AB
    00B4 C005      RJMP	0x00BA
(0066)    while(Cacu_num>=1000)
(0067) 		     {
(0068) 			  Cacu_num=Cacu_num-1000;
    00B5 5E48      SUBI	R20,0xE8
    00B6 4053      SBCI	R21,3
(0069) 			  num[2]=num[2]+1;
    00B7 818A      LDD	R24,2+Y
    00B8 5F8F      SUBI	R24,0xFF
    00B9 838A      STD	R24,2+Y
(0070) 		     }
    00BA 3E48      CPI	R20,0xE8
    00BB E0E3      LDI	R30,3
    00BC 075E      CPC	R21,R30
    00BD F7B8      BCC	0x00B5
    00BE C005      RJMP	0x00C4
(0071)    while(Cacu_num>=100)
(0072) 			 {
(0073) 			   Cacu_num=Cacu_num-100;
    00BF 5644      SUBI	R20,0x64
    00C0 4050      SBCI	R21,0
(0074) 		       num[1]=num[1]+1;
    00C1 8189      LDD	R24,1+Y
    00C2 5F8F      SUBI	R24,0xFF
    00C3 8389      STD	R24,1+Y
(0075) 			 } 
    00C4 3644      CPI	R20,0x64
    00C5 E0E0      LDI	R30,0
    00C6 075E      CPC	R21,R30
    00C7 F7B8      BCC	0x00BF
    00C8 C005      RJMP	0x00CE
(0076)    while(Cacu_num>=10)
(0077) 			 {
(0078) 			   Cacu_num=Cacu_num-10;
    00C9 504A      SUBI	R20,0xA
    00CA 4050      SBCI	R21,0
(0079) 		       num[0]=num[0]+1;
    00CB 8188      LDD	R24,0+Y
    00CC 5F8F      SUBI	R24,0xFF
    00CD 8388      STD	R24,0+Y
(0080) 			 } 	
    00CE 304A      CPI	R20,0xA
    00CF E0E0      LDI	R30,0
    00D0 075E      CPC	R21,R30
    00D1 F7B8      BCC	0x00C9
(0081) 			 		 
(0082)    Display(12); 
    00D2 E00C      LDI	R16,0xC
    00D3 DF91      RCALL	_Display
(0083)    Display(12); 

⌨️ 快捷键说明

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