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

📄 text1.lst

📁 AVR单片机应用开发指南及实例,包含许多实例,挺不错
💻 LST
📖 第 1 页 / 共 2 页
字号:
    00F6 F011      BEQ	0x00F9
    00F7 3860      CPI	R22,0x80
    00F8 F409      BNE	0x00FA
(0229) 		    {break;}
    00F9 C001      RJMP	0x00FB
    00FA CFE6      RJMP	0x00E1
(0230) 		 }
(0231)    }   
    00FB 940E0212  CALL	pop_gset2
    00FD 9508      RET
(0232) }
(0233) 
(0234) void mic_startup()
(0235) {//声控启动程序运行
_mic_startup:
  mic_in               --> R16
    00FE C004      RJMP	0x0103
(0236)  unsigned char mic_in;
(0237)  while(1)//等待PB2按键按下	
(0238)    {	  //无键按下等待
(0239)     mic_in=PINB & 0x04;     //pb2=0
    00FF B306      IN	R16,0x16
    0100 7004      ANDI	R16,4
(0240)     if(mic_in==0){break;}
    0101 F409      BNE	0x0103
    0102 C001      RJMP	0x0104
    0103 CFFB      RJMP	0x00FF
    0104 9508      RET
(0241)    }//有键按下运行下面的程序
(0242) }
(0243) 
(0244) //                #       
(0245) //                #
(0246) //                #
(0247) //                #
(0248) //                #    //  delay_time1  转弯时间
(0249) //        # # # # #    //  delay_time2  直行时间
(0250) //      # X       #    //<A>  0x40  delay_time2-50
(0251) //      #   B  C  #    //<B>  0x20  delay_time1+50
(0252) //      #  D  A   #    //<C>  0x80  delay_time1-50
(0253) //      #         #    //<D>  0x10  delay_time2+50
(0254) //        # # # #      // max: 2000   min: 200 
(0255) 
(0256) unsigned int delay_time1,delay_time2;
(0257) 
(0258) void remote_auto_time()
(0259) {
(0260)  unsigned char remote_in;
(0261)  	  remote_in = PINB & 0xF0;
_remote_auto_time:
  remote_in            --> R16
    0105 B306      IN	R16,0x16
    0106 7F00      ANDI	R16,0xF0
(0262)       switch (remote_in)
    0107 2711      CLR	R17
    0108 3200      CPI	R16,0x20
    0109 E0E0      LDI	R30,0
    010A 071E      CPC	R17,R30
    010B F119      BEQ	0x012F
    010C E280      LDI	R24,0x20
    010D E090      LDI	R25,0
    010E 1780      CP	R24,R16
    010F 0791      CPC	R25,R17
    0110 F07C      BLT	0x0120
    0111 3000      CPI	R16,0
    0112 0701      CPC	R16,R17
    0113 F409      BNE	0x0115
    0114 C06A      RJMP	0x017F
    0115 3000      CPI	R16,0
    0116 E0E0      LDI	R30,0
    0117 071E      CPC	R17,R30
    0118 F40C      BGE	0x011A
    0119 C065      RJMP	0x017F
    011A 3100      CPI	R16,0x10
    011B E0E0      LDI	R30,0
    011C 071E      CPC	R17,R30
    011D F409      BNE	0x011F
    011E C039      RJMP	0x0158
    011F C05F      RJMP	0x017F
    0120 3400      CPI	R16,0x40
    0121 E0E0      LDI	R30,0
    0122 071E      CPC	R17,R30
    0123 F101      BEQ	0x0144
    0124 3400      CPI	R16,0x40
    0125 E0E0      LDI	R30,0
    0126 071E      CPC	R17,R30
    0127 F40C      BGE	0x0129
    0128 C056      RJMP	0x017F
    0129 3800      CPI	R16,0x80
    012A E0E0      LDI	R30,0
    012B 071E      CPC	R17,R30
    012C F409      BNE	0x012E
    012D C03E      RJMP	0x016C
    012E C050      RJMP	0x017F
(0263)       	{//检测遥控器是否有键按下
(0264)       case 0x20:  // < A >
(0265) 		 delay_time2 = delay_time2 - 50;
    012F 91800066  LDS	R24,delay_time2
    0131 91900067  LDS	R25,delay_time2+1
    0133 97C2      SBIW	R24,0x32
    0134 93900067  STS	delay_time2+1,R25
    0136 93800066  STS	delay_time2,R24
(0266) 	     if(delay_time2 == 50)
    0138 3382      CPI	R24,0x32
    0139 E0E0      LDI	R30,0
    013A 079E      CPC	R25,R30
    013B F009      BEQ	0x013D
    013C C042      RJMP	0x017F
(0267) 		   {delay_time2 = 100;}	 
    013D E684      LDI	R24,0x64
    013E E090      LDI	R25,0
    013F 93900067  STS	delay_time2+1,R25
    0141 93800066  STS	delay_time2,R24
(0268)       	break;
    0143 C03B      RJMP	0x017F
(0269)       case 0x40:  // < B >
(0270) 		 delay_time1 = delay_time1 + 50;
    0144 91800068  LDS	R24,delay_time1
    0146 91900069  LDS	R25,delay_time1+1
    0148 96C2      ADIW	R24,0x32
    0149 93900069  STS	delay_time1+1,R25
    014B 93800068  STS	delay_time1,R24
(0271) 	     if(delay_time1 == 2050)
    014D 3082      CPI	R24,2
    014E E0E8      LDI	R30,0x8
    014F 079E      CPC	R25,R30
    0150 F571      BNE	0x017F
(0272) 		   {delay_time1 = 2000;}	 
    0151 ED80      LDI	R24,0xD0
    0152 E097      LDI	R25,7
    0153 93900069  STS	delay_time1+1,R25
    0155 93800068  STS	delay_time1,R24
(0273)       	break;
    0157 C027      RJMP	0x017F
(0274)       case 0x10:  // < C >
(0275) 		 delay_time1 = delay_time1 - 50;
    0158 91800068  LDS	R24,delay_time1
    015A 91900069  LDS	R25,delay_time1+1
    015C 97C2      SBIW	R24,0x32
    015D 93900069  STS	delay_time1+1,R25
    015F 93800068  STS	delay_time1,R24
(0276) 	     if(delay_time1 == 50)
    0161 3382      CPI	R24,0x32
    0162 E0E0      LDI	R30,0
    0163 079E      CPC	R25,R30
    0164 F4D1      BNE	0x017F
(0277) 		   {delay_time1 = 100;}	 
    0165 E684      LDI	R24,0x64
    0166 E090      LDI	R25,0
    0167 93900069  STS	delay_time1+1,R25
    0169 93800068  STS	delay_time1,R24
(0278)       	break;
    016B C013      RJMP	0x017F
(0279)       case 0x80:  // < D >
(0280)          delay_time2 = delay_time2 + 50;
    016C 91800066  LDS	R24,delay_time2
    016E 91900067  LDS	R25,delay_time2+1
    0170 96C2      ADIW	R24,0x32
    0171 93900067  STS	delay_time2+1,R25
    0173 93800066  STS	delay_time2,R24
(0281) 	     if(delay_time2 == 2050)
    0175 3082      CPI	R24,2
    0176 E0E8      LDI	R30,0x8
    0177 079E      CPC	R25,R30
    0178 F431      BNE	0x017F
(0282) 		   {delay_time2 = 2000;}	 
    0179 ED80      LDI	R24,0xD0
    017A E097      LDI	R25,7
    017B 93900067  STS	delay_time2+1,R25
    017D 93800066  STS	delay_time2,R24
(0283)       	break;
(0284)       case 0x00:  // 无按键
(0285) 	     break;
    017F 9508      RET
_timer1:
    0180 922A      ST	R2,-Y
    0181 923A      ST	R3,-Y
    0182 938A      ST	R24,-Y
    0183 939A      ST	R25,-Y
    0184 B62F      IN	R2,0x3F
    0185 922A      ST	R2,-Y
FILE: D:\afish\工作内容\DIY-08-16\M16\DIY-08-16\舵机\motor.c
(0001) /*******************************************/
(0002) /*            广州天河双龙电子公司         */
(0003) /*            http://www.sl.com.cn         */
(0004) /*功能:  PA口控制八路伺服电机。           */
(0005) /*注意:伺服电机数据线是I/O-VCC-GND        */
(0006) /*******************************************/
(0007) //         ATMEGA16  晶振 8MHz             //
(0008) #include <iom16v.h>
(0009) #include <macros.h>
(0010) #include <diy0206.c>
(0011) #pragma interrupt_handler timer1:9
(0012) 
(0013) //*********************************************************************
(0014) #define  delay_time 0xb1e0			//延时20 ms
(0015) 
(0016) //以下常量对应的角度(n为负)			 n90     n45	0	   45	  90
(0017) //const  unsigned char loc_angle[10]={0x01f4,0x03e8,0x05dc,0x07d0,0x0904};
(0018) const  unsigned int loc_angle[8]={0x01f4,0x03e8,0x05dc,0x07d0,0x0904,0x07d0,0x05dc,0x03e8};
(0019) unsigned char pwm_number=0;	//脉冲数
(0020) unsigned char pwm_outword=1;	//输出命令
(0021) unsigned int  delay_timel,delay_timeh;	//低电平延时时间,高电平延时时间
(0022) //********************************************************************
(0023) void timer1(void) 	//T0定时中断服务子程序
(0024) {
(0025) 	
(0026) 	if (pwm_outword!=0x80)
    0186 91800061  LDS	R24,pwm_outword
    0188 3880      CPI	R24,0x80
    0189 F061      BEQ	0x0196
(0027) 	{
(0028) 		
(0029) 		TCNT1=delay_timeh;
    018A 90200062  LDS	R2,delay_timeh
    018C 90300063  LDS	R3,delay_timeh+1
    018E BC3D      OUT	0x2D,R3
    018F BC2C      OUT	0x2C,R2
(0030) 		PORTA=pwm_outword;        	//输出控制命令
    0190 2E28      MOV	R2,R24
    0191 BB8B      OUT	0x1B,R24
(0031) 		pwm_outword<<=1;		//控制命令左移一位
    0192 0C22      LSL	R2
    0193 92200061  STS	pwm_outword,R2
(0032) 		
(0033) 	}
    0195 C010      RJMP	0x01A6
(0034) 	else 
(0035) 	{
(0036) 		
(0037) 		pwm_outword=1;
    0196 E081      LDI	R24,1
    0197 93800061  STS	pwm_outword,R24
(0038) 		TCNT1=delay_timel;
    0199 90200064  LDS	R2,delay_timel
    019B 90300065  LDS	R3,delay_timel+1
    019D BC3D      OUT	0x2D,R3
    019E BC2C      OUT	0x2C,R2
(0039) 		PORTA=0x00;			//输出低电平
    019F 2422      CLR	R2
    01A0 BA2B      OUT	0x1B,R2
(0040) 		pwm_number++;			//低电平输出完成,脉冲数++
    01A1 91800060  LDS	R24,pwm_number
    01A3 5F8F      SUBI	R24,0xFF
    01A4 93800060  STS	pwm_number,R24
(0041) 		
(0042) 	}
    01A6 9029      LD	R2,Y+
    01A7 BE2F      OUT	0x3F,R2
    01A8 9199      LD	R25,Y+
    01A9 9189      LD	R24,Y+
    01AA 9039      LD	R3,Y+
    01AB 9029      LD	R2,Y+
    01AC 9518      RETI
(0043) 	
(0044) 	
(0045) 
(0046) }
(0047) //*******************************************************************
(0048) void  time1_init()			//定时器初始化
(0049) {
(0050) 	TCCR1A=0x00;
_time1_init:
    01AD 2422      CLR	R2
    01AE BC2F      OUT	0x2F,R2
(0051) 	TCCR1B=0x00;          //停止定时器1
    01AF BC2E      OUT	0x2E,R2
(0052) 	TIMSK=0x04;           //TIMER1溢出中断使能
    01B0 E084      LDI	R24,4
    01B1 BF89      OUT	0x39,R24
(0053) 	TCNT1H=0x44;			//设置中断初值
    01B2 E484      LDI	R24,0x44
    01B3 BD8D      OUT	0x2D,R24
(0054) 	TCNT1L=0x44;
    01B4 BD8C      OUT	0x2C,R24
(0055) 	SEI();				//使能全局中断
    01B5 9478      BSET	7
(0056) 	TCCR1B=0x02;	//启动T1,8分频
    01B6 E082      LDI	R24,2
    01B7 BD8E      OUT	0x2E,R24
    01B8 9508      RET
(0057) }
(0058) //**********************************************************************
(0059) void  main(void)
(0060) {
(0061) 	unsigned char i_temp;	//临时变量
(0062) 	unsigned int temp;  //临时变量
(0063) //********************************************************************
(0064) 	DDRA=0xff;              //PA口输出
_main:
  temp                 --> Y+1
  i_temp               --> R20
    01B9 EF8F      LDI	R24,0xFF
    01BA BB8A      OUT	0x1A,R24
(0065) 	PORTA=0xff;
    01BB BB8B      OUT	0x1B,R24
(0066) 	mic_startup();			//调用声控
    01BC DF41      RCALL	_mic_startup
(0067) 	for(i_temp=0;i_temp<10;i_temp++)	//灯闪烁10次
    01BD 2744      CLR	R20
    01BE C00B      RJMP	0x01CA
(0068) 	{	
(0069) 		PORTA=0xff;			//灯灭
    01BF EF8F      LDI	R24,0xFF
    01C0 BB8B      OUT	0x1B,R24
(0070) 		delay_ms(500);	//延时0.5S
    01C1 EF04      LDI	R16,0xF4
    01C2 E011      LDI	R17,1
    01C3 DEA7      RCALL	_delay_ms
(0071) 		PORTA=0x00;			//灯亮
    01C4 2422      CLR	R2
    01C5 BA2B      OUT	0x1B,R2
(0072) 		delay_ms(500);	//延时0.5S
    01C6 EF04      LDI	R16,0xF4
    01C7 E011      LDI	R17,1
    01C8 DEA2      RCALL	_delay_ms
    01C9 9543      INC	R20
    01CA 304A      CPI	R20,0xA
    01CB F398      BCS	0x01BF
(0073) 	}
(0074) 	time1_init();
    01CC DFE0      RCALL	_time1_init
    01CD C032      RJMP	0x0200
(0075) 	while(1)
(0076) 	{      
(0077) 	  for (i_temp=0;i_temp<8;i_temp++)	//8个位置依次切换
    01CE 2744      CLR	R20
    01CF C02E      RJMP	0x01FE
(0078) 		 {
(0079) 			delay_timeh=0xffff-loc_angle[i_temp];
    01D0 E082      LDI	R24,2
    01D1 9F84      MUL	R24,R20
    01D2 01F0      MOVW	R30,R0
    01D3 E584      LDI	R24,0x54
    01D4 E090      LDI	R25,0
    01D5 0FE8      ADD	R30,R24
    01D6 1FF9      ADC	R31,R25
    01D7 9005      LPM	R0,Z+
    01D8 9014      LPM	R1,0(Z)
    01D9 01F0      MOVW	R30,R0
    01DA EF8F      LDI	R24,0xFF
    01DB EF9F      LDI	R25,0xFF
    01DC 1B8E      SUB	R24,R30
    01DD 0B9F      SBC	R25,R31
    01DE 93900063  STS	delay_timeh+1,R25
    01E0 93800062  STS	delay_timeh,R24
(0080) 			delay_timel=delay_time+loc_angle[i_temp]*8;			
    01E2 E082      LDI	R24,2
    01E3 9F84      MUL	R24,R20
    01E4 01F0      MOVW	R30,R0
    01E5 E584      LDI	R24,0x54
    01E6 E090      LDI	R25,0
    01E7 0FE8      ADD	R30,R24
    01E8 1FF9      ADC	R31,R25
    01E9 9125      LPM	R18,Z+
    01EA 9134      LPM	R19,0(Z)
    01EB E008      LDI	R16,0x8
    01EC E010      LDI	R17,0
    01ED 940E0202  CALL	empy16s
    01EF 01C8      MOVW	R24,R16
    01F0 5280      SUBI	R24,0x20
    01F1 449E      SBCI	R25,0x4E
    01F2 93900065  STS	delay_timel+1,R25
    01F4 93800064  STS	delay_timel,R24
(0081) 			while(pwm_number<8);
    01F6 91800060  LDS	R24,pwm_number
    01F8 3088      CPI	R24,0x8
    01F9 F3E0      BCS	0x01F6
(0082) 			pwm_number=0;
FILE: <library>
    01FA 2422      CLR	R2
    01FB 92200060  STS	pwm_number,R2
    01FD 9543      INC	R20
    01FE 3048      CPI	R20,0x8
    01FF F280      BCS	0x01D0
    0200 CFCD      RJMP	0x01CE
    0201 9508      RET
empy16s:
    0202 920A      ST	R0,-Y
    0203 921A      ST	R1,-Y
    0204 938A      ST	R24,-Y
    0205 939A      ST	R25,-Y
    0206 9F02      MUL	R16,R18
    0207 01C0      MOVW	R24,R0
    0208 9F12      MUL	R17,R18
    0209 0D90      ADD	R25,R0
    020A 9F03      MUL	R16,R19
    020B 0D90      ADD	R25,R0
    020C 018C      MOVW	R16,R24
    020D 9199      LD	R25,Y+
    020E 9189      LD	R24,Y+
    020F 9019      LD	R1,Y+
    0210 9009      LD	R0,Y+
    0211 9508      RET
pop_gset2:
    0212 E0E2      LDI	R30,2
    0213 940C0221  JMP	pop
push_gset5:
    0215 92FA      ST	R15,-Y
    0216 92EA      ST	R14,-Y
push_gset4:
    0217 92DA      ST	R13,-Y
    0218 92CA      ST	R12,-Y
push_gset3:
    0219 92BA      ST	R11,-Y
    021A 92AA      ST	R10,-Y
push_gset2:
    021B 937A      ST	R23,-Y
    021C 936A      ST	R22,-Y
push_gset1:
    021D 935A      ST	R21,-Y
    021E 934A      ST	R20,-Y
    021F 9508      RET
pop_gset1:
    0220 E0E1      LDI	R30,1
pop:
    0221 9149      LD	R20,Y+
    0222 9159      LD	R21,Y+
    0223 FDE0      SBRC	R30,0
    0224 9508      RET
    0225 9169      LD	R22,Y+
    0226 9179      LD	R23,Y+
    0227 FDE1      SBRC	R30,1
    0228 9508      RET
    0229 90A9      LD	R10,Y+
    022A 90B9      LD	R11,Y+
    022B FDE2      SBRC	R30,2
    022C 9508      RET
    022D 90C9      LD	R12,Y+
    022E 90D9      LD	R13,Y+
    022F FDE3      SBRC	R30,3
    0230 9508      RET
    0231 90E9      LD	R14,Y+
    0232 90F9      LD	R15,Y+
    0233 9508      RET

⌨️ 快捷键说明

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