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

📄 m64.lst

📁 avr的视频采集
💻 LST
📖 第 1 页 / 共 4 页
字号:
__start:
__text_start:
    005D EFCF      LDI	R28,0xFF
    005E E1D0      LDI	R29,0x10
    005F BFCD      OUT	0x3D,R28
    0060 BFDE      OUT	0x3E,R29
    0061 51C0      SUBI	R28,0x10
    0062 40D0      SBCI	R29,0
    0063 EA0A      LDI	R16,0xAA
    0064 8308      STD	Y+0,R16
    0065 2400      CLR	R0
    0066 E2ED      LDI	R30,0x2D
    0067 E0F1      LDI	R31,1
    0068 E017      LDI	R17,7
    0069 32EF      CPI	R30,0x2F
    006A 07F1      CPC	R31,R17
    006B F011      BEQ	0x006E
    006C 9201      ST	R0,Z+
    006D CFFB      RJMP	0x0069
    006E 8300      STD	Z+0,R16
    006F E8EC      LDI	R30,0x8C
    0070 E0F0      LDI	R31,0
    0071 E0A0      LDI	R26,0
    0072 E0B1      LDI	R27,1
    0073 E010      LDI	R17,0
    0074 3BE9      CPI	R30,0xB9
    0075 07F1      CPC	R31,R17
    0076 F021      BEQ	0x007B
    0077 95C8      LPM
    0078 9631      ADIW	R30,1
    0079 920D      ST	R0,X+
    007A CFF9      RJMP	0x0074
    007B 940E04A1  CALL	_main
_exit:
    007D CFFF      RJMP	_exit
FILE: D:\PROTEU~1.7\PROTEU~1.7\JOHU\1视频处理\main.c
(0001) //////////////////////////////
(0002) //////////////////////////////   22967为近似180度
(0003) 
(0004) #include <iom64v.h>
(0005) #include <macros.h>
(0006) 
(0007) #define PREVSONG   BIT(2)
(0008) #define NEXTSONG   BIT(3)
(0009) #define VOLDOWN    BIT(4)
(0010) #define VOLUP      BIT(5)
(0011) #define STOP       BIT(6)
(0012) 
(0013) #define R_pwm0       BIT(4)
(0014) #define R_pwm1       BIT(5)
(0015) #define L_pwm0       BIT(6)
(0016) #define L_pwm1       BIT(7)
(0017) 
(0018) 
(0019) long ADCjohu=0;
(0020) int ms=0;
(0021) long xx=0;
(0022) //int adc=0;
(0023) 
(0024) #define REF 483
(0025) unsigned char lvbo=0;
(0026) long lvbo_num=0;
(0027) 
(0028) unsigned char pwm_pingjun=254;//平均速度
(0029) unsigned char Rpwm0=0;
(0030) unsigned char Rpwm1=0;
(0031) unsigned char Lpwm0=0;
(0032) unsigned char Lpwm1=0;
(0033) unsigned char all=0, a=0,b=0,c=0,d=0,e=0,f=0;
(0034) #define CIR 1
(0035) #define LINE 2
(0036) #define CLS 3
(0037) long jiaodu=0,juli=0;
(0038) int time=0;
(0039) unsigned char sec=0;
(0040) 
(0041) #define video_x 32
(0042) #define video_y 48
(0043) unsigned int  v_num=0;
(0044) unsigned char v_temp[video_y][video_x],chang=0,hang=0,   adc1=0;;
(0045) 
(0046) unsigned char x_adc;
(0047) unsigned char  y_adc;
(0048) 
(0049) void port_init(void)
(0050) {
(0051)  PORTA = 0x00;
_port_init:
    007E 2422      CLR	R2
    007F BA2B      OUT	0x1B,R2
(0052)  DDRA  = 0x00;
    0080 BA2A      OUT	0x1A,R2
(0053)  PORTB = 0x00;
    0081 BA28      OUT	0x18,R2
(0054)  DDRB  = 0x00;
    0082 BA27      OUT	0x17,R2
(0055)  PORTC = 0x00; //m103 output only
    0083 BA25      OUT	0x15,R2
(0056)  DDRC  = 0x00;
    0084 BA24      OUT	0x14,R2
(0057)  PORTD = 0x00;
    0085 BA22      OUT	0x12,R2
(0058)  DDRD  = 0x00;
    0086 BA21      OUT	0x11,R2
(0059)  PORTE = 0x00;
    0087 B823      OUT	0x03,R2
(0060)  DDRE  = 0x00;
    0088 B822      OUT	0x02,R2
(0061)  PORTF = 0x00;
    0089 92200062  STS	0x62,R2
(0062)  DDRF  = 0x00;
    008B 92200061  STS	0x61,R2
(0063)  PORTG = 0x00;
    008D 92200065  STS	0x65,R2
(0064)  DDRG  = 0x00;
    008F 92200064  STS	0x64,R2
    0091 9508      RET
(0065) }
(0066) 
(0067) //TIMER2 initialize - prescale:64
(0068) // WGM: Normal
(0069) // desired value: 1mSec
(0070) // actual value:  1.000mSec (0.0%)
(0071) void timer2_init(void)
(0072) {
(0073)  TCCR2 = 0x00; //stop
_timer2_init:
    0092 2422      CLR	R2
    0093 BC25      OUT	0x25,R2
(0074)  TCNT2 = 0x83; //setup
    0094 E883      LDI	R24,0x83
    0095 BD84      OUT	0x24,R24
(0075)  OCR2  = 0x7D;
    0096 E78D      LDI	R24,0x7D
    0097 BD83      OUT	0x23,R24
(0076)  TCCR2 = 0x03; //start
    0098 E083      LDI	R24,3
    0099 BD85      OUT	0x25,R24
    009A 9508      RET
_timer0_ovf_isr:
    009B 938A      ST	R24,-Y
    009C B78F      IN	R24,0x3F
    009D 938A      ST	R24,-Y
(0077) }
(0078) 
(0079) 
(0080) #pragma interrupt_handler timer0_ovf_isr:11
(0081) void timer0_ovf_isr(void)
(0082) {
(0083)  TCNT0 = 0x83; //reload counter value
    009E E883      LDI	R24,0x83
    009F BF82      OUT	0x32,R24
(0084)  return;//
    00A0 9189      LD	R24,Y+
    00A1 BF8F      OUT	0x3F,R24
    00A2 9189      LD	R24,Y+
    00A3 9518      RETI
(0085)  /*if (time>500){sec++;time=0;}
(0086)  time++;
(0087)  ADCjohu=ADCL;
(0088)  ADCjohu|=ADCH << 8;
(0089) ///////////////////////////////////////////////////////////////////平均值滤波  1毫秒采样滤波,10毫秒输出
(0090)  if (lvbo==0) {lvbo_num=ADCjohu/2;lvbo++;return;}
(0091)  if (lvbo<10) {lvbo_num+=ADCjohu/2;lvbo++;return;}
(0092)  	else lvbo=0;
(0093) //////////////////////////////////////////////////////////////////////////////
(0094)  if ( (ADCjohu<REF-6) || (ADCjohu>REF+6))
(0095)  	{
(0096) 	 //ADCjohu-=511-10;//-511+31-3.27371     -10
(0097)  	 xx=xx+ADCjohu-REF;//
(0098) 	}
(0099)  ms=1;*/
(0100) }
(0101) 
(0102) //ADC initialize
(0103) // Conversion time: 3uS
(0104) void adc_init(void)
(0105) {
(0106)  ADCSRA = 0x00; //disable adc
_adc_init:
    00A4 2422      CLR	R2
    00A5 B826      OUT	0x06,R2
(0107)  ADMUX = 0x01; //select adc input 0
    00A6 E081      LDI	R24,1
    00A7 B987      OUT	0x07,R24
(0108)  ACSR  = 0x80;
    00A8 E880      LDI	R24,0x80
    00A9 B988      OUT	0x08,R24
(0109)  ADCSRB = 0x00;
    00AA 9220008E  STS	0x8E,R2
(0110)  ADCSRA = 0xEa;
    00AC EE8A      LDI	R24,0xEA
    00AD B986      OUT	0x06,R24
    00AE 9508      RET
_adc_isr:
    00AF 938A      ST	R24,-Y
    00B0 B78F      IN	R24,0x3F
    00B1 938A      ST	R24,-Y
(0111) }
(0112) 
(0113) #pragma interrupt_handler adc_isr:22
(0114) void adc_isr(void)
(0115) {
(0116)  //conversion complete, read value (int) using...
(0117)  // value=ADCL;            //Read 8 low bits first (important)
(0118)  // value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
(0119)  //ADCjohu==ADCL;
(0120)  //ADCjohu|=(int)ADCH << 8;
(0121)  //PORTD=ADCjohu;
(0122)  //adc=1; 
(0123)  //if (v_x==32) return;
(0124)  adc1=1;
    00B2 E081      LDI	R24,1
    00B3 9380012A  STS	adc1,R24
(0125) 
(0126)  //PORTA=ADCL;
(0127)  
(0128)  return;
    00B5 9189      LD	R24,Y+
    00B6 BF8F      OUT	0x3F,R24
    00B7 9189      LD	R24,Y+
    00B8 9518      RETI
(0129) }
(0130) 
(0131) //call this routine to initialize all peripherals
(0132) void init_devices(void)
(0133) {
(0134)  //stop errant interrupts until set up
(0135)  CLI(); //disable all interrupts
_init_devices:
    00B9 94F8      BCLR	7
(0136)  XDIV  = 0x00; //xtal divider
    00BA 2422      CLR	R2
    00BB BE2C      OUT	0x3C,R2
(0137)  XMCRA = 0x00; //external memory
    00BC 9220006D  STS	0x6D,R2
(0138)  port_init();
    00BE DFBF      RCALL	_port_init
(0139)  timer2_init(); 
    00BF DFD2      RCALL	_timer2_init
(0140) 
(0141) //adc_init();
(0142) uart1_init();
    00C0 D00D      RCALL	_uart1_init
(0143) 
(0144)  MCUCR = 0x00;
    00C1 2422      CLR	R2
    00C2 BE25      OUT	0x35,R2
(0145)  EICRA = 0x0A; //extended ext ints
    00C3 E08A      LDI	R24,0xA
    00C4 9380006A  STS	0x6A,R24
(0146)  EICRB = 0x00; //extended ext ints
    00C6 BE2A      OUT	0x3A,R2
(0147)  EIMSK = 0x03;
    00C7 E083      LDI	R24,3
    00C8 BF89      OUT	0x39,R24
(0148)  //TIMSK = 0x40; //timer interrupt sources
(0149)  TIMSK = 0x00;
    00C9 BE27      OUT	0x37,R2
(0150)  ETIMSK = 0x00; //extended timer interrupt sources
    00CA 9220007D  STS	0x7D,R2
(0151)  SEI(); //re-enable interrupts
    00CC 9478      BSET	7
    00CD 9508      RET
(0152)  //all peripherals are now initialized
(0153) }
(0154) //UART1 initialize
(0155) // desired baud rate:19200
(0156) // actual baud rate:19231 (0.2%)
(0157) void uart1_init(void)
(0158) {
(0159)  UCSR1B = 0x00; //disable while setting baud rate
_uart1_init:
    00CE 2422      CLR	R2
    00CF 9220009A  STS	0x9A,R2
(0160)  UCSR1A = 0x00;
    00D1 9220009B  STS	0x9B,R2
(0161)  UCSR1C = 0x06;
    00D3 E086      LDI	R24,6
    00D4 9380009D  STS	0x9D,R24
(0162)  UBRR1L = 0x40; //set baud rate lo
    00D6 E480      LDI	R24,0x40
    00D7 93800099  STS	0x99,R24
(0163)  UBRR1H = 0x00; //set baud rate hi
    00D9 92200098  STS	0x98,R2
(0164)  UCSR1B = 0x98;
    00DB E988      LDI	R24,0x98
    00DC 9380009A  STS	0x9A,R24
    00DE 9508      RET
_uart1_rx_isr:
    00DF 920A      ST	R0,-Y
    00E0 921A      ST	R1,-Y
    00E1 922A      ST	R2,-Y
    00E2 923A      ST	R3,-Y
    00E3 924A      ST	R4,-Y
    00E4 925A      ST	R5,-Y
    00E5 930A      ST	R16,-Y
    00E6 931A      ST	R17,-Y
    00E7 932A      ST	R18,-Y
    00E8 933A      ST	R19,-Y
    00E9 938A      ST	R24,-Y
    00EA 939A      ST	R25,-Y
    00EB 93EA      ST	R30,-Y
    00EC 93FA      ST	R31,-Y
    00ED B60F      IN	R0,0x3F
    00EE 920A      ST	R0,-Y
    00EF 940E0699  CALL	push_gset2
(0165) }
(0166) 
(0167) #pragma interrupt_handler uart1_rx_isr:31
(0168) //cir+00100
(0169) void uart1_rx_isr(void)
(0170) {
(0171)  //uart has received a character in UDR
(0172)  if (all==CIR)
    00F1 91800114  LDS	R24,all
    00F3 3081      CPI	R24,1
    00F4 F009      BEQ	0x00F6
    00F5 C0B8      RJMP	0x01AE
(0173)  	{
(0174) 	   a=b;
    00F6 90200116  LDS	R2,b
    00F8 92200115  STS	a,R2
(0175) 	   b=c;
    00FA 90200117  LDS	R2,c
    00FC 92200116  STS	b,R2
(0176) 	   c=d;
    00FE 90200118  LDS	R2,d
    0100 92200117  STS	c,R2
(0177) 	   d=e;
    0102 90200119  LDS	R2,e
    0104 92200118  STS	d,R2
(0178) 	   e=f;
    0106 9020011A  LDS	R2,f
    0108 92200119  STS	e,R2
(0179) 	   f=UDR1;
    010A 9020009C  LDS	R2,0x9C
    010C 9220011A  STS	f,R2
(0180) 	   if ((f<'0')||(f>'9'))return;
    010E 2D82      MOV	R24,R2
    010F 3380      CPI	R24,0x30
    0110 F018      BCS	0x0114
    0111 E389      LDI	R24,0x39
    0112 1582      CP	R24,R2
    0113 F408      BCC	0x0115
    0114 C1D9      RJMP	0x02EE
(0181) 	   if (a=='+')//0x2b
    0115 91800115  LDS	R24,a
    0117 328B      CPI	R24,0x2B
    0118 F009      BEQ	0x011A
    0119 C041      RJMP	0x015B
(0182) 	   	  {jiaodu=(b-48)*10000+(c-48)*1000+(d-48)*100+(e-48)*10+(f-48);
    011A 91200117  LDS	R18,c
    011C 2733      CLR	R19
    011D EE08      LDI	R16,0xE8
    011E E013      LDI	R17,3
    011F 940E067D  CALL	empy16s
    0121 01C8      MOVW	R24,R16
    0122 5880      SUBI	R24,0x80
    0123 4B9B      SBCI	R25,0xBB
    0124 91200116  LDS	R18,b
    0126 2733      CLR	R19
    0127 E100      LDI	R16,0x10
    0128 E217      LDI	R17,0x27
    0129 940E067D  CALL	empy16s
    012B 01F8      MOVW	R30,R16
    012C 50E0      SUBI	R30,0
    012D 45F3      SBCI	R31,0x53
    012E 0FE8      ADD	R30,R24
    012F 1FF9      ADC	R31,R25
    0130 90200118  LDS	R2,d
    0132 E684      LDI	R24,0x64
    0133 9D82      MUL	R24,R2
    0134 01C0      MOVW	R24,R0
    0135 5C80      SUBI	R24,0xC0
    0136 4192      SBCI	R25,0x12
    0137 0FE8      ADD	R30,R24
    0138 1FF9      ADC	R31,R25
    0139 90200119  LDS	R2,e
    013B E08A      LDI	R24,0xA
    013C 9D82      MUL	R24,R2
    013D 01C0      MOVW	R24,R0
    013E 5E80      SUBI	R24,0xE0
    013F 4091      SBCI	R25,1
    0140 0FE8      ADD	R30,R24
    0141 1FF9      ADC	R31,R25
    0142 9180011A  LDS	R24,f
    0144 2799      CLR	R25
    0145 97C0      SBIW	R24,0x30
    0146 0FE8      ADD	R30,R24
    0147 1FF9      ADC	R31,R25
    0148 011F      MOVW	R2,R30
    0149 2444      CLR	R4
    014A FC37      SBRC	R3,7
    014B 9440      COM	R4
    014C 2455      CLR	R5
    014D FC47      SBRC	R4,7
    014E 9450      COM	R5
    014F 9230011C  STS	jiaodu+1,R3
    0151 9220011B  STS	jiaodu,R2
    0153 9250011E  STS	jiaodu+3,R5
    0155 9240011D  STS	jiaodu+2,R4
(0183) 		   all=0;return;}
    0157 2422      CLR	R2
    0158 92200114  STS	all,R2
    015A C193      RJMP	0x02EE
(0184) 	   else if (a=='-')//0x2d
    015B 91800115  LDS	R24,a
    015D 328D      CPI	R24,0x2D
    015E F009      BEQ	0x0160
    015F C045      RJMP	0x01A5
(0185) 	   	  {jiaodu=-((b-48)*10000+(c-48)*1000+(d-48)*100+(e-48)*10+(f-48));
    0160 91200117  LDS	R18,c
    0162 2733      CLR	R19
    0163 EE08      LDI	R16,0xE8
    0164 E013      LDI	R17,3
    0165 940E067D  CALL	empy16s
    0167 01C8      MOVW	R24,R16
    0168 5880      SUBI	R24,0x80
    0169 4B9B      SBCI	R25,0xBB
    016A 91200116  LDS	R18,b
    016C 2733      CLR	R19
    016D E100      LDI	R16,0x10
    016E E217      LDI	R17,0x27
    016F 940E067D  CALL	empy16s
    0171 01F8      MOVW	R30,R16
    0172 50E0      SUBI	R30,0
    0173 45F3      SBCI	R31,0x53
    0174 0FE8      ADD	R30,R24
    0175 1FF9      ADC	R31,R25
    0176 90200118  LDS	R2,d
    0178 E684      LDI	R24,0x64
    0179 9D82      MUL	R24,R2
    017A 01C0      MOVW	R24,R0
    017B 5C80      SUBI	R24,0xC0
    017C 4192      SBCI	R25,0x12
    017D 0FE8      ADD	R30,R24
    017E 1FF9      ADC	R31,R25
    017F 90200119  LDS	R2,e
    0181 E08A      LDI	R24,0xA
    0182 9D82      MUL	R24,R2
    0183 01C0      MOVW	R24,R0
    0184 5E80      SUBI	R24,0xE0
    0185 4091      SBCI	R25,1
    0186 0FE8      ADD	R30,R24
    0187 1FF9      ADC	R31,R25
    0188 9180011A  LDS	R24,f
    018A 2799      CLR	R25
    018B 97C0      SBIW	R24,0x30
    018C 0FE8      ADD	R30,R24
    018D 1FF9      ADC	R31,R25
    018E 95E0      COM	R30
    018F 95F0      COM	R31
    0190 5FEF      SUBI	R30,0xFF
    0191 4FFF      SBCI	R31,0xFF
    0192 011F      MOVW	R2,R30
    0193 2444      CLR	R4
    0194 FC37      SBRC	R3,7
    0195 9440      COM	R4
    0196 2455      CLR	R5
    0197 FC47      SBRC	R4,7
    0198 9450      COM	R5
    0199 9230011C  STS	jiaodu+1,R3
    019B 9220011B  STS	jiaodu,R2
    019D 9250011E  STS	jiaodu+3,R5
    019F 9240011D  STS	jiaodu+2,R4
(0186) 		   all=0;return;}
    01A1 2422      CLR	R2
    01A2 92200114  STS	all,R2
    01A4 C149      RJMP	0x02EE
(0187) 	   if (a!=0) {all=0;return;}
    01A5 90200115  LDS	R2,a
    01A7 2022      TST	R2
    01A8 F409      BNE	0x01AA
    01A9 C144      RJMP	0x02EE
    01AA 2422      CLR	R2
    01AB 92200114  STS	all,R2
    01AD C140      RJMP	0x02EE
(0188) 	     //PORTF=jiaodu;//while(1);
(0189) 	}
(0190)  else if (all==LINE)
    01AE 91800114  LDS	R24,all
    01B0 3082      CPI	R24,2
    01B1 F009      BEQ	0x01B3
    01B2 C0B8      RJMP	0x026B
(0191)  	{
(0192) 	   a=b;

⌨️ 快捷键说明

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