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

📄 cpld_read.lst

📁 用ICC编写的程序包括SPI
💻 LST
字号:
__start:
__text_start:
    002A E5CF      LDI	R28,0x5F
    002B E0D4      LDI	R29,4
    002C BFCD      OUT	0x3D,R28
    002D BFDE      OUT	0x3E,R29
    002E 52C0      SUBI	R28,0x20
    002F 40D0      SBCI	R29,0
    0030 EA0A      LDI	R16,0xAA
    0031 8308      STD	Y+0,R16
    0032 2400      CLR	R0
    0033 E6E0      LDI	R30,0x60
    0034 E0F0      LDI	R31,0
    0035 E010      LDI	R17,0
    0036 36E0      CPI	R30,0x60
    0037 07F1      CPC	R31,R17
    0038 F011      BEQ	0x003B
    0039 9201      ST	R0,Z+
    003A CFFB      RJMP	0x0036
    003B 8300      STD	Z+0,R16
    003C E5E4      LDI	R30,0x54
    003D E0F0      LDI	R31,0
    003E E6A0      LDI	R26,0x60
    003F E0B0      LDI	R27,0
    0040 E010      LDI	R17,0
    0041 35E4      CPI	R30,0x54
    0042 07F1      CPC	R31,R17
    0043 F021      BEQ	0x0048
    0044 95C8      LPM
    0045 9631      ADIW	R30,1
    0046 920D      ST	R0,X+
    0047 CFF9      RJMP	0x0041
    0048 940E0065  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
FILE: F:\IccAvr_Pro\Main.c
(0001) //ICC-AVR application builder : 2005-3-27 19:38:48
(0002) // Target : M16
(0003) // Crystal: 7.3728Mhz
(0004) #include <iom16v.h>
(0005) #include <macros.h>
(0006) #include "Cpld_Read.h"
(0007) #include "Display.h"
(0008) 
(0009) 
(0010) //#define DEBUG 	
(0011) 
(0012) 
(0013) //Global varible declare
(0014) //unsigned char TimeFlag=0;
(0015) 
(0016) 
(0017) void port_init(void)
(0018) {
(0019)  PORTA = 0xFF;
_port_init:
    004B EF8F      LDI	R24,0xFF
    004C BB8B      OUT	0x1B,R24
(0020)  DDRA  = 0x00;
    004D 2422      CLR	R2
    004E BA2A      OUT	0x1A,R2
(0021)  PORTB = 0xFF;
    004F BB88      OUT	0x18,R24
(0022)  DDRB  = 0x0F;
    0050 E08F      LDI	R24,0xF
    0051 BB87      OUT	0x17,R24
(0023)  PORTC = 0xFF; //m103 output only
    0052 EF8F      LDI	R24,0xFF
    0053 BB85      OUT	0x15,R24
(0024)  DDRC  = 0x00;
    0054 BA24      OUT	0x14,R2
(0025)  PORTD = 0xFF;
    0055 BB82      OUT	0x12,R24
(0026)  DDRD  = 0x00;
    0056 BA21      OUT	0x11,R2
    0057 9508      RET
(0027) }
(0028) 
(0029) //TIMER0 initialisation - prescale:1
(0030) // WGM: Normal
(0031) // desired value: 200Hz
(0032) // actual value: Out of range
(0033) //void timer0_init(void)
(0034) //{
(0035)  //TCCR0 = 0x00; //stop
(0036)  //TCNT0 = 0x70 ; //set count
(0037)  //OCR0  = 0x00 ;  //set compare
(0038)  //TCCR0 = 0x01; //start timer
(0039) //}
(0040) 
(0041) /*#pragma interrupt_handler timer0_ovf_isr:10
(0042) void timer0_ovf_isr(void)
(0043) {
(0044)  TCNT0 = 0x70 ; //reload counter value
(0045)  TimeFlag=1;
(0046) }*/
(0047) 
(0048) //UART0 initialisation
(0049) // desired baud rate: 115200
(0050) // actual: baud rate:115200 (0.0%)
(0051) // char size: 8 bit
(0052) // parity: Disabled
(0053) 
(0054) void init_devices(void)
(0055) {
(0056)  //stop errant interrupts until set up
(0057)  CLI(); //disable all interrupts
_init_devices:
    0058 94F8      BCLR	7
(0058)  port_init();
    0059 DFF1      RCALL	_port_init
(0059)  //timer0_init();
(0060) 
(0061)  Cpld_Init();
    005A 940E00AE  CALL	_Cpld_Init
(0062)  Disp_Init();
    005C 940E010E  CALL	_Disp_Init
(0063)  MCUCR = 0x00;
    005E 2422      CLR	R2
    005F BE25      OUT	0x35,R2
(0064)  GICR  = 0x00;
    0060 BE2B      OUT	0x3B,R2
(0065)  TIMSK = 0x01; //timer interrupt sources
    0061 E081      LDI	R24,1
    0062 BF89      OUT	0x39,R24
(0066)  SEI(); //re-enable interrupts
    0063 9478      BSET	7
    0064 9508      RET
(0067)  //all peripherals are now initialised
(0068) }
(0069) 
(0070) void main()
(0071) {
(0072) int CpldResult1;
(0073) int CpldResult2;
(0074) 
(0075) 
(0076) init_devices();
_main:
  CpldResult2          --> R20
  CpldResult1          --> R22
    0065 DFF2      RCALL	_init_devices
(0077) Cpld_Set();
    0066 940E00A0  CALL	_Cpld_Set
    0068 C010      RJMP	0x0079
(0078) 
(0079) while(1)
(0080) {
(0081) 
(0082) CpldResult1=Cpld_Read(0);
    0069 2700      CLR	R16
    006A 940E007B  CALL	_Cpld_Read
    006C 01B8      MOVW	R22,R16
(0083) CpldResult2=Cpld_Read(1);
    006D E001      LDI	R16,1
    006E 940E007B  CALL	_Cpld_Read
    0070 01A8      MOVW	R20,R16
(0084) 
(0085) #ifdef 	DEBUG
(0086) Cpld_Set();
(0087) Display(1234,0);
(0088) Display(4321,2);
(0089) #else
(0090) Display(CpldResult1,0);
    0071 2722      CLR	R18
    0072 018B      MOVW	R16,R22
    0073 940E00B3  CALL	_Display
(0091) Display(CpldResult2,2);
    0075 E022      LDI	R18,2
    0076 018A      MOVW	R16,R20
    0077 940E00B3  CALL	_Display
    0079 CFEF      RJMP	0x0069
    007A 9508      RET
_Cpld_Read:
  temp                 --> R22
  Result               --> R20
  Address              --> R16
    007B 940E0143  CALL	push_gset2
FILE: F:\IccAvr_Pro\Cpld_Read.c
(0001) #include "Cpld_Read.h"
(0002) #include <macros.h>
(0003) 
(0004) int Cpld_Read(unsigned char Address)
(0005) {
(0006)   
(0007)   unsigned char temp;
(0008)   int 	 Result;
(0009)   CLI();
    007D 94F8      BCLR	7
(0010)   if(Address)		   					//Address select
    007E 2300      TST	R16
    007F F011      BEQ	0x0082
(0011)   	PORTB|=BIT(A0);			
    0080 9AC3      SBI	0x18,3
    0081 C001      RJMP	0x0083
(0012)   else
(0013)   	PORTB&=~BIT(A0);
    0082 98C3      CBI	0x18,3
(0014)   PORTB|=BIT(LoadL);					//LoadL set low
    0083 9AC1      SBI	0x18,1
(0015)   NOP();
    0084 0000      NOP
(0016)   NOP();
    0085 0000      NOP
(0017)   PORTB&=~BIT(LoadL);					
    0086 98C1      CBI	0x18,1
(0018)   NOP();
    0087 0000      NOP
(0019)   NOP();
    0088 0000      NOP
(0020)   NOP();
    0089 0000      NOP
(0021)   temp=CpldRead;						//Read Data low byte
    008A B369      IN	R22,0x19
(0022)   temp=CpldRead;
    008B B369      IN	R22,0x19
(0023)   
(0024)   PORTB|=BIT(LoadL);					//Set LoadL high
    008C 9AC1      SBI	0x18,1
(0025)   
(0026)   PORTB|=BIT(LoadH);					//LoadH set low
    008D 9AC0      SBI	0x18,0
(0027)   NOP();
    008E 0000      NOP
(0028)   NOP();
    008F 0000      NOP
(0029)   PORTB&=~BIT(LoadH);					
    0090 98C0      CBI	0x18,0
(0030)   NOP();
    0091 0000      NOP
(0031)   NOP();
    0092 0000      NOP
(0032)   NOP();
    0093 0000      NOP
(0033)   Result=CpldRead;						//Read Data low byte
    0094 B349      IN	R20,0x19
    0095 2755      CLR	R21
(0034)   Result=CpldRead;
    0096 B349      IN	R20,0x19
    0097 2755      CLR	R21
(0035)   
(0036)   PORTB|=BIT(LoadH);					//LoadH set high
    0098 9AC0      SBI	0x18,0
(0037)   
(0038)  Result=(Result<<8)+temp;
    0099 2F54      MOV	R21,R20
    009A 2F46      MOV	R20,R22
(0039)  SEI();
    009B 9478      BSET	7
(0040)  
(0041)  return	 Result;
    009C 018A      MOVW	R16,R20
    009D 940E0137  CALL	pop_gset2
    009F 9508      RET
(0042)  
(0043)  }
(0044)  
(0045)  void  Cpld_Set(void)
(0046)  {
(0047)   	CLI();			 	 				//Set all the counters reset 
_Cpld_Set:
    00A0 94F8      BCLR	7
(0048) 	PORTB|=BIT(Set);					//Zero
    00A1 9AC2      SBI	0x18,2
(0049) 	NOP();
    00A2 0000      NOP
(0050) 	NOP();
    00A3 0000      NOP
(0051) 	PORTB&=~BIT(Set);
    00A4 98C2      CBI	0x18,2
(0052) 	NOP();
    00A5 0000      NOP
(0053) 	NOP();
    00A6 0000      NOP
(0054) 	NOP();
    00A7 0000      NOP
(0055) 	NOP();
    00A8 0000      NOP
(0056) 	NOP();
    00A9 0000      NOP
(0057) 	NOP();
    00AA 0000      NOP
(0058) 	PORTB|=BIT(Set);
    00AB 9AC2      SBI	0x18,2
(0059) 	SEI();
    00AC 9478      BSET	7
    00AD 9508      RET
(0060) }
(0061) 
(0062) void  Cpld_Init(void)
(0063) {	  
(0064)  PORTB|=BIT(Set);	 	 				//Set All Control signal high
_Cpld_Init:
    00AE 9AC2      SBI	0x18,2
(0065)  PORTB|=BIT(LoadL);
    00AF 9AC1      SBI	0x18,1
(0066)  PORTB|=BIT(LoadH);
    00B0 9AC0      SBI	0x18,0
(0067)  PORTB&=~BIT(LoadL);
    00B1 98C1      CBI	0x18,1
    00B2 9508      RET
_Display:
  i                    --> R20
  DispContent          --> R22
  gate                 --> R10
  content              --> R12
    00B3 940E013D  CALL	push_gset5
    00B5 2EA2      MOV	R10,R18
    00B6 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;
    00B7 2766      CLR	R22
    00B8 2777      CLR	R23
(0009) 	unsigned char i;
(0010) 	for(i=0;i<4;i++)		   			   			 //gain the BCD code of the number
    00B9 2744      CLR	R20
    00BA C016      RJMP	0x00D1
(0011) 		{
(0012) 		 DispContent<<=4;
    00BB 0F66      LSL	R22
    00BC 1F77      ROL	R23
    00BD 0F66      LSL	R22
    00BE 1F77      ROL	R23
    00BF 0F66      LSL	R22
    00C0 1F77      ROL	R23
    00C1 0F66      LSL	R22
    00C2 1F77      ROL	R23
(0013) 		 DispContent=DispContent|(content%10);
    00C3 E02A      LDI	R18,0xA
    00C4 E030      LDI	R19,0
    00C5 0186      MOVW	R16,R12
    00C6 940E011B  CALL	mod16u
    00C8 2B60      OR	R22,R16
    00C9 2B71      OR	R23,R17
(0014) 		 content=content/10;
    00CA E02A      LDI	R18,0xA
    00CB E030      LDI	R19,0
    00CC 0186      MOVW	R16,R12
    00CD 940E011D  CALL	div16u
    00CF 0168      MOVW	R12,R16
    00D0 9543      INC	R20
    00D1 3044      CPI	R20,4
    00D2 F340      BCS	0x00BB
(0015) 		 }
(0016) 	
(0017) 	 switch(gate)
    00D3 2CEA      MOV	R14,R10
    00D4 24FF      CLR	R15
    00D5 20EE      TST	R14
    00D6 F411      BNE	0x00D9
    00D7 20FF      TST	R15
    00D8 F071      BEQ	0x00E7
    00D9 01C7      MOVW	R24,R14
    00DA 3081      CPI	R24,1
    00DB E0E0      LDI	R30,0
    00DC 079E      CPC	R25,R30
    00DD F059      BEQ	0x00E9
    00DE 3082      CPI	R24,2
    00DF E0E0      LDI	R30,0
    00E0 079E      CPC	R25,R30
    00E1 F049      BEQ	0x00EB
    00E2 3083      CPI	R24,3
    00E3 E0E0      LDI	R30,0
    00E4 079E      CPC	R25,R30
    00E5 F039      BEQ	0x00ED
    00E6 C008      RJMP	0x00EF
(0018) 	 	{
(0019) 		case 0: PORTB&=~BIT(Gate0);break;	  		 //Open the gate 
    00E7 98C4      CBI	0x18,4
    00E8 C009      RJMP	0x00F2
(0020) 		case 1: PORTB&=~BIT(Gate1);break;
    00E9 98C5      CBI	0x18,5
    00EA C007      RJMP	0x00F2
(0021) 		case 2: PORTB&=~BIT(Gate2);break;
    00EB 98C6      CBI	0x18,6
    00EC C005      RJMP	0x00F2
(0022) 		case 3: PORTB&=~BIT(Gate3);break;
    00ED 98C7      CBI	0x18,7
    00EE C003      RJMP	0x00F2
(0023) 		default:  PORTB|=0xF0;break;
    00EF B388      IN	R24,0x18
    00F0 6F80      ORI	R24,0xF0
    00F1 BB88      OUT	0x18,R24
(0024) 		}
(0025) 		for (i=0;i<=15;i++)				 			 //Send the number by serial
    00F2 2744      CLR	R20
    00F3 C011      RJMP	0x0105
(0026) 			{
(0027) 			 PORTC|=BIT(DispClk);
    00F4 9AAE      SBI	0x15,6
(0028) 			 NOP();
    00F5 0000      NOP
(0029) 			 NOP();
    00F6 0000      NOP
(0030) 			 if(DispContent&0x01)
    00F7 FF60      SBRS	R22,0
    00F8 C002      RJMP	0x00FB
(0031) 				 PORTC|=BIT(DispData);
    00F9 9AAF      SBI	0x15,7
    00FA C001      RJMP	0x00FC
(0032) 			 else
(0033) 			 	 PORTC&=~BIT(DispData);
    00FB 98AF      CBI	0x15,7
(0034) 			 NOP();
    00FC 0000      NOP
(0035) 			 NOP();
    00FD 0000      NOP
(0036) 			 NOP();
    00FE 0000      NOP
(0037) 			 NOP();
    00FF 0000      NOP
(0038) 			 asm("clc");
    0100 9488      BCLR	0
(0039) 			 DispContent>>=1;
    0101 9576      LSR	R23
    0102 9567      ROR	R22
(0040) 			 PORTC&=~BIT(DispClk);
    0103 98AE      CBI	0x15,6
    0104 9543      INC	R20
    0105 E08F      LDI	R24,0xF
    0106 1784      CP	R24,R20
    0107 F760      BCC	0x00F4
(0041) 			 }
(0042) 		PORTB|=0xF0;
    0108 B388      IN	R24,0x18
    0109 6F80      ORI	R24,0xF0
    010A BB88      OUT	0x18,R24
    010B 940E013A  CALL	pop_gset5
    010D 9508      RET
(0043) }	 
(0044) 
(0045) void Disp_Init(void)			  	   				 //Set all control signal high
(0046) {
(0047)  	 DDRB|=0xFF;
_Disp_Init:
    010E B387      IN	R24,0x17
    010F 6F8F      ORI	R24,0xFF
    0110 BB87      OUT	0x17,R24
(0048) 	 PORTB|=0xF0;
    0111 B388      IN	R24,0x18
    0112 6F80      ORI	R24,0xF0
    0113 BB88      OUT	0x18,R24
(0049) 	 PORTC|=BIT(DispData)|BIT(DispClk);
    0114 B385      IN	R24,0x15
    0115 6C80      ORI	R24,0xC0
    0116 BB85      OUT	0x15,R24
(0050) 	 DDRC|=BIT(DispData)|BIT(DispClk);
FILE: <library>
    0117 B384      IN	R24,0x14
    0118 6C80      ORI	R24,0xC0
    0119 BB84      OUT	0x14,R24
    011A 9508      RET
mod16u:
    011B 9468      BSET	6
    011C C001      RJMP	xdiv16u
div16u:
    011D 94E8      BCLR	6
xdiv16u:
    011E 92EA      ST	R14,-Y
    011F 92FA      ST	R15,-Y
    0120 938A      ST	R24,-Y
    0121 24EE      CLR	R14
    0122 24FF      CLR	R15
    0123 E180      LDI	R24,0x10
    0124 0F00      LSL	R16
    0125 1F11      ROL	R17
    0126 1CEE      ROL	R14
    0127 1CFF      ROL	R15
    0128 16E2      CP	R14,R18
    0129 06F3      CPC	R15,R19
    012A F018      BCS	0x012E
    012B 1AE2      SUB	R14,R18
    012C 0AF3      SBC	R15,R19
    012D 9503      INC	R16
    012E 958A      DEC	R24
    012F F7A1      BNE	0x0124
    0130 F416      BRTC	0x0133
    0131 2D0E      MOV	R16,R14
    0132 2D1F      MOV	R17,R15
    0133 9189      LD	R24,Y+
    0134 90F9      LD	R15,Y+
    0135 90E9      LD	R14,Y+
    0136 9508      RET
pop_gset2:
    0137 E0E2      LDI	R30,2
    0138 940C0149  JMP	pop
pop_gset5:
    013A 27EE      CLR	R30
    013B 940C0149  JMP	pop
push_gset5:
    013D 92FA      ST	R15,-Y
    013E 92EA      ST	R14,-Y
push_gset4:
    013F 92DA      ST	R13,-Y
    0140 92CA      ST	R12,-Y
push_gset3:
    0141 92BA      ST	R11,-Y
    0142 92AA      ST	R10,-Y
push_gset2:
    0143 937A      ST	R23,-Y
    0144 936A      ST	R22,-Y
push_gset1:
    0145 935A      ST	R21,-Y
    0146 934A      ST	R20,-Y
    0147 9508      RET
pop_gset1:
    0148 E0E1      LDI	R30,1
pop:
    0149 9149      LD	R20,Y+
    014A 9159      LD	R21,Y+
    014B FDE0      SBRC	R30,0
    014C 9508      RET
    014D 9169      LD	R22,Y+
    014E 9179      LD	R23,Y+
    014F FDE1      SBRC	R30,1
    0150 9508      RET
    0151 90A9      LD	R10,Y+
    0152 90B9      LD	R11,Y+
    0153 FDE2      SBRC	R30,2
    0154 9508      RET
    0155 90C9      LD	R12,Y+
    0156 90D9      LD	R13,Y+
    0157 FDE3      SBRC	R30,3
    0158 9508      RET
    0159 90E9      LD	R14,Y+
    015A 90F9      LD	R15,Y+
    015B 9508      RET

⌨️ 快捷键说明

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