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

📄 motor.lst

📁 直流电动机驱动器设计开发环境为ICC,可以编译成汇编,直接下栽到嵌入式avr单片机进行控制
💻 LST
📖 第 1 页 / 共 4 页
字号:
(0084)    Data[5]=temp1;
    0190 9340007C  STS	0x7C,R20
(0085)    Data[6]=y>>8;
    0192 2C2C      MOV	R2,R12
    0193 2C3D      MOV	R3,R13
    0194 2C23      MOV	R2,R3
    0195 2433      CLR	R3
    0196 FC27      SBRC	R2,7
    0197 9430      COM	R3
    0198 9220007D  STS	0x7D,R2
(0086)    Data[7]=y;
    019A 92C0007E  STS	0x7E,R12
(0087)    Putdata(Data);} 
    019C E707      LDI	R16,0x77
    019D E010      LDI	R17,0
    019E DEA1      RCALL	_Putdata
(0088)   temp1=temp1+z;
    019F 2E24      MOV	R2,R20
    01A0 2433      CLR	R3
    01A1 880C      LDD	R0,Y+20
    01A2 881D      LDD	R1,Y+21
    01A3 0C20      ADD	R2,R0
    01A4 1C31      ADC	R3,R1
    01A5 2D42      MOV	R20,R2
(0089)   if(temp1<=0)                           //结果小于0时输出0
    01A6 2422      CLR	R2
    01A7 1624      CP	R2,R20
    01A8 F008      BCS	0x01AA
(0090)    temp1 = 0x00;
    01A9 2744      CLR	R20
(0091)   if(temp1>=0xF0)                        //结果大于0xF0时输出0xF0 
    01AA 3F40      CPI	R20,0xF0
    01AB F008      BCS	0x01AD
(0092)    temp1 = 0xF0;
    01AC EF40      LDI	R20,0xF0
(0093)   OCR2=temp1;
    01AD BD43      OUT	0x23,R20
(0094)   Ek_2 = Ek_1;
    01AE 90200062  LDS	R2,0x62
    01B0 90300063  LDS	R3,0x63
    01B2 92300065  STS	0x65,R3
    01B4 92200064  STS	0x64,R2
(0095)   Ek_1 = Ek;
    01B6 90200060  LDS	R2,0x60
    01B8 90300061  LDS	R3,0x61
    01BA 92300063  STS	0x63,R3
    01BC 92200062  STS	0x62,R2
(0096)   TCNT1 = 0x0000;                          //计数器清零
    01BE 2422      CLR	R2
    01BF 2433      CLR	R3
    01C0 BC3D      OUT	0x2D,R3
    01C1 BC2C      OUT	0x2C,R2
(0097) }
    01C2 9666      ADIW	R28,0x16
    01C3 D1B1      RCALL	pop_gset5
    01C4 9508      RET
(0098) 
(0099) //***************************串口初始化函数************************//                   
(0100) void USARTInit(int baudrate)    
(0101) {UCR = (1<<TXEN)|(1<<RXCIE)|(1<<RXEN);    //设置收发使能,接受中断允许
_USARTInit:
  baudrate             --> R16
    01C5 E988      LDI	R24,0x98
    01C6 B98A      OUT	0x0A,R24
(0102)   UBRR = baudrate;                        //设置波特率寄存器
    01C7 B909      OUT	0x09,R16
(0103) }
    01C8 9508      RET
_Eepromdata:
    01C9 9722      SBIW	R28,2
(0104) 
(0105) //***************************读EEPROM函数**************************//
(0106) void Eepromdata(void)
(0107) {if((adress==0x0000)||(adress==0x0004)||(adress==0x0008)) //地址判断
    01CA 90200075  LDS	R2,_adress
    01CC 90300076  LDS	R3,_adress+1
    01CE 2022      TST	R2
    01CF F411      BNE	0x01D2
    01D0 2033      TST	R3
    01D1 F061      BEQ	0x01DE
    01D2 91800075  LDS	R24,_adress
    01D4 91900076  LDS	R25,_adress+1
    01D6 3084      CPI	R24,4
    01D7 E0E0      LDI	R30,0
    01D8 079E      CPC	R25,R30
    01D9 F021      BEQ	0x01DE
    01DA 3088      CPI	R24,0x8
    01DB E0E0      LDI	R30,0
    01DC 079E      CPC	R25,R30
    01DD F461      BNE	0x01EA
(0108)  EEPROMReadBytes(adress,&Data[4],4);
    01DE E084      LDI	R24,4
    01DF E090      LDI	R25,0
    01E0 8399      STD	Y+1,R25
    01E1 8388      STD	Y+0,R24
    01E2 E72B      LDI	R18,0x7B
    01E3 E030      LDI	R19,0
    01E4 91000075  LDS	R16,_adress
    01E6 91100076  LDS	R17,_adress+1
    01E8 D212      RCALL	_EEPROMReadBytes
    01E9 C00B      RJMP	0x01F5
(0109)  else
(0110)  EEPROMReadBytes(adress,&Data[6],2);
    01EA E082      LDI	R24,2
    01EB E090      LDI	R25,0
    01EC 8399      STD	Y+1,R25
    01ED 8388      STD	Y+0,R24
    01EE E72D      LDI	R18,0x7D
    01EF E030      LDI	R19,0
    01F0 91000075  LDS	R16,_adress
    01F2 91100076  LDS	R17,_adress+1
    01F4 D206      RCALL	_EEPROMReadBytes
(0111)  switch(adress)
    01F5 91800075  LDS	R24,_adress
    01F7 91900076  LDS	R25,_adress+1
    01F9 3084      CPI	R24,4
    01FA E0E0      LDI	R30,0
    01FB 079E      CPC	R25,R30
    01FC F199      BEQ	0x0230
    01FD E084      LDI	R24,4
    01FE E090      LDI	R25,0
    01FF 90200075  LDS	R2,_adress
    0201 90300076  LDS	R3,_adress+1
    0203 1582      CP	R24,R2
    0204 0593      CPC	R25,R3
    0205 F04C      BLT	0x020F
    0206 90200075  LDS	R2,_adress
    0208 90300076  LDS	R3,_adress+1
    020A 2022      TST	R2
    020B F411      BNE	0x020E
    020C 2033      TST	R3
    020D F0F1      BEQ	0x022C
    020E C034      RJMP	0x0243
    020F 91800075  LDS	R24,_adress
    0211 91900076  LDS	R25,_adress+1
    0213 3088      CPI	R24,0x8
    0214 E0E0      LDI	R30,0
    0215 079E      CPC	R25,R30
    0216 F0E9      BEQ	0x0234
    0217 3088      CPI	R24,0x8
    0218 E0E0      LDI	R30,0
    0219 079E      CPC	R25,R30
    021A F144      BLT	0x0243
    021B 91800075  LDS	R24,_adress
    021D 91900076  LDS	R25,_adress+1
    021F 308C      CPI	R24,0xC
    0220 E0E0      LDI	R30,0
    0221 079E      CPC	R25,R30
    0222 F0A9      BEQ	0x0238
    0223 308E      CPI	R24,0xE
    0224 E0E0      LDI	R30,0
    0225 079E      CPC	R25,R30
    0226 F0A9      BEQ	0x023C
    0227 3180      CPI	R24,0x10
    0228 E0E0      LDI	R30,0
    0229 079E      CPC	R25,R30
    022A F0A9      BEQ	0x0240
    022B C017      RJMP	0x0243
(0112)  {case 0x0000:Data[3]=0xE4;break;
    022C EE84      LDI	R24,0xE4
    022D 9380007A  STS	_Data+3,R24
    022F C013      RJMP	0x0243
(0113)   case 0x0004:Data[3]=0xE5;break;
    0230 EE85      LDI	R24,0xE5
    0231 9380007A  STS	_Data+3,R24
    0233 C00F      RJMP	0x0243
(0114)   case 0x0008:Data[3]=0xE6;break;
    0234 EE86      LDI	R24,0xE6
    0235 9380007A  STS	_Data+3,R24
    0237 C00B      RJMP	0x0243
(0115)   case 0x000C:Data[3]=0xE7;break;
    0238 EE87      LDI	R24,0xE7
    0239 9380007A  STS	_Data+3,R24
    023B C007      RJMP	0x0243
(0116)   case 0x000E:Data[3]=0xE8;break;
    023C EE88      LDI	R24,0xE8
    023D 9380007A  STS	_Data+3,R24
    023F C003      RJMP	0x0243
(0117)   case 0x0010:Data[3]=0xE9;break;
    0240 EE89      LDI	R24,0xE9
    0241 9380007A  STS	_Data+3,R24
(0118)   default :break;}
(0119) }
    0243 9622      ADIW	R28,2
    0244 9508      RET
_readdata:
  tempdata             --> R22
  trandata             --> R20
  data                 --> R20
    0245 D148      RCALL	push_gset2
    0246 2F40      MOV	R20,R16
(0120) 
(0121) //***************************读数据函数****************************//
(0122) void readdata(char data)
(0123) {int trandata;
(0124)  char tempdata;
(0125)  if(data==0xE)
    0247 304E      CPI	R20,0xE
    0248 F411      BNE	0x024B
(0126)  Eepromdata();
    0249 DF7F      RCALL	_Eepromdata
    024A C023      RJMP	0x026E
(0127)  else
(0128)  {switch(data)
    024B 2755      CLR	R21
    024C 3041      CPI	R20,1
    024D E0E0      LDI	R30,0
    024E 075E      CPC	R21,R30
    024F F049      BEQ	0x0259
    0250 3042      CPI	R20,2
    0251 E0E0      LDI	R30,0
    0252 075E      CPC	R21,R30
    0253 F041      BEQ	0x025C
    0254 3043      CPI	R20,3
    0255 E0E0      LDI	R30,0
    0256 075E      CPC	R21,R30
    0257 F049      BEQ	0x0261
    0258 C00B      RJMP	0x0264
(0129)   {case 1:trandata=TCNT1;break; //读TCNT1
    0259 B54C      IN	R20,0x2C
    025A B55D      IN	R21,0x2D
    025B C008      RJMP	0x0264
(0130)    case 2:trandata=(int)(tempdata=TCNT0);break;//读TCNT0
    025C B622      IN	R2,0x32
    025D 2D62      MOV	R22,R2
    025E 2D42      MOV	R20,R2
    025F 2755      CLR	R21
    0260 C003      RJMP	0x0264
(0131)    case 3:trandata=GetOutputADC();break;//读A/D转换结果
    0261 DDF2      RCALL	_GetOutputADC
    0262 2F40      MOV	R20,R16
    0263 2F51      MOV	R21,R17
(0132)    default :break;}
(0133)  Data[6]=(char)trandata;//数据低八位
    0264 9340007D  STS	0x7D,R20
(0134)  Data[7]=(char)(trandata>>8);//数据高八位
    0266 2E24      MOV	R2,R20
    0267 2E35      MOV	R3,R21
    0268 2C23      MOV	R2,R3
    0269 2433      CLR	R3
    026A FC27      SBRC	R2,7
    026B 9430      COM	R3
    026C 9220007E  STS	0x7E,R2
(0135) }
(0136)  Putdata(Data);
    026E E707      LDI	R16,0x77
    026F E010      LDI	R17,0
    0270 DDCF      RCALL	_Putdata
(0137) }
    0271 D0FF      RCALL	pop_gset2
    0272 9508      RET
_order:
    0273 D103      RCALL	push_gset1
(0138) 
(0139) //***************************命令函数******************************//
(0140) void order(void)
(0141) {switch (Data[4])
    0274 9140007B  LDS	R20,0x7B
    0276 2755      CLR	R21
    0277 3C40      CPI	R20,0xC0
    0278 E0E0      LDI	R30,0
    0279 075E      CPC	R21,R30
    027A F109      BEQ	0x029C
    027B 3C41      CPI	R20,0xC1
    027C E0E0      LDI	R30,0
    027D 075E      CPC	R21,R30
    027E F0F9      BEQ	0x029E
    027F 3C42      CPI	R20,0xC2
    0280 E0E0      LDI	R30,0
    0281 075E      CPC	R21,R30
    0282 F0F9      BEQ	0x02A2
    0283 3C43      CPI	R20,0xC3
    0284 E0E0      LDI	R30,0
    0285 075E      CPC	R21,R30
    0286 F121      BEQ	0x02AB
    0287 3C44      CPI	R20,0xC4
    0288 E0E0      LDI	R30,0
    0289 075E      CPC	R21,R30
    028A F149      BEQ	0x02B4
    028B 3C45      CPI	R20,0xC5
    028C E0E0      LDI	R30,0
    028D 075E      CPC	R21,R30
    028E F139      BEQ	0x02B6
    028F 3C46      CPI	R20,0xC6
    0290 E0E0      LDI	R30,0
    0291 075E      CPC	R21,R30
    0292 F129      BEQ	0x02B8
    0293 3C48      CPI	R20,0xC8
    0294 E0E0      LDI	R30,0
    0295 075E      CPC	R21,R30
    0296 F141      BEQ	0x02BF
    0297 3C49      CPI	R20,0xC9
    0298 E0E0      LDI	R30,0
    0299 075E      CPC	R21,R30
    029A F141      BEQ	0x02C3
    029B C02A      RJMP	0x02C6
(0142)  {case 0xC0:PORTB=PORTB|0x04;break;    //停止
    029C 9AC2      SBI	0x18,2
    029D C028      RJMP	0x02C6
(0143)   case 0xC1:PORTB=PORTB&0xFB;break;    //启动
    029E B388      IN	R24,0x18
    029F 7F8B      ANDI	R24,0xFB
    02A0 BB88      OUT	0x18,R24
    02A1 C024      RJMP	0x02C6
(0144)   case 0xC2:                           //正转
(0145)            {PORTB=PORTB&0xFC|0x02;
    02A2 B388      IN	R24,0x18
    02A3 7F8C      ANDI	R24,0xFC
    02A4 6082      ORI	R24,2
    02A5 BB88      OUT	0x18,R24
(0146) 		    PORTD=PORTD&0x3F|0x40;
    02A6 B382      IN	R24,0x12
    02A7 738F      ANDI	R24,0x3F
    02A8 6480      ORI	R24,0x40
    02A9 BB82      OUT	0x12,R24
(0147) 			break;}
    02AA C01B      RJMP	0x02C6
(0148)   case 0xC3:                           //反转
(0149)            {PORTB=PORTB&0xFC|0x01;
    02AB B388      IN	R24,0x18
    02AC 7F8C      ANDI	R24,0xFC
    02AD 6081      ORI	R24,1
    02AE BB88      OUT	0x18,R24
(0150) 		    PORTD=PORTD&0x3F|0x80;
    02AF B382      IN	R24,0x12
    02B0 738F      ANDI	R24,0x3F
    02B1 6880      ORI	R24,0x80
    02B2 BB82      OUT	0x12,R24
(0151) 			break;}
    02B3 C012      RJMP	0x02C6
(0152)   case 0xC4:Upspeed();break;           //加速
    02B4 DDA8      RCALL	_Upspeed
    02B5 C010      RJMP	0x02C6
(0153)   case 0xC5:Downspeed();break;         //减速
    02B6 DDC9      RCALL	_Downspeed
    02B7 C00E      RJMP	0x02C6
(0154)   case 0xC6:                           //制动
(0155)            {PORTB=PORTB|0x03;
    02B8 B388      IN	R24,0x18
    02B9 6083      ORI	R24,3
    02BA BB88      OUT	0x18,R24
(0156) 		    PORTD=PORTD&0x3F;
    02BB B382      IN	R24,0x12
    02BC 738F      ANDI	R24,0x3F
    02BD BB82      OUT	0x12,R24
(0157) 			break;}
    02BE C007      RJMP	0x02C6
(0158)   case 0xC8:flage=1;break;             //监控
    02BF E081      LDI	R24,1
    02C0 93800066  STS	0x66,R24
    02C2 C003      RJMP	0x02C6
(0159)   case 0xC9:flage=0;break;             //退出监控
    02C3 2422      CLR	R2
    02C4 92200066  STS	0x66,R2
(0160)   default :break;
(0161)  }
(0162) }
    02C6 D0B3      RCALL	pop_gset1
    02C7 9508      RET
_Datadisposal:
  operation            --> R20
  temp                 --> R22
    02C8 D0C5      RCALL	push_gset2
    02C9 9722      SBIW	R28,2
(0163) 
(0164) 
(0165) //***************************数据处理函数**************************//
(0166) void Datadisposal(void)
(0167) {char operation;
(0168)  int temp;
(0169)  operation=Data[3];
    02CA 9140007A  LDS	R20,_Data+3
(0170)  temp=Data[4];
    02CC 9160007B  LDS	R22,0x7B
    02CE 2777      CLR	R23
(0171)  temp=temp<<8;
    02CF 2F76      MOV	R23,R22
    02D0 2766      CLR	R22
(0172)  adress=temp+Data[5];
    02D1 9020007C  LDS	R2,0x7C
    02D3 2433      CLR	R3
    02D4 2E46      MOV	R4,R22
    02D5 2E57      MOV	R5,R23
    02D6 0C42      ADD	R4,R2
    02D7 1C53      ADC	R5,R3
    02D8 92500076  STS	_adress+1,R5
    02DA 92400075  STS	_adress,R4
(0173)  switch(operation&0x0F)
    02DC 2F64      MOV	R22,R20
    02DD 2777      CLR	R23
    02DE 706F      ANDI	R22,0xF
    02DF 7070      ANDI	R23,0
    02E0 3060      CPI	R22,0
    02E1 0767      CPC	R22,R23
    02E2 F049      BEQ	0x02EC
    02E3 3061      CPI	R22,1
    02E4 E0E0      LDI	R30,0
    02E5 077E      CPC	R23,R30
    02E6 F051      BEQ	0x02F1
    02E7 3062      CPI	R22,2
    02E8 E0E0      LDI	R30,0
    02E9 077E      CPC	R23,R30
    02EA F091      BEQ	0x02FD
    02EB C012      RJMP	0x02FE
(0174)  {case 0:readdata(operation>>4);break;
    02EC 2F04      MOV	R16,R20
    02ED 9502      SWAP	R16
    02EE 700F      ANDI	R16,0xF
    02EF DF55      RCALL	_readdata
    02F0 C00D      RJMP	0x02FE
(0175)   case 1:EEPROMWriteBytes(adress,&Data[6],2);break;
    02F1 E082      LDI	R24,2
    02F2 E090      LDI	R25,0
    02F3 8399      STD	Y+1,R25
    02F4 8388      STD	Y+0,R24
    02F5 E72D      LDI	R18,0x7D
    02F6 E030      LDI	R19,0
    02F7 91000075  LDS	R16,_adress
    02F9 91100076  LDS	R17,_adress+1
    02FB D120      RCALL	_EEPROMWriteBytes
    02FC C001      RJMP	0x02FE
(0176)   case 2:order();break;
    02FD DF75      RCALL	_order
(0177)   default :break;
(0178)  }
(0179) }
    02FE 9622      ADIW	R28,2
    02FF D071      RCALL	pop_gset2
    0300 9508      RET
(0180) 
(0181) //***************************主函数********************************//
(0182) void main()
(0183) {USARTInit(25);              //初始化串口             
_main:
    0301 E109      LDI	R16,0x19

⌨️ 快捷键说明

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