📄 uart.lst
字号:
(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 + -