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

📄 m64.lst

📁 数字舵机(1) 数字脉宽检测 数字脉宽检测
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
      5D EFCF      LDI	R28,0xFF
      5E E1D0      LDI	R29,0x10
      5F BFCD      OUT	0x3D,R28
      60 BFDE      OUT	0x3E,R29
      61 51CE      SUBI	R28,0x1E
      62 40D0      SBCI	R29,0
      63 EA0A      LDI	R16,0xAA
      64 8308      STD	Y+0,R16
      65 2400      CLR	R0
      66 E2EE      LDI	R30,0x2E
      67 E0F1      LDI	R31,1
      68 E011      LDI	R17,1
      69 32EE      CPI	R30,0x2E
      6A 07F1      CPC	R31,R17
      6B F011      BEQ	0x006E
      6C 9201      ST	R0,Z+
      6D CFFB      RJMP	0x0069
      6E 8300      STD	Z+0,R16
      6F E8EC      LDI	R30,0x8C
      70 E0F0      LDI	R31,0
      71 E0A0      LDI	R26,0
      72 E0B1      LDI	R27,1
      73 E010      LDI	R17,0
      74 E000      LDI	R16,0
      75 BF0B      OUT	0x3B,R16
      76 3BEA      CPI	R30,0xBA
      77 07F1      CPC	R31,R17
      78 F021      BEQ	0x007D
      79 95C8      LPM
      7A 9631      ADIW	R30,1
      7B 920D      ST	R0,X+
      7C CFF9      RJMP	0x0076
      7D 940E 0534 CALL	_main
_exit:
      7F CFFF      RJMP	_exit
FILE: C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
(0001) //////////////////////////////
(0002) //////////////////////////////   61493为近似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=100;//平均速度
(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) long jiaodu=0,juli=0;
(0037) int time=0;
(0038) unsigned char sec=0;
(0039) 
(0040)         unsigned int temp1=0, temp2=0;  
(0041)         unsigned char count1=0;//0表示一个捕获周期完成,1:准备捕获,2:第一次捕获,3:第二次捕获 
(0042) 
(0043) unsigned char shang_johu=0;//		
(0044) 		
(0045) 		
(0046) void port_init(void)
(0047) {
(0048)  PORTA = 0x00;
_port_init:
      80 2422      CLR	R2
      81 BA2B      OUT	0x1B,R2
(0049)  DDRA  = 0x00;
      82 BA2A      OUT	0x1A,R2
(0050)  PORTB = 0x00;
      83 BA28      OUT	0x18,R2
(0051)  DDRB  = 0x00;
      84 BA27      OUT	0x17,R2
(0052)  PORTC = 0x00; //m103 output only
      85 BA25      OUT	0x15,R2
(0053)  DDRC  = 0x00;
      86 BA24      OUT	0x14,R2
(0054)  PORTD = 0x00;
      87 BA22      OUT	0x12,R2
(0055)  DDRD  = 0x00;
      88 BA21      OUT	0x11,R2
(0056)  PORTE = 0x00;
      89 B823      OUT	0x03,R2
(0057)  DDRE  = 0x00;
      8A B822      OUT	0x02,R2
(0058)  PORTF = 0x00;
      8B 9220 0062 STS	0x0062,R2
(0059)  DDRF  = 0x00;
      8D 9220 0061 STS	0x0061,R2
(0060)  PORTG = 0x00;
      8F 9220 0065 STS	0x0065,R2
(0061)  DDRG  = 0x00;
      91 9220 0064 STS	0x0064,R2
      93 9508      RET
(0062) }
(0063) 
(0064) //TIMER2 initialize - prescale:64
(0065) // WGM: Normal
(0066) // desired value: 1mSec
(0067) // actual value:  1.000mSec (0.0%)
(0068) void timer2_init(void)
(0069) {
(0070)  TCCR2 = 0x00; //stop
_timer2_init:
      94 2422      CLR	R2
      95 BC25      OUT	0x25,R2
(0071)  TCNT2 = 0x83; //setup
      96 E883      LDI	R24,0x83
      97 BD84      OUT	0x24,R24
(0072)  OCR2  = 0x7D;
      98 E78D      LDI	R24,0x7D
      99 BD83      OUT	0x23,R24
(0073)  TCCR2 = 0x03; //start
      9A E083      LDI	R24,3
      9B BD85      OUT	0x25,R24
      9C 9508      RET
_timer0_ovf_isr:
      9D 920A      ST	R0,-Y
      9E 921A      ST	R1,-Y
      9F 922A      ST	R2,-Y
      A0 923A      ST	R3,-Y
      A1 924A      ST	R4,-Y
      A2 925A      ST	R5,-Y
      A3 926A      ST	R6,-Y
      A4 927A      ST	R7,-Y
      A5 928A      ST	R8,-Y
      A6 929A      ST	R9,-Y
      A7 930A      ST	R16,-Y
      A8 931A      ST	R17,-Y
      A9 932A      ST	R18,-Y
      AA 933A      ST	R19,-Y
      AB 938A      ST	R24,-Y
      AC 939A      ST	R25,-Y
      AD B60F      IN	R0,0x3F
      AE 920A      ST	R0,-Y
      AF 940E 07EB CALL	push_xgsetF00C
(0074) }
(0075) 
(0076) 
(0077) #pragma interrupt_handler timer0_ovf_isr:11
(0078) void timer0_ovf_isr(void)
(0079) {
(0080)  TCNT0 = 0x83; //reload counter value
      B1 E883      LDI	R24,0x83
      B2 BF82      OUT	0x32,R24
(0081)  if (time>500){sec++;time=0;}
      B3 EF84      LDI	R24,0xF4
      B4 E091      LDI	R25,1
      B5 9020 0125 LDS	R2,time
      B7 9030 0126 LDS	R3,time+1
      B9 1582      CP	R24,R2
      BA 0593      CPC	R25,R3
      BB F45C      BGE	0x00C7
      BC 9180 0127 LDS	R24,sec
      BE 5F8F      SUBI	R24,0xFF
      BF 9380 0127 STS	sec,R24
      C1 2422      CLR	R2
      C2 2433      CLR	R3
      C3 9230 0126 STS	time+1,R3
      C5 9220 0125 STS	time,R2
(0082)  time++;
      C7 9180 0125 LDS	R24,time
      C9 9190 0126 LDS	R25,time+1
      CB 9601      ADIW	R24,1
      CC 9390 0126 STS	time+1,R25
      CE 9380 0125 STS	time,R24
(0083)  ADCjohu=ADCL;
      D0 B024      IN	R2,0x04
      D1 2433      CLR	R3
      D2 2444      CLR	R4
      D3 2455      CLR	R5
      D4 9230 0101 STS	ADCjohu+1,R3
      D6 9220 0100 STS	ADCjohu,R2
      D8 9250 0103 STS	ADCjohu+3,R5
      DA 9240 0102 STS	ADCjohu+2,R4
(0084)  ADCjohu|=ADCH << 8;
      DC B025      IN	R2,0x05
      DD 2433      CLR	R3
      DE 2C32      MOV	R3,R2
      DF 2422      CLR	R2
      E0 2444      CLR	R4
      E1 FC37      SBRC	R3,7
      E2 9440      COM	R4
      E3 2455      CLR	R5
      E4 FC47      SBRC	R4,7
      E5 9450      COM	R5
      E6 9080 0102 LDS	R8,ADCjohu+2
      E8 9090 0103 LDS	R9,ADCjohu+3
      EA 9060 0100 LDS	R6,ADCjohu
      EC 9070 0101 LDS	R7,ADCjohu+1
      EE 2862      OR	R6,R2
      EF 2873      OR	R7,R3
      F0 2884      OR	R8,R4
      F1 2895      OR	R9,R5
      F2 9270 0101 STS	ADCjohu+1,R7
      F4 9260 0100 STS	ADCjohu,R6
      F6 9290 0103 STS	ADCjohu+3,R9
      F8 9280 0102 STS	ADCjohu+2,R8
(0085) ///////////////////////////////////////////////////////////////////平均值滤波  1毫秒采样滤波,10毫秒输出
(0086)  if (lvbo==0) {lvbo_num=ADCjohu/2;lvbo++;return;}
      FA 9020 010C LDS	R2,lvbo
      FC 2022      TST	R2
      FD F4D1      BNE	0x0118
      FE E042      LDI	R20,2
      FF E050      LDI	R21,0
     100 E060      LDI	R22,0
     101 E070      LDI	R23,0
     102 0183      MOVW	R16,R6
     103 0194      MOVW	R18,R8
     104 937A      ST	R23,-Y
     105 936A      ST	R22,-Y
     106 935A      ST	R21,-Y
     107 934A      ST	R20,-Y
     108 940E 0777 CALL	div32s
     10A 9310 010E STS	lvbo_num+1,R17
     10C 9300 010D STS	lvbo_num,R16
     10E 9330 0110 STS	lvbo_num+3,R19
     110 9320 010F STS	lvbo_num+2,R18
     112 9180 010C LDS	R24,lvbo
     114 5F8F      SUBI	R24,0xFF
     115 9380 010C STS	lvbo,R24
     117 C077      RJMP	0x018F
(0087)  if (lvbo<10) {lvbo_num+=ADCjohu/2;lvbo++;return;}
     118 9180 010C LDS	R24,lvbo
     11A 308A      CPI	R24,0xA
     11B F560      BCC	0x0148
     11C E042      LDI	R20,2
     11D E050      LDI	R21,0
     11E E060      LDI	R22,0
     11F E070      LDI	R23,0
     120 9120 0102 LDS	R18,ADCjohu+2
     122 9130 0103 LDS	R19,ADCjohu+3
     124 9100 0100 LDS	R16,ADCjohu
     126 9110 0101 LDS	R17,ADCjohu+1
     128 937A      ST	R23,-Y
     129 936A      ST	R22,-Y
     12A 935A      ST	R21,-Y
     12B 934A      ST	R20,-Y
     12C 940E 0777 CALL	div32s
     12E 9040 010F LDS	R4,lvbo_num+2
     130 9050 0110 LDS	R5,lvbo_num+3
     132 9020 010D LDS	R2,lvbo_num
     134 9030 010E LDS	R3,lvbo_num+1
     136 0E20      ADD	R2,R16
     137 1E31      ADC	R3,R17
     138 1E42      ADC	R4,R18
     139 1E53      ADC	R5,R19
     13A 9230 010E STS	lvbo_num+1,R3
     13C 9220 010D STS	lvbo_num,R2
     13E 9250 0110 STS	lvbo_num+3,R5
     140 9240 010F STS	lvbo_num+2,R4
     142 9180 010C LDS	R24,lvbo
     144 5F8F      SUBI	R24,0xFF
     145 9380 010C STS	lvbo,R24
     147 C047      RJMP	0x018F
(0088)  	else lvbo=0;/**/
     148 2422      CLR	R2
     149 9220 010C STS	lvbo,R2
(0089) //////////////////////////////////////////////////////////////////////////////
(0090)  if ( (ADCjohu<REF-6) || (ADCjohu>REF+6))
     14B ED4D      LDI	R20,0xDD
     14C E051      LDI	R21,1
     14D E060      LDI	R22,0
     14E E070      LDI	R23,0
     14F 9040 0102 LDS	R4,ADCjohu+2
     151 9050 0103 LDS	R5,ADCjohu+3
     153 9020 0100 LDS	R2,ADCjohu
     155 9030 0101 LDS	R3,ADCjohu+1
     157 1624      CP	R2,R20
     158 0635      CPC	R3,R21
     159 0646      CPC	R4,R22
     15A 0657      CPC	R5,R23
     15B F04C      BLT	0x0165
     15C EE49      LDI	R20,0xE9
     15D E051      LDI	R21,1
     15E E060      LDI	R22,0
     15F E070      LDI	R23,0
     160 1542      CP	R20,R2
     161 0553      CPC	R21,R3
     162 0564      CPC	R22,R4
     163 0575      CPC	R23,R5
     164 F524      BGE	0x0189
(0091)  	{
(0092) 	 //ADCjohu-=511-10;//-511+31-3.27371     -10
(0093)  	 xx=xx+ADCjohu-REF;//
     165 9040 0102 LDS	R4,ADCjohu+2
     167 9050 0103 LDS	R5,ADCjohu+3
     169 9020 0100 LDS	R2,ADCjohu
     16B 9030 0101 LDS	R3,ADCjohu+1
     16D 9080 0108 LDS	R8,xx+2
     16F 9090 0109 LDS	R9,xx+3
     171 9060 0106 LDS	R6,xx
     173 9070 0107 LDS	R7,xx+1
     175 0C62      ADD	R6,R2
     176 1C73      ADC	R7,R3
     177 1C84      ADC	R8,R4
     178 1C95      ADC	R9,R5
     179 EE43      LDI	R20,0xE3
     17A E051      LDI	R21,1
     17B E060      LDI	R22,0
     17C E070      LDI	R23,0
     17D 1A64      SUB	R6,R20
     17E 0A75      SBC	R7,R21
     17F 0A86      SBC	R8,R22
     180 0A97      SBC	R9,R23
     181 9270 0107 STS	xx+1,R7
     183 9260 0106 STS	xx,R6
     185 9290 0109 STS	xx+3,R9
     187 9280 0108 STS	xx+2,R8
(0094) 	}
(0095)  ms=1;
     189 E081      LDI	R24,1
     18A E090      LDI	R25,0
     18B 9390 0105 STS	ms+1,R25
     18D 9380 0104 STS	ms,R24
     18F 940E 07F2 CALL	pop_xgsetF00C
     191 9009      LD	R0,Y+
     192 BE0F      OUT	0x3F,R0
     193 9199      LD	R25,Y+
     194 9189      LD	R24,Y+
     195 9139      LD	R19,Y+
     196 9129      LD	R18,Y+
     197 9119      LD	R17,Y+
     198 9109      LD	R16,Y+
     199 9099      LD	R9,Y+
     19A 9089      LD	R8,Y+
     19B 9079      LD	R7,Y+
     19C 9069      LD	R6,Y+
     19D 9059      LD	R5,Y+
     19E 9049      LD	R4,Y+
     19F 9039      LD	R3,Y+
     1A0 9029      LD	R2,Y+
     1A1 9019      LD	R1,Y+
     1A2 9009      LD	R0,Y+
     1A3 9518      RETI
(0096) //ADCjohu==ADCL;
(0097) //PORTD=ADCjohu;
(0098) }
(0099) 
(0100) //ADC initialize
(0101) // Conversion time: 3uS
(0102) void adc_init(void)
(0103) {
(0104)  ADCSRA = 0x00; //disable adc
_adc_init:
     1A4 2422      CLR	R2
     1A5 B826      OUT	0x06,R2
(0105)  ADMUX = 0x01; //select adc input 0
     1A6 E081      LDI	R24,1
     1A7 B987      OUT	0x07,R24
(0106)  ACSR  = 0x80;
     1A8 E880      LDI	R24,0x80
     1A9 B988      OUT	0x08,R24
(0107) // ADCSRB = 0x00;
(0108)  ADCSRA = 0xEf;
     1AA EE8F      LDI	R24,0xEF
     1AB B986      OUT	0x06,R24
     1AC 9508      RET
_adc_isr:
     1AD 922A      ST	R2,-Y
     1AE B62F      IN	R2,0x3F
     1AF 922A      ST	R2,-Y
(0109) }
(0110) 
(0111) #pragma interrupt_handler adc_isr:22
(0112) void adc_isr(void)
(0113) {
(0114)  //conversion complete, read value (int) using...
(0115)  // value=ADCL;            //Read 8 low bits first (important)
(0116)  // value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
(0117)  //ADCjohu==ADCL;
(0118)  //ADCjohu|=(int)ADCH << 8;
(0119)  //PORTD=ADCjohu;
(0120)  //adc=1;
(0121)  PORTA=ADCL;
     1B0 B024      IN	R2,0x04
     1B1 BA2B      OUT	0x1B,R2
     1B2 9029      LD	R2,Y+
     1B3 BE2F      OUT	0x3F,R2
     1B4 9029      LD	R2,Y+
     1B5 9518      RETI
(0122) 
(0123) }
(0124) 
(0125) //call this routine to initialize all peripherals
(0126) void init_devices(void)
(0127) {
(0128)  //stop errant interrupts until set up
(0129)  CLI(); //disable all interrupts
_init_devices:
     1B6 94F8      BCLR	7
(0130)  XDIV  = 0x00; //xtal divider
     1B7 2422      CLR	R2

⌨️ 快捷键说明

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