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

📄 spi_test.lst

📁 用ICC编写的程序包括SPI
💻 LST
📖 第 1 页 / 共 2 页
字号:
    0100 98C4      CBI	0x18,4
    0101 C016      RJMP	0x0118
(0093)   while(j<1)  
(0094)   {  
(0095) 	for (i=0;i<5;i++)
    0102 2766      CLR	R22
    0103 C011      RJMP	0x0115
(0096) 	{
(0097) 	putSPIchar(0xaa);
    0104 EA0A      LDI	R16,0xAA
    0105 DFB9      RCALL	_putSPIchar
(0098) 	while(!SPI_datain);
    0106 90200060  LDS	R2,SPI_datain
    0108 2022      TST	R2
    0109 F3E1      BEQ	0x0106
(0099) 	  data[i]=getSPIchar();
    010A DF95      RCALL	_getSPIchar
    010B 01CE      MOVW	R24,R28
    010C 2FE6      MOV	R30,R22
    010D 27FF      CLR	R31
    010E 0FE8      ADD	R30,R24
    010F 1FF9      ADC	R31,R25
    0110 8300      STD	Z+0,R16
(0100) 	  SPI_datain=0;
    0111 2422      CLR	R2
    0112 92200060  STS	SPI_datain,R2
    0114 9563      INC	R22
    0115 3065      CPI	R22,5
    0116 F368      BCS	0x0104
(0101) 	}
(0102) 	j++;
    0117 9543      INC	R20
    0118 3041      CPI	R20,1
    0119 F340      BCS	0x0102
(0103)   }  
(0104)   PORTB|=BIT(SS);
    011A 9AC4      SBI	0x18,4
(0105)   Disp_Init();
    011B 940E0185  CALL	_Disp_Init
(0106)   Display(*(unsigned int*)(data+1),0);
    011D 2722      CLR	R18
    011E 01FE      MOVW	R30,R28
    011F 8101      LDD	R16,Z+1
    0120 8112      LDD	R17,Z+2
    0121 940E0126  CALL	_Display
(0107)   
(0108)   
(0109)   while(1);
    0123 CFFF      RJMP	0x0123
    0124 9625      ADIW	R28,5
    0125 9508      RET
_Display:
  i                    --> R20
  DispContent          --> R22
  gate                 --> R10
  content              --> R12
    0126 940E01B1  CALL	push_gset5
    0128 2EA2      MOV	R10,R18
    0129 0168      MOVW	R12,R16
FILE: F:\IccAvr_Pro\Display.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) 
(0004) #include "Display.h"
(0005) 
(0006) void Display(unsigned int content,unsigned char gate)
(0007) {	 
(0008) 	unsigned int DispContent=0;
    012A 2766      CLR	R22
    012B 2777      CLR	R23
(0009) 	unsigned char i;
(0010) 	for(i=0;i<4;i++)		   			   			 //gain the BCD code of the number
    012C 2744      CLR	R20
    012D C016      RJMP	0x0144
(0011) 		{
(0012) 		 DispContent<<=4;
    012E 0F66      LSL	R22
    012F 1F77      ROL	R23
    0130 0F66      LSL	R22
    0131 1F77      ROL	R23
    0132 0F66      LSL	R22
    0133 1F77      ROL	R23
    0134 0F66      LSL	R22
    0135 1F77      ROL	R23
(0013) 		 DispContent=DispContent|(content%10);
    0136 E02A      LDI	R18,0xA
    0137 E030      LDI	R19,0
    0138 0186      MOVW	R16,R12
    0139 940E0192  CALL	mod16u
    013B 2B60      OR	R22,R16
    013C 2B71      OR	R23,R17
(0014) 		 content=content/10;
    013D E02A      LDI	R18,0xA
    013E E030      LDI	R19,0
    013F 0186      MOVW	R16,R12
    0140 940E0194  CALL	div16u
    0142 0168      MOVW	R12,R16
    0143 9543      INC	R20
    0144 3044      CPI	R20,4
    0145 F340      BCS	0x012E
(0015) 		 }
(0016) 	
(0017) 	 switch(gate)
    0146 2CEA      MOV	R14,R10
    0147 24FF      CLR	R15
    0148 20EE      TST	R14
    0149 F411      BNE	0x014C
    014A 20FF      TST	R15
    014B F071      BEQ	0x015A
    014C 01C7      MOVW	R24,R14
    014D 3081      CPI	R24,1
    014E E0E0      LDI	R30,0
    014F 079E      CPC	R25,R30
    0150 F059      BEQ	0x015C
    0151 3082      CPI	R24,2
    0152 E0E0      LDI	R30,0
    0153 079E      CPC	R25,R30
    0154 F049      BEQ	0x015E
    0155 3083      CPI	R24,3
    0156 E0E0      LDI	R30,0
    0157 079E      CPC	R25,R30
    0158 F039      BEQ	0x0160
    0159 C008      RJMP	0x0162
(0018) 	 	{
(0019) 		case 0: PORTB&=~BIT(Gate0);break;	  		 //Open the gate 
    015A 98C4      CBI	0x18,4
    015B C009      RJMP	0x0165
(0020) 		case 1: PORTB&=~BIT(Gate1);break;
    015C 98C5      CBI	0x18,5
    015D C007      RJMP	0x0165
(0021) 		case 2: PORTB&=~BIT(Gate2);break;
    015E 98C6      CBI	0x18,6
    015F C005      RJMP	0x0165
(0022) 		case 3: PORTB&=~BIT(Gate3);break;
    0160 98C7      CBI	0x18,7
    0161 C003      RJMP	0x0165
(0023) 		default:  PORTB|=0xF0;break;
    0162 B388      IN	R24,0x18
    0163 6F80      ORI	R24,0xF0
    0164 BB88      OUT	0x18,R24
(0024) 		}
(0025) 		for (i=0;i<=15;i++)				 			 //Send the number by serial
    0165 2744      CLR	R20
    0166 C015      RJMP	0x017C
(0026) 			{
(0027) 			 PORTC|=BIT(DispClk);
    0167 9AAE      SBI	0x15,6
(0028) 			 NOP();
    0168 0000      NOP
(0029) 			 NOP();
    0169 0000      NOP
(0030) 			 if(DispContent&0x01)
    016A 01CB      MOVW	R24,R22
    016B 7081      ANDI	R24,1
    016C 7090      ANDI	R25,0
    016D 3080      CPI	R24,0
    016E 0789      CPC	R24,R25
    016F F011      BEQ	0x0172
(0031) 				 PORTC|=BIT(DispData);
    0170 9AAF      SBI	0x15,7
    0171 C001      RJMP	0x0173
(0032) 			 else
(0033) 			 	 PORTC&=~BIT(DispData);
    0172 98AF      CBI	0x15,7
(0034) 			 NOP();
    0173 0000      NOP
(0035) 			 NOP();
    0174 0000      NOP
(0036) 			 NOP();
    0175 0000      NOP
(0037) 			 NOP();
    0176 0000      NOP
(0038) 			 asm("clc");
    0177 9488      BCLR	0
(0039) 			 DispContent>>=1;
    0178 9576      LSR	R23
    0179 9567      ROR	R22
(0040) 			 PORTC&=~BIT(DispClk);
    017A 98AE      CBI	0x15,6
    017B 9543      INC	R20
    017C E08F      LDI	R24,0xF
    017D 1784      CP	R24,R20
    017E F740      BCC	0x0167
(0041) 			 }
(0042) 		PORTB|=0xF0;
    017F B388      IN	R24,0x18
    0180 6F80      ORI	R24,0xF0
    0181 BB88      OUT	0x18,R24
    0182 940E01AE  CALL	pop_gset5
    0184 9508      RET
(0043) }	 
(0044) 
(0045) void Disp_Init(void)			  	   				 //Set all control signal high
(0046) {
(0047)  	 DDRB|=0xFF;
_Disp_Init:
    0185 B387      IN	R24,0x17
    0186 6F8F      ORI	R24,0xFF
    0187 BB87      OUT	0x17,R24
(0048) 	 PORTB|=0xF0;
    0188 B388      IN	R24,0x18
    0189 6F80      ORI	R24,0xF0
    018A BB88      OUT	0x18,R24
(0049) 	 PORTC|=BIT(DispData)|BIT(DispClk);
    018B B385      IN	R24,0x15
    018C 6C80      ORI	R24,0xC0
    018D BB85      OUT	0x15,R24
(0050) 	 DDRC|=BIT(DispData)|BIT(DispClk);
FILE: <library>
    018E B384      IN	R24,0x14
    018F 6C80      ORI	R24,0xC0
    0190 BB84      OUT	0x14,R24
    0191 9508      RET
mod16u:
    0192 9468      BSET	6
    0193 C001      RJMP	xdiv16u
div16u:
    0194 94E8      BCLR	6
xdiv16u:
    0195 92EA      ST	R14,-Y
    0196 92FA      ST	R15,-Y
    0197 938A      ST	R24,-Y
    0198 24EE      CLR	R14
    0199 24FF      CLR	R15
    019A E180      LDI	R24,0x10
    019B 0F00      LSL	R16
    019C 1F11      ROL	R17
    019D 1CEE      ROL	R14
    019E 1CFF      ROL	R15
    019F 16E2      CP	R14,R18
    01A0 06F3      CPC	R15,R19
    01A1 F018      BCS	0x01A5
    01A2 1AE2      SUB	R14,R18
    01A3 0AF3      SBC	R15,R19
    01A4 9503      INC	R16
    01A5 958A      DEC	R24
    01A6 F7A1      BNE	0x019B
    01A7 F416      BRTC	0x01AA
    01A8 2D0E      MOV	R16,R14
    01A9 2D1F      MOV	R17,R15
    01AA 9189      LD	R24,Y+
    01AB 90F9      LD	R15,Y+
    01AC 90E9      LD	R14,Y+
    01AD 9508      RET
pop_gset5:
    01AE 27EE      CLR	R30
    01AF 940C01BD  JMP	pop
push_gset5:
    01B1 92FA      ST	R15,-Y
    01B2 92EA      ST	R14,-Y
push_gset4:
    01B3 92DA      ST	R13,-Y
    01B4 92CA      ST	R12,-Y
push_gset3:
    01B5 92BA      ST	R11,-Y
    01B6 92AA      ST	R10,-Y
push_gset2:
    01B7 937A      ST	R23,-Y
    01B8 936A      ST	R22,-Y
push_gset1:
    01B9 935A      ST	R21,-Y
    01BA 934A      ST	R20,-Y
    01BB 9508      RET
pop_gset1:
    01BC E0E1      LDI	R30,1
pop:
    01BD 9149      LD	R20,Y+
    01BE 9159      LD	R21,Y+
    01BF FDE0      SBRC	R30,0
    01C0 9508      RET
    01C1 9169      LD	R22,Y+
    01C2 9179      LD	R23,Y+
    01C3 FDE1      SBRC	R30,1
    01C4 9508      RET
    01C5 90A9      LD	R10,Y+
    01C6 90B9      LD	R11,Y+
    01C7 FDE2      SBRC	R30,2
    01C8 9508      RET
    01C9 90C9      LD	R12,Y+
    01CA 90D9      LD	R13,Y+
    01CB FDE3      SBRC	R30,3
    01CC 9508      RET
    01CD 90E9      LD	R14,Y+
    01CE 90F9      LD	R15,Y+
    01CF 9508      RET

⌨️ 快捷键说明

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