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

📄 car.lst

📁 飞思卡尔系列单片机智能汽车程序源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
      2E E5CF      LDI	R28,0x5F
      2F E0D8      LDI	R29,0x8
      30 BFCD      OUT	0x3D,R28
      31 BFDE      OUT	0x3E,R29
      32 51CE      SUBI	R28,0x1E
      33 40D0      SBCI	R29,0
      34 EA0A      LDI	R16,0xAA
      35 8308      STD	Y+0,R16
      36 2400      CLR	R0
      37 E6E8      LDI	R30,0x68
      38 E0F0      LDI	R31,0
      39 E010      LDI	R17,0
      3A 36EA      CPI	R30,0x6A
      3B 07F1      CPC	R31,R17
      3C F011      BEQ	0x003F
      3D 9201      ST	R0,Z+
      3E CFFB      RJMP	0x003A
      3F 8300      STD	Z+0,R16
      40 E5E4      LDI	R30,0x54
      41 E0F0      LDI	R31,0
      42 E6A0      LDI	R26,0x60
      43 E0B0      LDI	R27,0
      44 E010      LDI	R17,0
      45 E000      LDI	R16,0
      46 BF0B      OUT	0x3B,R16
      47 35EC      CPI	R30,0x5C
      48 07F1      CPC	R31,R17
      49 F021      BEQ	0x004E
      4A 95C8      LPM
      4B 9631      ADIW	R30,1
      4C 920D      ST	R0,X+
      4D CFF9      RJMP	0x0047
      4E 940E 0228 CALL	_main
_exit:
      50 CFFF      RJMP	_exit
FILE: F:\car\linecheck.h
(0001) /*******************************
(0002) *程序名称:智能小车设计
(0003) *作    者:吴聪
(0004) *日    期:2008-5-20
(0005) ********************************/
(0006) #include <iom32v.h>
(0007) 
(0008) unsigned int T=1000;
(0009) unsigned int i=0;
(0010) unsigned int k=1;
(0011) unsigned int flag=1;
(0012) unsigned int temp;
(0013) void port_init(void)
(0014) {
(0015)  PORTA = 0XFF;
_port_init:
      51 EF8F      LDI	R24,0xFF
      52 BB8B      OUT	0x1B,R24
(0016)  DDRA  = 0x00;//PA 为输入口
      53 2422      CLR	R2
      54 BA2A      OUT	0x1A,R2
(0017)  PORTB = 0x00;
      55 BA28      OUT	0x18,R2
(0018)  DDRB  = 0xff;//PB 为输出口 
      56 BB87      OUT	0x17,R24
(0019)  PORTC = 0X00;
      57 BA25      OUT	0x15,R2
(0020)  DDRC  = 0xFF;//PC 为输出口
      58 BB84      OUT	0x14,R24
(0021)  DDRD=0XF7;
      59 EF87      LDI	R24,0xF7
      5A BB81      OUT	0x11,R24
(0022)  PORTD=0X08;
      5B E088      LDI	R24,0x8
      5C BB82      OUT	0x12,R24
      5D 9508      RET
(0023) }
(0024) /*中断初始化*/
(0025) void INT1_init()
(0026) {
(0027)  SREG=0x80;                      /*使能全局中断*/
_INT1_init:
      5E E880      LDI	R24,0x80
      5F BF8F      OUT	0x3F,R24
(0028)  //MCUCR&=~((1<<ISC01)|(1<<ISC00));  /*低电平触发中断*/
(0029)  MCUCR=0x0C;
      60 E08C      LDI	R24,0xC
      61 BF85      OUT	0x35,R24
(0030)  GICR=(1<<INT1);                 /*使能外部中断1请求*/
      62 E880      LDI	R24,0x80
      63 BF8B      OUT	0x3B,R24
      64 9508      RET
(0031)  }
(0032) //TIMER0 initialize - prescale:64
(0033) // WGM: Normal
(0034) // desired value: Hz
(0035) // actual value: Out of range
(0036) void timer0_init(void)
(0037) {
(0038)  TCCR0 = 0x00; //stop
_timer0_init:
      65 2422      CLR	R2
      66 BE23      OUT	0x33,R2
(0039)  TCNT0 = 0x00 /*INVALID SETTING*/; //set count
      67 BE22      OUT	0x32,R2
(0040)  OCR0  = 0x00 /*INVALID SETTING*/;  //set compare
      68 BE2C      OUT	0x3C,R2
(0041)  TCCR0 = 0x02; //start timer
      69 E082      LDI	R24,2
      6A BF83      OUT	0x33,R24
      6B 9508      RET
(0042) }
(0043) //TIMER1 initialize - prescale:1
(0044) // WGM: 0) Normal, TOP=0xFFFF
(0045) // desired value: 25Hz
(0046) // actual value: 25.000Hz (0.0%)
(0047) void timer1_init(void)
(0048) {
(0049)  TCCR1B = 0x00; //stop
_timer1_init:
      6C 2422      CLR	R2
      6D BC2E      OUT	0x2E,R2
(0050)  TCNT1H = 0x63; //setup
      6E E683      LDI	R24,0x63
      6F BD8D      OUT	0x2D,R24
(0051)  TCNT1L = 0xC0;
      70 EC80      LDI	R24,0xC0
      71 BD8C      OUT	0x2C,R24
(0052)  OCR1AH = 0x9C;
      72 E98C      LDI	R24,0x9C
      73 BD8B      OUT	0x2B,R24
(0053)  OCR1AL = 0x40;
      74 E480      LDI	R24,0x40
      75 BD8A      OUT	0x2A,R24
(0054)  OCR1BH = 0x9C;
      76 E98C      LDI	R24,0x9C
      77 BD89      OUT	0x29,R24
(0055)  OCR1BL = 0x40;
      78 E480      LDI	R24,0x40
      79 BD88      OUT	0x28,R24
(0056)  ICR1H  = 0x9C;
      7A E98C      LDI	R24,0x9C
      7B BD87      OUT	0x27,R24
(0057)  ICR1L  = 0x40;
      7C E480      LDI	R24,0x40
      7D BD86      OUT	0x26,R24
(0058)  TCCR1A = 0x00;
      7E BC2F      OUT	0x2F,R2
(0059)  TCCR1B = 0x01; //start Timer
      7F E081      LDI	R24,1
      80 BD8E      OUT	0x2E,R24
      81 9508      RET
(0060) }
(0061) ##pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF
(0062) void timer1_ovf_isr(void)
(0063) {
(0064)  //TIMER1 has overflowed
(0065)  TCNT1H = 0x63; //reload counter high value
_timer1_ovf_isr:
      82 E683      LDI	R24,0x63
      83 BD8D      OUT	0x2D,R24
(0066)  TCNT1L = 0xC0; //reload counter low value
      84 EC80      LDI	R24,0xC0
      85 BD8C      OUT	0x2C,R24
(0067)  GICR=(1<<INT1);  
      86 E880      LDI	R24,0x80
      87 BF8B      OUT	0x3B,R24
      88 9508      RET
(0068) }
(0069) 
(0070) //call this routine to initialize all peripherals
(0071) void init_devices(void)
(0072) {
(0073)  //stop errant interrupts until set up
(0074)  timer1_init();
_init_devices:
      89 DFE2      RCALL	_timer1_init
(0075)  TIMSK = 0x04; //timer interrupt sources
      8A E084      LDI	R24,4
      8B BF89      OUT	0x39,R24
      8C 9508      RET
_delay:
  i                    --> R20
  hh                   --> R16
      8D 934A      ST	R20,-Y
      8E 935A      ST	R21,-Y
(0076)  
(0077)  //all peripherals are now initialized
(0078) }
(0079) //============================================================================================
(0080) //函数: void delay(int hh)
(0081) //语法:void delay(int hh)
(0082) //描述:延时子程序
(0083) //参数:
(0084) //返回:无
(0085) //============================================================================================	
(0086) void delay(unsigned int hh )
(0087) {
(0088)     int i;
(0089)     for(i=0;i<hh;i++)
      8F 2744      CLR	R20
      90 2755      CLR	R21
      91 C002      RJMP	0x0094
      92 5F4F      SUBI	R20,0xFF
      93 4F5F      SBCI	R21,0xFF
      94 1740      CP	R20,R16
      95 0751      CPC	R21,R17
      96 F3D8      BCS	0x0092
      97 9159      LD	R21,Y+
      98 9149      LD	R20,Y+
      99 9508      RET
_int1:
      9A 920A      ST	R0,-Y
      9B 921A      ST	R1,-Y
      9C 922A      ST	R2,-Y
      9D 923A      ST	R3,-Y
      9E 924A      ST	R4,-Y
      9F 925A      ST	R5,-Y
      A0 926A      ST	R6,-Y
      A1 927A      ST	R7,-Y
      A2 928A      ST	R8,-Y
      A3 929A      ST	R9,-Y
      A4 930A      ST	R16,-Y
      A5 931A      ST	R17,-Y
      A6 932A      ST	R18,-Y
      A7 933A      ST	R19,-Y
      A8 938A      ST	R24,-Y
      A9 939A      ST	R25,-Y
      AA 93AA      ST	R26,-Y
      AB 93BA      ST	R27,-Y
      AC 93EA      ST	R30,-Y
      AD 93FA      ST	R31,-Y
      AE B60F      IN	R0,0x3F
      AF 920A      ST	R0,-Y
(0090) 	{
(0091) 	;
(0092) 	}
(0093) }
(0094) 
(0095) //============================================================================================
(0096) //函数: void pwma(int hh)
(0097) //语法:void pwma(int hh)
(0098) //描述: 用于控制右轮
(0099) //参数:占空比
(0100) //返回:无
(0101) //============================================================================================
(0102) /*void pwma( unsigned int hh)             
(0103) { 
(0104)   unsigned int s=0;
(0105)    unsigned  int T0=10000;
(0106)    unsigned  int H;
(0107)       s=PORTA;
(0108) 	switch(hh)                //占空比    
(0109) 	{
(0110) 		case 0:  s=s&0xfc; delay(T0);break;     //关占空比
(0111) 		case 1:  delay(1000);s=s&0xfc; delay(9000);break;
(0112) 		case 2:  delay(2000);s=s&0xfc; delay(8000);break;
(0113) 		case 3:  delay(3000);s=s&0xfc; delay(7000);break;
(0114) 		case 4:  delay(4000);s=s&0xfC; delay(6000);break;
(0115) 		case 5:  delay(5000);s=s&0xfc; delay(5000);break;
(0116) 		case 6:  delay(6000);s=s&0xfc; delay(4000);break;
(0117) 		case 7:  delay(7000);s=s&0xfc; delay(3000);break;
(0118) 		case 8:  delay(8000);s=s&0xfc; delay(2000);break;
(0119) 		case 9:  delay(9000);s=s&0xfc; delay(1000);break;
(0120) 		case 10: delay(10000);s=s&0xfc;break;
(0121) 	}
(0122) }
(0123) //============================================================================================
(0124) //函数: void pwmb(int hh)
(0125) //语法:void pwmb(int hh)
(0126) //描述: 用于控制左轮
(0127) //参数:占空比
(0128) //返回:无
(0129) //============================================================================================		
(0130) void pwmb( unsigned int hh)                                     //设定TA_TIMEOUT/16=(time_cl)/0x1e00)/16=100Hz           
(0131) { 
(0132)   unsigned int k=0;
(0133)    int T=10000;
(0134)    int H;
(0135)    k=PORTA;
(0136) 	switch(hh)                //占空比    
(0137) 	{
(0138) 		case 0:  k=k&0xf3;            break;     //关占空比
(0139) 		case 1:  delay(1000);k=k&0xf3; delay(9000);break;
(0140) 		case 2:  delay(2000);k=k&0xf3; delay(8000);break;
(0141) 		case 3:  delay(3000);k=k&0xf3; delay(7000);break;
(0142) 		case 4:  delay(4000);k=k&0xf3; delay(6000);break;
(0143) 		case 5:  delay(5000);k=k&0xf3; delay(5000);break;
(0144) 		case 6:  delay(6000);k=k&0xf3; delay(4000);break;
(0145) 		case 7:  delay(7000);k=k&0xf3; delay(3000);break;
(0146) 		case 8:  delay(8000);k=k&0xf3; delay(2000);break;
(0147) 		case 9:  delay(9000);k=k&0xf3; delay(1000);break;
(0148) 		case 10: delay(10000);k=k&0xf3;break;
(0149) 	}
(0150) }*/
(0151) /*中断服务程序*/ 
(0152) #pragma interrupt_handler int1:4 
(0153) void int1()
(0154) {
(0155)  
(0156)   /*unsigned char i;
(0157)   for(i=0;i<8;i--) //去
(0158)  {
(0159)    //PORTB=~(1<<i);
(0160)    PORTB=0x00;
(0161)    delay_ms(5);
(0162)   }*/
(0163)    if(flag)
      B0 9020 0066 LDS	R2,flag
      B2 9030 0067 LDS	R3,flag+1
      B4 2022      TST	R2
      B5 F411      BNE	0x00B8
      B6 2033      TST	R3
      B7 F079      BEQ	0x00C7
(0164)    {
(0165)    timer0_init();
      B8 DFAC      RCALL	_timer0_init
(0166)    temp=TCNT0;
      B9 B622      IN	R2,0x32
      BA 2433      CLR	R3
      BB 9230 0069 STS	temp+1,R3
      BD 9220 0068 STS	temp,R2
(0167)    //delay(10000);
(0168)    MCUCR=0x08;
      BF E088      LDI	R24,0x8
      C0 BF85      OUT	0x35,R24
(0169)    flag=0;
      C1 2422      CLR	R2
      C2 9230 0067 STS	flag+1,R3
      C4 9220 0066 STS	flag,R2
(0170)    //delay_ms(80);
(0171)    }
      C6 C018      RJMP	0x00DF
(0172)    else
(0173)    {
(0174)    TCCR0 = 0x00;
      C7 2422      CLR	R2
      C8 BE23      OUT	0x33,R2
(0175)    temp=TCNT0-temp;
      C9 9020 0068 LDS	R2,temp
      CB 9030 0069 LDS	R3,temp+1
      CD B642      IN	R4,0x32
      CE 2455      CLR	R5
      CF 1842      SUB	R4,R2
      D0 0853      SBC	R5,R3
      D1 9250 0069 STS	temp+1,R5
      D3 9240 0068 STS	temp,R4
(0176)    MCUCR=0x0c;
      D5 E08C      LDI	R24,0xC
      D6 BF85      OUT	0x35,R24
(0177)    flag=1;
      D7 E081      LDI	R24,1
      D8 E090      LDI	R25,0
      D9 9390 0067 STS	flag+1,R25
      DB 9380 0066 STS	flag,R24
(0178)   // delay_ms(80);
(0179)   // INT1_init();
(0180)    // SREG=0x00; 
(0181)     GICR=0x00;      
      DD 2422      CLR	R2
      DE BE2B      OUT	0x3B,R2
(0182)    }  
      DF 9009      LD	R0,Y+
      E0 BE0F      OUT	0x3F,R0
      E1 91F9      LD	R31,Y+
      E2 91E9      LD	R30,Y+
      E3 91B9      LD	R27,Y+
      E4 91A9      LD	R26,Y+
      E5 9199      LD	R25,Y+
      E6 9189      LD	R24,Y+
      E7 9139      LD	R19,Y+
      E8 9129      LD	R18,Y+
      E9 9119      LD	R17,Y+
      EA 9109      LD	R16,Y+
      EB 9099      LD	R9,Y+
      EC 9089      LD	R8,Y+
      ED 9079      LD	R7,Y+
      EE 9069      LD	R6,Y+
      EF 9059      LD	R5,Y+
      F0 9049      LD	R4,Y+
      F1 9039      LD	R3,Y+
      F2 9029      LD	R2,Y+
      F3 9019      LD	R1,Y+
      F4 9009      LD	R0,Y+
      F5 9518      RETI
(0183) } 
(0184) //============================================================================================
(0185) //描述:车子方向控制子程序
(0186) //参数  无
(0187) //返回:无
(0188) //============================================================================================ 
(0189) void STOP()   //停止
(0190) {
(0191) 	 PORTB=0X00;
_STOP:
      F6 2422      CLR	R2
      F7 BA28      OUT	0x18,R2
(0192) 	 delay(10000); 
      F8 E100      LDI	R16,0x10
      F9 E217      LDI	R17,0x27
      FA DF92      RCALL	_delay
      FB 9508      RET
_GO:
  aa                   --> R10
      FC 92AA      ST	R10,-Y
      FD 92BA      ST	R11,-Y
      FE 0158      MOVW	R10,R16
(0193) }
(0194) 
(0195) 
(0196) void GO(unsigned int aa)   //直线前进
(0197) {
(0198) 
(0199)      PORTB=0X06|0X30;
      FF E386      LDI	R24,0x36
     100 BB88      OUT	0x18,R24
(0200) 	 delay(aa);
     101 0185      MOVW	R16,R10
     102 DF8A      RCALL	_delay
     103 90B9      LD	R11,Y+
     104 90A9      LD	R10,Y+
     105 9508      RET
_BACK:
  bb                   --> R10
     106 92AA      ST	R10,-Y
     107 92BA      ST	R11,-Y

⌨️ 快捷键说明

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