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

📄 uart.lst

📁 这是关于AVR单片机学习的初步开发
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0183) void adc_init(void)
(0184) {
(0185)  	 ADCSR = 0x00; //disable adc
_adc_init:
    0087 2422      CLR	R2
    0088 B826      OUT	0x06,R2
(0186)  	 ADMUX = 0x00; //select adc input 0
    0089 B827      OUT	0x07,R2
(0187)  	 ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1);//Aref端口电压为参考电压,ADC使能,开启,64分频
    008A EC8E      LDI	R24,0xCE
    008B B986      OUT	0x06,R24
(0188) 	 
(0189) }
    008C 9508      RET
_adc_isr:
    008D 922A      ST	R2,-Y
    008E 923A      ST	R3,-Y
    008F 938A      ST	R24,-Y
    0090 939A      ST	R25,-Y
    0091 93EA      ST	R30,-Y
    0092 93FA      ST	R31,-Y
    0093 B62F      IN	R2,0x3F
    0094 922A      ST	R2,-Y
(0190) 
(0191) #pragma interrupt_handler adc_isr:15
(0192) void adc_isr(void)
(0193) {
(0194) 
(0195)          //conversion complete, read value (int) using...
(0196)    tdata[j]=ADC>>2;    
    0095 E684      LDI	R24,0x64
    0096 E090      LDI	R25,0
    0097 91E00060  LDS	R30,0x60
    0099 27FF      CLR	R31
    009A 0FE8      ADD	R30,R24
    009B 1FF9      ADC	R31,R25
    009C B024      IN	R2,0x04
    009D B035      IN	R3,0x05
    009E 9436      LSR	R3
    009F 9427      ROR	R2
    00A0 9436      LSR	R3
    00A1 9427      ROR	R2
    00A2 8220      STD	Z+0,R2
(0197)    j++;      //取字节的前八位
    00A3 91800060  LDS	R24,0x60
    00A5 5F8F      SUBI	R24,0xFF
    00A6 93800060  STS	0x60,R24
(0198)    
(0199)  // value=ADCL;   //Read 8 low bits first (important)
(0200)    ADCSRA=(1<<ADSC);//启动下一次转换
    00A8 E480      LDI	R24,0x40
    00A9 B986      OUT	0x06,R24
(0201)    
(0202)  // value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
(0203) }
    00AA 9029      LD	R2,Y+
    00AB BE2F      OUT	0x3F,R2
    00AC 91F9      LD	R31,Y+
    00AD 91E9      LD	R30,Y+
    00AE 9199      LD	R25,Y+
    00AF 9189      LD	R24,Y+
    00B0 9039      LD	R3,Y+
    00B1 9029      LD	R2,Y+
    00B2 9518      RETI
(0204) 
(0205) /////********************************初始化***********************************************
(0206) void init_device()
(0207) {
(0208)     CLI();
_init_device:
    00B3 94F8      BCLR	7
(0209) 	 //stop errant interrupts until set up
(0210) 	  CLI(); //disable all interrupts
    00B4 94F8      BCLR	7
(0211)  	  PORTA = 0xFF;
    00B5 EF8F      LDI	R24,0xFF
    00B6 BB8B      OUT	0x1B,R24
(0212)  	  DDRA  = 0x00;
    00B7 2422      CLR	R2
    00B8 BA2A      OUT	0x1A,R2
(0213) 	  
(0214)  	  PORTB = 0xFF;
    00B9 BB88      OUT	0x18,R24
(0215)  	  DDRB  = 0x10;	//定义PB.5为输出,其余B口为输入
    00BA E180      LDI	R24,0x10
    00BB BB87      OUT	0x17,R24
(0216) 	  
(0217)  	  PORTC = 0xFF;
    00BC EF8F      LDI	R24,0xFF
    00BD BB85      OUT	0x15,R24
(0218)  	  DDRC  = 0x00;
    00BE BA24      OUT	0x14,R2
(0219) 	  
(0220)  	  PORTD = 0xFF;
    00BF BB82      OUT	0x12,R24
(0221)  	  DDRD  = 0x00;
    00C0 BA21      OUT	0x11,R2
(0222) 
(0223) //看门狗设置// prescale: 2048K cycles
(0224) 	asm("WDR"); //启动看门狗定时器,看门狗定时器间隔1.9s
    00C1 95A8      WDR
(0225) 	WDTCR = 0x0f;
    00C2 E08F      LDI	R24,0xF
    00C3 BD81      OUT	0x21,R24
(0226) 	
(0227) //TIMER0 initialisation - prescale:64
(0228) // desired value: 1mSec
(0229) // actual value:  1.000mSec (0.0%)
(0230) 
(0231)    TCCR0 = 0x00; //stop
    00C4 BE23      OUT	0x33,R2
(0232)    TCNT0 = 0x83; //set count
    00C5 E883      LDI	R24,0x83
    00C6 BF82      OUT	0x32,R24
(0233)    //TCCR0 = 0x03; //start timer
(0234)    
(0235)       //uart0_init(12);//波特率是19200?????
(0236) 	  
(0237) 	   USART_Init();
    00C7 DFA6      RCALL	_USART_Init
(0238) 	  SPI_MasterInit();
    00C8 DFB5      RCALL	_SPI_MasterInit
(0239)  	  adc_init();
    00C9 DFBD      RCALL	_adc_init
(0240) 
(0241)  	  MCUCR = 0x00; 
    00CA 2422      CLR	R2
    00CB BE25      OUT	0x35,R2
(0242)  	  GIMSK = 0x00;
    00CC BE2B      OUT	0x3B,R2
(0243)  	  TIMSK = 0x01;
    00CD E081      LDI	R24,1
    00CE BF89      OUT	0x39,R24
(0244)  	  SEI(); //re-enable interrupts
    00CF 9478      BSET	7
(0245)  	  //all peripherals are now initialised
(0246) }
    00D0 9508      RET
(0247) 
(0248) 
(0249) 
(0250) //系统每50s检测一次状态,向上位机发送一次命令;喂看门狗;更新显示《***上位机只负责接收,错误帧丢弃,不重发***》
(0251) void main()
(0252) {
(0253) 	init_device();
_main:
  sum                  --> R20
  pos                  --> R22
    00D1 DFE1      RCALL	_init_device
    00D2 C146      RJMP	0x0219
(0254) 	
(0255) 	while(1)
(0256) 	{
(0257) 	uchar pos=0,sum=0;
    00D3 2766      CLR	R22
    00D4 2744      CLR	R20
(0258) 	
(0259) 	 WDR();
    00D5 95A8      WDR
(0260) 	 
(0261) 	 PORTB |= BIT(PORTB5);//PB5端口置1,
    00D6 9AC5      SBI	0x18,5
(0262) 	 delay1(1000);
    00D7 EE08      LDI	R16,0xE8
    00D8 E013      LDI	R17,3
    00D9 DF51      RCALL	_delay1
(0263) 	 //UCR=0x38;//发送使能
(0264) 	 
(0265) 	 
(0266) 	////************************************每50S向上位机发送一次数据***************************************************************////
(0267) 	
(0268) //通过各个开关的开合方式来确定各字节值
(0269) 
(0270) 
(0271) /*
(0272) 	 a.ARM&0x01= (PINC&0x10);//ARM1:腕顺
(0273)      a.ARM&0x02= (PINC&0x20);//ARM2:腕逆
(0274)      a.ARM&0x04= (PINC&0x40);//ARM3:手开
(0275)      a.ARM&0x08= (PINC&0x80);//ARM4:手合
(0276)      a.ARM&0x10= (PINC&0x01);//ARM5:大臂上
(0277)      a.ARM&0x20= (PINC&0x02);//ARM6:大臂下
(0278)      a.ARM&0x40= (PINC&0x04);//ARM7:小臂上
(0279)      a.ARM&0x80= (PINC&0x08);//ARM8:小臂下
(0280) */
(0281) //数字量辅值
(0282) 
(0283) if(PINC&0X10)//开关开状态
    00DA 9B9C      SBIS	0x13,4
    00DB C006      RJMP	0x00E2
(0284)   tdata[0]|=0X01;
    00DC 91800064  LDS	R24,_tdata
    00DE 6081      ORI	R24,1
    00DF 93800064  STS	_tdata,R24
    00E1 C005      RJMP	0x00E7
(0285) else         //开关合状态
(0286)   tdata[0]&=~0x01;
    00E2 91800064  LDS	R24,_tdata
    00E4 7F8E      ANDI	R24,0xFE
    00E5 93800064  STS	_tdata,R24
(0287)  
(0288) if(PINC&0X20)
    00E7 9B9D      SBIS	0x13,5
    00E8 C006      RJMP	0x00EF
(0289)   tdata[0]|=0X02;
    00E9 91800064  LDS	R24,_tdata
    00EB 6082      ORI	R24,2
    00EC 93800064  STS	_tdata,R24
    00EE C005      RJMP	0x00F4
(0290) else
(0291)   tdata[0]&=~0x02;
    00EF 91800064  LDS	R24,_tdata
    00F1 7F8D      ANDI	R24,0xFD
    00F2 93800064  STS	_tdata,R24
(0292)   
(0293) if(PINC&0X40)
    00F4 9B9E      SBIS	0x13,6
    00F5 C006      RJMP	0x00FC
(0294)   tdata[0]|=0X04;
    00F6 91800064  LDS	R24,_tdata
    00F8 6084      ORI	R24,4
    00F9 93800064  STS	_tdata,R24
    00FB C005      RJMP	0x0101
(0295) else
(0296)   tdata[0]&=~0x04;
    00FC 91800064  LDS	R24,_tdata
    00FE 7F8B      ANDI	R24,0xFB
    00FF 93800064  STS	_tdata,R24
(0297)   
(0298) if(PINC&0X80)
    0101 9B9F      SBIS	0x13,7
    0102 C006      RJMP	0x0109
(0299)   tdata[0]|=0X08;
    0103 91800064  LDS	R24,_tdata
    0105 6088      ORI	R24,0x8
    0106 93800064  STS	_tdata,R24
    0108 C005      RJMP	0x010E
(0300) else
(0301)   tdata[0]&=~0x08;
    0109 91800064  LDS	R24,_tdata
    010B 7F87      ANDI	R24,0xF7
    010C 93800064  STS	_tdata,R24
(0302)   
(0303) if(PINC&0X01)
    010E 9B98      SBIS	0x13,0
    010F C006      RJMP	0x0116
(0304)   tdata[0]|=0X10;
    0110 91800064  LDS	R24,_tdata
    0112 6180      ORI	R24,0x10
    0113 93800064  STS	_tdata,R24
    0115 C005      RJMP	0x011B
(0305) else
(0306)   tdata[0]&=~0x10;
    0116 91800064  LDS	R24,_tdata
    0118 7E8F      ANDI	R24,0xEF
    0119 93800064  STS	_tdata,R24
(0307)   
(0308) if(PINC&0X02)
    011B 9B99      SBIS	0x13,1
    011C C006      RJMP	0x0123
(0309)   tdata[0]|=0X20;
    011D 91800064  LDS	R24,_tdata
    011F 6280      ORI	R24,0x20
    0120 93800064  STS	_tdata,R24
    0122 C005      RJMP	0x0128
(0310) else
(0311)   tdata[0]&=~0x20;
    0123 91800064  LDS	R24,_tdata
    0125 7D8F      ANDI	R24,0xDF
    0126 93800064  STS	_tdata,R24
(0312)   
(0313) if(PINC&0X04)
    0128 9B9A      SBIS	0x13,2
    0129 C006      RJMP	0x0130
(0314)   tdata[0]|=0X40;
    012A 91800064  LDS	R24,_tdata
    012C 6480      ORI	R24,0x40
    012D 93800064  STS	_tdata,R24
    012F C005      RJMP	0x0135
(0315) else
(0316)   tdata[0]&=~0x40;
    0130 91800064  LDS	R24,_tdata
    0132 7B8F      ANDI	R24,0xBF
    0133 93800064  STS	_tdata,R24
(0317) 
(0318) if(PINC&0X08)
    0135 9B9B      SBIS	0x13,3
    0136 C006      RJMP	0x013D
(0319)   tdata[0]|=0X80;
    0137 91800064  LDS	R24,_tdata
    0139 6880      ORI	R24,0x80
    013A 93800064  STS	_tdata,R24
    013C C005      RJMP	0x0142
(0320) else
(0321)   tdata[0]&=~0x80;
    013D 91800064  LDS	R24,_tdata
    013F 778F      ANDI	R24,0x7F
    0140 93800064  STS	_tdata,R24
(0322)   
(0323)   
(0324) /*
(0325) 	 a.ROBOT&0x01 =(PIND&0x40);//ROBOT1:前摆上6
(0326) 	 a.ROBOT&0x02 =(PIND&0x80);//ROBOT2:前摆下7
(0327) 	 a.ROBOT&0x04 =(PIND&0x10);//ROBOT3:后摆上4
(0328) 	 a.ROBOT&0x08 =(PIND&0x20);//ROBOT4:后摆下5
(0329) 	 //a.ROBOT&0x10 =
(0330) 	 //a.ROBOT&0x20 =
(0331) 	 a.ROBOT&0x40 =(PINA&0x80);//ROBOT7:正常方式(1:正常;0:轮方式)7
(0332) 	 a.ROBOT&0x80 =(PINB&0x01);//ROBOT8:车行走使能0    */
(0333) 
(0334) if(PIND&0X40)//开关开状态
    0142 9B86      SBIS	0x10,6
    0143 C006      RJMP	0x014A
(0335)   tdata[1]|=0X01;
    0144 91800065  LDS	R24,_tdata+1
    0146 6081      ORI	R24,1
    0147 93800065  STS	_tdata+1,R24
    0149 C005      RJMP	0x014F
(0336) else         //开关合状态
(0337)   tdata[1]&=~0x01;
    014A 91800065  LDS	R24,_tdata+1
    014C 7F8E      ANDI	R24,0xFE
    014D 93800065  STS	_tdata+1,R24
(0338) 	 
(0339) if(PIND&0X80)
    014F 9B87      SBIS	0x10,7
    0150 C006      RJMP	0x0157
(0340)   tdata[1]|=0X02;
    0151 91800065  LDS	R24,_tdata+1
    0153 6082      ORI	R24,2
    0154 93800065  STS	_tdata+1,R24
    0156 C005      RJMP	0x015C
(0341) else
(0342)   tdata[1]&=~0x02;
    0157 91800065  LDS	R24,_tdata+1
    0159 7F8D      ANDI	R24,0xFD
    015A 93800065  STS	_tdata+1,R24
(0343) 

⌨️ 快捷键说明

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