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

📄 push.lst

📁 针对多路视频远程无线传输问题
💻 LST
字号:
__text_start:
__start:
    0013 E5CF      LDI	R28,0x5F
    0014 E0D4      LDI	R29,4
    0015 BFCD      OUT	0x3D,R28
    0016 BFDE      OUT	0x3E,R29
    0017 51C0      SUBI	R28,0x10
    0018 40D0      SBCI	R29,0
    0019 EA0A      LDI	R16,0xAA
    001A 8308      STD	Y+0,R16
    001B 2400      CLR	R0
    001C E6E0      LDI	R30,0x60
    001D E0F0      LDI	R31,0
    001E E010      LDI	R17,0
    001F 36E4      CPI	R30,0x64
    0020 07F1      CPC	R31,R17
    0021 F011      BEQ	0x0024
    0022 9201      ST	R0,Z+
    0023 CFFB      RJMP	0x001F
    0024 8300      STD	Z+0,R16
    0025 E2E6      LDI	R30,0x26
    0026 E0F0      LDI	R31,0
    0027 E6A0      LDI	R26,0x60
    0028 E0B0      LDI	R27,0
    0029 E010      LDI	R17,0
    002A 32E6      CPI	R30,0x26
    002B 07F1      CPC	R31,R17
    002C F021      BEQ	0x0031
    002D 95C8      LPM
    002E 9631      ADIW	R30,1
    002F 920D      ST	R0,X+
    0030 CFF9      RJMP	0x002A
    0031 D0B9      RCALL	_main
_exit:
    0032 CFFF      RJMP	_exit
FILE: D:\工作\video切换\soft\按键切换\test.c
(0001) //ICC-AVR application builder : 2006-3-22 10:22:28
(0002) // Target : M8
(0003) // Crystal: 11.059Mhz
(0004) 
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007) //#include <stddef.h>
(0008) 
(0009) unsigned char ICP_Flag;
(0010) unsigned int ICP_value_down;
(0011) unsigned char state;
(0012) 
(0013) #define LED1_ON()     PORTD=0x01;PORTC = 0x00;PORTC=0x01;
(0014) #define LED2_ON()     PORTD=0x02;PORTC = 0x00;PORTC=0x02;
(0015) #define LED3_ON()     PORTD=0x04;PORTC = 0x00;PORTC=0x04;
(0016) #define LED4_ON()     PORTD=0x08;PORTC = 0x00;PORTC=0x08;
(0017) 
(0018) void port_init(void)
(0019) {
(0020)  PORTB = 0x00;
_port_init:
    0033 2422      CLR	R2
    0034 BA28      OUT	0x18,R2
(0021)  DDRB  = 0x00;
    0035 BA27      OUT	0x17,R2
(0022)  PORTC = 0x00; //m103 output only
    0036 BA25      OUT	0x15,R2
(0023)  DDRC  = 0x0F;
    0037 E08F      LDI	R24,0xF
    0038 BB84      OUT	0x14,R24
(0024)  PORTD = 0x00;
    0039 BA22      OUT	0x12,R2
(0025)  DDRD  = 0x0F;
    003A BB81      OUT	0x11,R24
(0026) }
    003B 9508      RET
(0027) 
(0028) //TIMER1 initialize - prescale:Stop
(0029) // WGM: 0) Normal, TOP=0xFFFF
(0030) // desired value: 1Hz
(0031) // actual value: Out of range
(0032) void timer1_init(void)
(0033) {
(0034)  TCCR1B = 0x00; //stop
_timer1_init:
    003C 2422      CLR	R2
    003D BC2E      OUT	0x2E,R2
(0035)  TCNT1H = 0x00 /*INVALID SETTING*/; //setup
    003E BC2D      OUT	0x2D,R2
(0036)  TCNT1L = 0x00 /*INVALID SETTING*/;
    003F BC2C      OUT	0x2C,R2
(0037)  OCR1AH = 0x00 /*INVALID SETTING*/;
    0040 BC2B      OUT	0x2B,R2
(0038)  OCR1AL = 0x00 /*INVALID SETTING*/;
    0041 BC2A      OUT	0x2A,R2
(0039)  OCR1BH = 0x00 /*INVALID SETTING*/;
    0042 BC29      OUT	0x29,R2
(0040)  OCR1BL = 0x00 /*INVALID SETTING*/;
    0043 BC28      OUT	0x28,R2
(0041)  ICR1H  = 0x00 /*INVALID SETTING*/;
    0044 BC27      OUT	0x27,R2
(0042)  ICR1L  = 0x00 /*INVALID SETTING*/;
    0045 BC26      OUT	0x26,R2
(0043)  TCCR1A = 0x00;
    0046 BC2F      OUT	0x2F,R2
(0044)  TCCR1B = 0xC0; //start Timer
    0047 EC80      LDI	R24,0xC0
    0048 BD8E      OUT	0x2E,R24
(0045) }
    0049 9508      RET
_delay_s:
  i                    --> R20
  j                    --> R22
  x                    --> R16
    004A D0C7      RCALL	push_gset2
(0046) 
(0047) ///////////////////////////////////////延时程序
(0048) void delay_s(char x)   
(0049) {
    004B C010      RJMP	0x005C
(0050) int i;
(0051) int j;
(0052) while(x--)
(0053) {
(0054) for(i=0;i<500;i++)
    004C 2744      CLR	R20
    004D 2755      CLR	R21
(0055)   {
(0056)   for(j=0;j<1000;j++)
    004E 2766      CLR	R22
    004F 2777      CLR	R23
    0050 5F6F      SUBI	R22,0xFF
    0051 4F7F      SBCI	R23,0xFF
    0052 3E68      CPI	R22,0xE8
    0053 E0E3      LDI	R30,3
    0054 077E      CPC	R23,R30
    0055 F3D4      BLT	0x0050
    0056 5F4F      SUBI	R20,0xFF
    0057 4F5F      SBCI	R21,0xFF
    0058 3F44      CPI	R20,0xF4
    0059 E0E1      LDI	R30,1
    005A 075E      CPC	R21,R30
    005B F394      BLT	0x004E
    005C 2E20      MOV	R2,R16
    005D 2433      CLR	R3
    005E 5001      SUBI	R16,1
    005F 2022      TST	R2
    0060 F759      BNE	0x004C
(0057)   ;
(0058)   }
(0059) }
(0060) }
    0061 D097      RCALL	pop_gset2
    0062 9508      RET
_VideoSwitch:
  Counter              --> R20
    0063 D097      RCALL	push_gset1
    0064 01A8      MOVW	R20,R16
(0061) //////////////////////////////////////
(0062) 
(0063) void VideoSwitch(unsigned int Counter)	   //根据捕捉计数值切换视频通道
(0064) {
(0065)      if(Counter>0x0D7E)
    0065 E78E      LDI	R24,0x7E
    0066 E09D      LDI	R25,0xD
    0067 1784      CP	R24,R20
    0068 0795      CPC	R25,R21
    0069 F408      BCC	0x006B
(0066) 	    {   //超过2.5ms,可能是漏掉了一个脉宽信号,不做动作
(0067) 			//LED1_ON(); 										  
(0068) 		    return;
    006A C02A      RJMP	0x0095
(0069) 		}
(0070) 	 
(0071)  	 if(Counter<0x0818)//状态1:			   0.5~1.5ms
    006B 3148      CPI	R20,0x18
    006C E0E8      LDI	R30,0x8
    006D 075E      CPC	R21,R30
    006E F408      BCC	0x0070
(0072) 	 	{
(0073) 		 	//LED2_ON(); 
(0074) 		}
    006F C025      RJMP	0x0095
(0075) 		else
(0076) 		{ //1.5ms~2.5ms
(0077) 		  if(state > 1)
    0070 E081      LDI	R24,1
    0071 90200060  LDS	R2,_state
    0073 1582      CP	R24,R2
    0074 F418      BCC	0x0078
(0078) 		     state = 0;
    0075 2422      CLR	R2
    0076 92200060  STS	_state,R2
(0079) 
(0080) 		   switch(state)
    0078 91400060  LDS	R20,_state
    007A 2755      CLR	R21
    007B 3040      CPI	R20,0
    007C 0745      CPC	R20,R21
    007D F029      BEQ	0x0083
    007E 3041      CPI	R20,1
    007F E0E0      LDI	R30,0
    0080 075E      CPC	R21,R30
    0081 F039      BEQ	0x0089
    0082 C00B      RJMP	0x008E
(0081) 		   {
(0082) 		   	   case 0:
(0083) 			       LED2_ON();
    0083 E082      LDI	R24,2
    0084 BB82      OUT	0x12,R24
    0085 2422      CLR	R2
    0086 BA25      OUT	0x15,R2
    0087 BB85      OUT	0x15,R24
(0084) 				   break;
    0088 C005      RJMP	0x008E
(0085) 			   case 1:
(0086) 			       LED4_ON();
    0089 E088      LDI	R24,0x8
    008A BB82      OUT	0x12,R24
    008B 2422      CLR	R2
    008C BA25      OUT	0x15,R2
    008D BB85      OUT	0x15,R24
(0087) 				   break;
(0088) 		   }
(0089) 		   state++;
    008E 91800060  LDS	R24,_state
    0090 5F8F      SUBI	R24,0xFF
    0091 93800060  STS	_state,R24
(0090) 		   delay_s(4);
    0093 E004      LDI	R16,4
    0094 DFB5      RCALL	_delay_s
(0091)            return;	
(0092) 		  // LED3_ON();   
(0093) 		}
(0094) }
    0095 D068      RCALL	pop_gset1
    0096 9508      RET
_timer1_ovf_isr:
    0097 922A      ST	R2,-Y
    0098 938A      ST	R24,-Y
    0099 B62F      IN	R2,0x3F
    009A 922A      ST	R2,-Y
(0095) 
(0096) #pragma interrupt_handler timer1_ovf_isr:9
(0097) void timer1_ovf_isr(void)
(0098) {
(0099)  //TIMER1 has overflowed
(0100)  TCNT1H = 0x00 /*INVALID SETTING*/; //reload counter high value
    009B 2422      CLR	R2
    009C BC2D      OUT	0x2D,R2
(0101)  TCNT1L = 0x00 /*INVALID SETTING*/; //reload counter low value
    009D BC2C      OUT	0x2C,R2
(0102)  TCCR1B |= 0xc0;  //回到等待上升沿的状态
    009E B58E      IN	R24,0x2E
    009F 6C80      ORI	R24,0xC0
    00A0 BD8E      OUT	0x2E,R24
(0103) }
    00A1 9029      LD	R2,Y+
    00A2 BE2F      OUT	0x3F,R2
    00A3 9189      LD	R24,Y+
    00A4 9029      LD	R2,Y+
    00A5 9518      RETI
_timer1_capt_isr:
    00A6 D06E      RCALL	push_lset
    00A7 D053      RCALL	push_gset1
(0104) 
(0105) #pragma interrupt_handler timer1_capt_isr:6
(0106) void timer1_capt_isr(void)
(0107) {
(0108)  //timer 1 input capture event, read (int)value in ICR1 using;
(0109)  // value=ICR1L;            //Read low byte first (important)
(0110)  // value|=(int)ICR1H << 8; //Read high byte and shift into top byte
(0111)  	switch(ICP_Flag)//根据状态值判断捕捉到的是什么跳变信号
    00A8 91400063  LDS	R20,_ICP_Flag
    00AA 2755      CLR	R21
    00AB 3040      CPI	R20,0
    00AC 0745      CPC	R20,R21
    00AD F089      BEQ	0x00BF
    00AE 3041      CPI	R20,1
    00AF E0E0      LDI	R30,0
    00B0 075E      CPC	R21,R30
    00B1 F009      BEQ	0x00B3
    00B2 C02B      RJMP	0x00DE
(0112) 	 {
(0113)  	  	case 1://0x40://捕捉到上升沿
(0114) 			 TCNT1H = 0x00; //reload counter high value
    00B3 2422      CLR	R2
    00B4 BC2D      OUT	0x2D,R2
(0115) 			 TCNT1L = 0x00; //reload counter low value
    00B5 BC2C      OUT	0x2C,R2
(0116) 			 TCCR1B &= 0xBF; //ICES1->0,转为捕捉下降沿
    00B6 B58E      IN	R24,0x2E
    00B7 7B8F      ANDI	R24,0xBF
    00B8 BD8E      OUT	0x2E,R24
(0117) 			 TCCR1B |= 0x82;	//开捕捉,开启定时器,8分频
    00B9 B58E      IN	R24,0x2E
    00BA 6882      ORI	R24,0x82
    00BB BD8E      OUT	0x2E,R24
(0118) 			 ICP_Flag = 0;
    00BC 92200063  STS	_ICP_Flag,R2
(0119) 			 break;
    00BE C01F      RJMP	0x00DE
(0120) 		
(0121) 		case 0://0x00://捕捉到下降沿
(0122) 			 TCCR1B &= 0xf8; //关闭定时器
    00BF B58E      IN	R24,0x2E
    00C0 7F88      ANDI	R24,0xF8
    00C1 BD8E      OUT	0x2E,R24
(0123) 			 ICP_value_down = ICR1L;//Read low byte first (important)
    00C2 B426      IN	R2,0x26
    00C3 2433      CLR	R3
    00C4 92300062  STS	_ICP_value_down+1,R3
    00C6 92200061  STS	_ICP_value_down,R2
(0124) 			 ICP_value_down |= (int)ICR1H << 8; //Read high byte and shift into top byte
    00C8 B427      IN	R2,0x27
    00C9 2433      CLR	R3
    00CA 2C32      MOV	R3,R2
    00CB 2422      CLR	R2
    00CC 90400061  LDS	R4,_ICP_value_down
    00CE 90500062  LDS	R5,_ICP_value_down+1
    00D0 2842      OR	R4,R2
    00D1 2853      OR	R5,R3
    00D2 92500062  STS	_ICP_value_down+1,R5
    00D4 92400061  STS	_ICP_value_down,R4
(0125) 			 VideoSwitch(ICP_value_down);
    00D6 0182      MOVW	R16,R4
    00D7 DF8B      RCALL	_VideoSwitch
(0126) 			 TCCR1B |= 0x40; //ICES1->1完成一个正脉宽捕捉,回到等待上升沿的状态
    00D8 B58E      IN	R24,0x2E
    00D9 6480      ORI	R24,0x40
    00DA BD8E      OUT	0x2E,R24
(0127) 			 ICP_Flag = 1;
    00DB E081      LDI	R24,1
    00DC 93800063  STS	_ICP_Flag,R24
(0128) 			 break;
(0129)  	 }
(0130) }
    00DE D01F      RCALL	pop_gset1
    00DF D04C      RCALL	pop_lset
    00E0 9518      RETI
(0131) 
(0132) //call this routine to initialize all peripherals
(0133) void init_devices(void)
(0134) {
(0135)  //stop errant interrupts until set up
(0136)  CLI(); //disable all interrupts
_init_devices:
    00E1 94F8      BCLR	7
(0137)  port_init();
    00E2 DF50      RCALL	_port_init
(0138)  timer1_init();
    00E3 DF58      RCALL	_timer1_init
(0139) 
(0140)  MCUCR = 0x00;
    00E4 2422      CLR	R2
    00E5 BE25      OUT	0x35,R2
(0141)  GICR  = 0x00;
    00E6 BE2B      OUT	0x3B,R2
(0142)  TIMSK = 0x24; //timer interrupt sources
    00E7 E284      LDI	R24,0x24
    00E8 BF89      OUT	0x39,R24
(0143)  SEI(); //re-enable interrupts
    00E9 9478      BSET	7
(0144)  //all peripherals are now initialized
(0145) }
    00EA 9508      RET
(0146) 
(0147) void main()
(0148) {
(0149)  	 init_devices();
_main:
    00EB DFF5      RCALL	_init_devices
(0150) 	 state = 0;
    00EC 2422      CLR	R2
    00ED 92200060  STS	_state,R2
(0151) 	 ICP_value_down = 0;
    00EF 2433      CLR	R3
    00F0 92300062  STS	_ICP_value_down+1,R3
    00F2 92200061  STS	_ICP_value_down,R2
(0152) 	 PORTD = 0x08;
    00F4 E088      LDI	R24,0x8
    00F5 BB82      OUT	0x12,R24
(0153) 	 PORTC = 0x08;
    00F6 BB85      OUT	0x15,R24
(0154) 	 while(1)
    00F7 CFFF      RJMP	0x00F7
(0155) 	 {
(0156) 	  ;
(0157) 	 }
(0158) }
FILE: <library>
    00F8 9508      RET
pop_gset2:
    00F9 E0E2      LDI	R30,2
    00FA C004      RJMP	pop
push_gset1:
    00FB 935A      ST	R21,-Y
    00FC 934A      ST	R20,-Y
    00FD 9508      RET
pop_gset1:
    00FE E0E1      LDI	R30,1
pop:
    00FF 9149      LD	R20,Y+
    0100 9159      LD	R21,Y+
    0101 FDE0      SBRC	R30,0
    0102 9508      RET
    0103 9169      LD	R22,Y+
    0104 9179      LD	R23,Y+
    0105 FDE1      SBRC	R30,1
    0106 9508      RET
    0107 90A9      LD	R10,Y+
    0108 90B9      LD	R11,Y+
    0109 FDE2      SBRC	R30,2
    010A 9508      RET
    010B 90C9      LD	R12,Y+
    010C 90D9      LD	R13,Y+
    010D FDE3      SBRC	R30,3
    010E 9508      RET
    010F 90E9      LD	R14,Y+
    0110 90F9      LD	R15,Y+
    0111 9508      RET
push_gset2:
    0112 937A      ST	R23,-Y
    0113 936A      ST	R22,-Y
    0114 CFE6      RJMP	push_gset1
push_lset:
    0115 93FA      ST	R31,-Y
    0116 93EA      ST	R30,-Y
    0117 93BA      ST	R27,-Y
    0118 93AA      ST	R26,-Y
    0119 939A      ST	R25,-Y
    011A 938A      ST	R24,-Y
    011B 933A      ST	R19,-Y
    011C 932A      ST	R18,-Y
    011D 931A      ST	R17,-Y
    011E 930A      ST	R16,-Y
    011F 929A      ST	R9,-Y
    0120 928A      ST	R8,-Y
    0121 927A      ST	R7,-Y
    0122 926A      ST	R6,-Y
    0123 925A      ST	R5,-Y
    0124 924A      ST	R4,-Y
    0125 923A      ST	R3,-Y
    0126 922A      ST	R2,-Y
    0127 921A      ST	R1,-Y
    0128 920A      ST	R0,-Y
    0129 B60F      IN	R0,0x3F
    012A 920A      ST	R0,-Y
    012B 9508      RET
pop_lset:
    012C 9009      LD	R0,Y+
    012D BE0F      OUT	0x3F,R0
    012E 9009      LD	R0,Y+
    012F 9019      LD	R1,Y+
    0130 9029      LD	R2,Y+
    0131 9039      LD	R3,Y+
    0132 9049      LD	R4,Y+
    0133 9059      LD	R5,Y+
    0134 9069      LD	R6,Y+
    0135 9079      LD	R7,Y+
    0136 9089      LD	R8,Y+
    0137 9099      LD	R9,Y+
    0138 9109      LD	R16,Y+
    0139 9119      LD	R17,Y+
    013A 9129      LD	R18,Y+
    013B 9139      LD	R19,Y+
    013C 9189      LD	R24,Y+
    013D 9199      LD	R25,Y+
    013E 91A9      LD	R26,Y+
    013F 91B9      LD	R27,Y+
    0140 91E9      LD	R30,Y+
    0141 91F9      LD	R31,Y+
    0142 9508      RET

⌨️ 快捷键说明

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