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

📄 uart.lst

📁 这是关于AVR单片机学习的初步开发
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0344) if(PIND&0X10)
    015C 9B84      SBIS	0x10,4
    015D C006      RJMP	0x0164
(0345)   tdata[1]|=0X04;
    015E 91800065  LDS	R24,_tdata+1
    0160 6084      ORI	R24,4
    0161 93800065  STS	_tdata+1,R24
    0163 C005      RJMP	0x0169
(0346) else
(0347)   tdata[1]&=~0x04;
    0164 91800065  LDS	R24,_tdata+1
    0166 7F8B      ANDI	R24,0xFB
    0167 93800065  STS	_tdata+1,R24
(0348)   
(0349) if(PIND&0X20)
    0169 9B85      SBIS	0x10,5
    016A C006      RJMP	0x0171
(0350)   tdata[1]|=0X08;
    016B 91800065  LDS	R24,_tdata+1
    016D 6088      ORI	R24,0x8
    016E 93800065  STS	_tdata+1,R24
    0170 C005      RJMP	0x0176
(0351) else
(0352)   tdata[1]&=~0x08;
    0171 91800065  LDS	R24,_tdata+1
    0173 7F87      ANDI	R24,0xF7
    0174 93800065  STS	_tdata+1,R24
(0353) 
(0354) if(PINA&0X80)
    0176 9BCF      SBIS	0x19,7
    0177 C006      RJMP	0x017E
(0355)   tdata[1]|=0X40;
    0178 91800065  LDS	R24,_tdata+1
    017A 6480      ORI	R24,0x40
    017B 93800065  STS	_tdata+1,R24
    017D C005      RJMP	0x0183
(0356) else
(0357)   tdata[1]&=~0x40;
    017E 91800065  LDS	R24,_tdata+1
    0180 7B8F      ANDI	R24,0xBF
    0181 93800065  STS	_tdata+1,R24
(0358)   
(0359) if(PIND&0X01)
    0183 9B80      SBIS	0x10,0
    0184 C006      RJMP	0x018B
(0360)   tdata[1]|=0X80;
    0185 91800065  LDS	R24,_tdata+1
    0187 6880      ORI	R24,0x80
    0188 93800065  STS	_tdata+1,R24
    018A C005      RJMP	0x0190
(0361) else
(0362)   tdata[1]&=~0x80; 
    018B 91800065  LDS	R24,_tdata+1
    018D 778F      ANDI	R24,0x7F
    018E 93800065  STS	_tdata+1,R24
(0363)  
(0364) /* 
(0365) 	 a.OTHER&0x01=(PIND&0x04);//焦距调远
(0366) 	 a.OTHER&0x02=(PIND&0x08);//焦距调近
(0367) 	 a.OTHER&0x04=(PINB&0x02);//摄像头(0:手臂CCD;1:机身CCD)
(0368) 	 a.OTHER&0x08=(PINB&0x08);//照明(1:灭;0:亮)
(0369) 	 //a.OTHER&0x   =
(0370) 	 //a.OTHER&0x   =
(0371) 	 //a.OTHER&0x   =
(0372) 	 a.OTHER&0x80=(PINB&0x04);//武器点火
(0373) */ 
(0374) 
(0375) if(PIND&0X04)//开关开
    0190 9B82      SBIS	0x10,2
    0191 C006      RJMP	0x0198
(0376)   tdata[2]|=0X01;
    0192 91800066  LDS	R24,_tdata+2
    0194 6081      ORI	R24,1
    0195 93800066  STS	_tdata+2,R24
    0197 C005      RJMP	0x019D
(0377) else         //开关合
(0378)   tdata[2]&=~0x01;
    0198 91800066  LDS	R24,_tdata+2
    019A 7F8E      ANDI	R24,0xFE
    019B 93800066  STS	_tdata+2,R24
(0379)   
(0380) if(PIND&0X08)
    019D 9B83      SBIS	0x10,3
    019E C006      RJMP	0x01A5
(0381)   tdata[2]|=0X02;
    019F 91800066  LDS	R24,_tdata+2
    01A1 6082      ORI	R24,2
    01A2 93800066  STS	_tdata+2,R24
    01A4 C005      RJMP	0x01AA
(0382) else
(0383)   tdata[2]&=~0x02;
    01A5 91800066  LDS	R24,_tdata+2
    01A7 7F8D      ANDI	R24,0xFD
    01A8 93800066  STS	_tdata+2,R24
(0384) 
(0385) if(PINB&0X02)
    01AA 9BB1      SBIS	0x16,1
    01AB C006      RJMP	0x01B2
(0386)   tdata[2]|=0X04;
    01AC 91800066  LDS	R24,_tdata+2
    01AE 6084      ORI	R24,4
    01AF 93800066  STS	_tdata+2,R24
    01B1 C005      RJMP	0x01B7
(0387) else
(0388)   tdata[2]&=~0x04;
    01B2 91800066  LDS	R24,_tdata+2
    01B4 7F8B      ANDI	R24,0xFB
    01B5 93800066  STS	_tdata+2,R24
(0389) 
(0390) if(PINB&0X08)
    01B7 9BB3      SBIS	0x16,3
    01B8 C006      RJMP	0x01BF
(0391)   tdata[2]|=0X08;
    01B9 91800066  LDS	R24,_tdata+2
    01BB 6088      ORI	R24,0x8
    01BC 93800066  STS	_tdata+2,R24
    01BE C005      RJMP	0x01C4
(0392) else
(0393)   tdata[2]&=~0x08;
    01BF 91800066  LDS	R24,_tdata+2
    01C1 7F87      ANDI	R24,0xF7
    01C2 93800066  STS	_tdata+2,R24
(0394) 
(0395) if(PINB&0X04)
    01C4 9BB2      SBIS	0x16,2
    01C5 C006      RJMP	0x01CC
(0396)   tdata[2]|=0X80;
    01C6 91800066  LDS	R24,_tdata+2
    01C8 6880      ORI	R24,0x80
    01C9 93800066  STS	_tdata+2,R24
    01CB C005      RJMP	0x01D1
(0397) else
(0398)   tdata[2]&=~0x80;
    01CC 91800066  LDS	R24,_tdata+2
    01CE 778F      ANDI	R24,0x7F
    01CF 93800066  STS	_tdata+2,R24
(0399)   
(0400)  
(0401) //模拟量数据采集
(0402) 
(0403)     /* tdata[3]=(PINA&0x01);  //车前后
(0404)      tdata[4]=(PINA&0x02);    //车左右
(0405)      tdata[5]=(PINA&0x08);    //云台左右
(0406)      tdata[6]=(PINA&0x04);    //云台俯仰
(0407)      tdata[7]=(PINA&0x10);    //速度   */
(0408) 	 
(0409)  //对第一通道AD转换求tdata[3]
(0410)    ADMUX=0X00;
    01D1 2422      CLR	R2
    01D2 B827      OUT	0x07,R2
(0411)    ADCSRA=0XDD;
    01D3 ED8D      LDI	R24,0xDD
    01D4 B986      OUT	0x06,R24
(0412)    SREG=0X80;
    01D5 E880      LDI	R24,0x80
    01D6 BF8F      OUT	0x3F,R24
(0413)    ADCSRA|=BIT(ADSC);
    01D7 9A36      SBI	0x06,6
(0414)    
(0415)  //对第二通道AD转换求tdata[4]
(0416)    ADMUX=0X01;
    01D8 E081      LDI	R24,1
    01D9 B987      OUT	0x07,R24
(0417)    ADCSRA=0XDD;
    01DA ED8D      LDI	R24,0xDD
    01DB B986      OUT	0x06,R24
(0418)    SREG=0X80;
    01DC E880      LDI	R24,0x80
    01DD BF8F      OUT	0x3F,R24
(0419)    ADCSRA|=BIT(ADSC);
    01DE 9A36      SBI	0x06,6
(0420)    
(0421)  //对第三通道AD转换求tdata[5]
(0422)    ADMUX=0X02;
    01DF E082      LDI	R24,2
    01E0 B987      OUT	0x07,R24
(0423)    ADCSRA=0XDD;
    01E1 ED8D      LDI	R24,0xDD
    01E2 B986      OUT	0x06,R24
(0424)    SREG=0X80;
    01E3 E880      LDI	R24,0x80
    01E4 BF8F      OUT	0x3F,R24
(0425)    ADCSRA|=BIT(ADSC);
    01E5 9A36      SBI	0x06,6
(0426)  
(0427)  //对第四通道AD转换求tdata[6]
(0428)    ADMUX=0X03;
    01E6 E083      LDI	R24,3
    01E7 B987      OUT	0x07,R24
(0429)    ADCSRA=0XDD;
    01E8 ED8D      LDI	R24,0xDD
    01E9 B986      OUT	0x06,R24
(0430)    SREG=0X80;
    01EA E880      LDI	R24,0x80
    01EB BF8F      OUT	0x3F,R24
(0431)    ADCSRA|=BIT(ADSC);
    01EC 9A36      SBI	0x06,6
(0432)    
(0433)   //对第五个通道AD转换,求tdata[7]
(0434)    ADMUX=0X04;
    01ED E084      LDI	R24,4
    01EE B987      OUT	0x07,R24
(0435)    ADCSRA=0XDD;
    01EF ED8D      LDI	R24,0xDD
    01F0 B986      OUT	0x06,R24
(0436)    SREG=0X80;
    01F1 E880      LDI	R24,0x80
    01F2 BF8F      OUT	0x3F,R24
(0437)    ADCSRA|=BIT(ADSC);
    01F3 9A36      SBI	0x06,6
(0438) 	 
(0439) //for循环用于判断发送一次数据是否正确
(0440)   //for(;;)
(0441)   //{
(0442)     do    //连续向上位机发送一次数据,用do...while循环下位机先发送
(0443) 	{
(0444) 	   USART_Transmit(tdata[pos++]) ;
    01F4 2E26      MOV	R2,R22
    01F5 2433      CLR	R3
    01F6 5F6F      SUBI	R22,0xFF
    01F7 E684      LDI	R24,0x64
    01F8 E090      LDI	R25,0
    01F9 2DE2      MOV	R30,R2
    01FA 27FF      CLR	R31
    01FB 0FE8      ADD	R30,R24
    01FC 1FF9      ADC	R31,R25
    01FD 8100      LDD	R16,Z+0
    01FE DE76      RCALL	_USART_Transmit
(0445) 	   sum+=tdata[pos++];
    01FF 2E26      MOV	R2,R22
    0200 2433      CLR	R3
    0201 5F6F      SUBI	R22,0xFF
    0202 E684      LDI	R24,0x64
    0203 E090      LDI	R25,0
    0204 2DE2      MOV	R30,R2
    0205 27FF      CLR	R31
    0206 0FE8      ADD	R30,R24
    0207 1FF9      ADC	R31,R25
    0208 8020      LDD	R2,Z+0
    0209 0D42      ADD	R20,R2
(0446) 	
(0447) 	}while(pos<BN);
    020A 3068      CPI	R22,0x8
    020B F340      BCS	0x01F4
(0448) 	
(0449) 	USART_Transmit(sum);     //向上位机发送校验和
    020C 2F04      MOV	R16,R20
    020D DE67      RCALL	_USART_Transmit
(0450) 	
(0451) 	//UDR=USART_Receive();     //接受检验结果,上位机判断校验和,正确发送0xff,错误发送0x00,
(0452) 	/*
(0453) 	if(UDR!=0xff)
(0454) 	  continue;              // 校验和错误信号,退出此次循环重新发送这次数据
(0455) 	else       
(0456) 	  break;                  //校验和正确,退出for循环,准备传送下一次数据
(0457) 	  
(0458)   }  */
(0459) 	
(0460) 
(0461) 	 ////**********************************************************************************////
(0462) 	 WDR();//喂看门狗
    020E 95A8      WDR
(0463) 	 
(0464) 	 
(0465) 
(0466) 	 ////*************************************向从机发送一次命令***************************************////
(0467) 	
(0468) 	 //向从机发送的数据
(0469) /*	 cData[0]&0x10= a.ARM&0x10;   //PORTC0;//大臂上
(0470)      cData[0]&0x20= a.ARM&0x20;   //PORTC1;//大臂下
(0471)      cData[0]&0x40= a.ARM&0x40;   //PORTC2;//小臂上
(0472)      cData[0]&0x80= a.ARM&0x80;   //PORTC3;//小臂下
(0473) 	 cData[0]&0x00 =a.ROBOT&0x01; //PORTD6;//前摆上
(0474) 	 cData[0]&0x01 =a.ROBOT&0x02; //PORTD7;//前摆下
(0475) 	 cData[0]&0x02 =a.ROBOT&0x04; //PORTD4;//后摆上
(0476) 	 cData[0]&0x08 =a.ROBOT&0x08; //PORTD5;//后摆下
(0477) 	 cData[1]=a.V;                //PORTA4;//速度
(0478) */ 
(0479) 
(0480) 
(0481) 	 //向从机发送数据
(0482) 	SPI_MasterTransmit(cData[0]); 
    020F 91000061  LDS	R16,_cData
    0211 DE71      RCALL	_SPI_MasterTransmit
(0483) 	SPI_MasterTransmit(cData[1]);  
    0212 91000062  LDS	R16,_cData+1
    0214 DE6E      RCALL	_SPI_MasterTransmit
(0484) 	
(0485) 	 ////**********************************************************************************************////
(0486) 	 PORTB &= ~BIT(PORTB5);// PB5端口清0
    0215 98C5      CBI	0x18,5
(0487) 	 delay1(1000);
    0216 EE08      LDI	R16,0xE8
    0217 E013      LDI	R17,3
    0218 DE12      RCALL	_delay1
    0219 CEB9      RJMP	0x00D3
(0488) 	 
(0489)  }
(0490) 
(0491) 	
(0492) }
FILE: <library>
    021A 9508      RET
pop_gset2:
    021B E0E2      LDI	R30,2
    021C C004      RJMP	pop
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
push_gset2:
    0234 937A      ST	R23,-Y
    0235 936A      ST	R22,-Y
    0236 CFE6      RJMP	push_gset1

⌨️ 快捷键说明

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