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

📄 work.lst

📁 avr单片机应用开发典型实例CD.rar
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0174)     M_DIR0;               //翻页电机反转
    00EF B385      IN	R24,0x15
    00F0 7F87      ANDI	R24,0xF7
    00F1 BB85      OUT	0x15,R24
(0175)     for(u=0;u<400;u++)    //翻页电机居中
    00F2 2422      CLR	R2
    00F3 2433      CLR	R3
    00F4 92300065  STS	_u+1,R3
    00F6 92200064  STS	_u,R2
    00F8 C00A      RJMP	0x0103
(0176)     {
(0177)      PulseXingZou();      //翻页电机驱动脉冲输出
    00F9 DF91      RCALL	_PulseXingZou
    00FA 91800064  LDS	R24,_u
    00FC 91900065  LDS	R25,_u+1
    00FE 9601      ADIW	R24,1
    00FF 93900065  STS	_u+1,R25
    0101 93800064  STS	_u,R24
    0103 91800064  LDS	R24,_u
    0105 91900065  LDS	R25,_u+1
    0107 3980      CPI	R24,0x90
    0108 E0E1      LDI	R30,1
    0109 079E      CPC	R25,R30
    010A F370      BCS	0x00F9
(0178)     } 
(0179) }
    010B 9508      RET
(0180) //***************字轮电机转动方向及步数判断函数1****************//
(0181) void  Judge1()           //判断字轮正反转
(0182)  {
(0183)   if(b>10){R_Step=(20-b)*12; M_DIR1;}  
_Judge1:
    010C E08A      LDI	R24,0xA
    010D E090      LDI	R25,0
    010E 90200062  LDS	R2,_b
    0110 90300063  LDS	R3,_b+1
    0112 1582      CP	R24,R2
    0113 0593      CPC	R25,R3
    0114 F458      BCC	0x0120
    0115 E124      LDI	R18,0x14
    0116 E030      LDI	R19,0
    0117 1922      SUB	R18,R2
    0118 0933      SBC	R19,R3
    0119 E00C      LDI	R16,0xC
    011A E010      LDI	R17,0
    011B D259      RCALL	mpy16s
    011C 93000060  STS	_R_Step,R16
    011E 9AAB      SBI	0x15,3
    011F C00C      RJMP	0x012C
(0184)   else {R_Step=b*12; M_DIR0; }  
    0120 91200062  LDS	R18,_b
    0122 91300063  LDS	R19,_b+1
    0124 E00C      LDI	R16,0xC
    0125 E010      LDI	R17,0
    0126 D24E      RCALL	mpy16s
    0127 93000060  STS	_R_Step,R16
    0129 B385      IN	R24,0x15
    012A 7F87      ANDI	R24,0xF7
    012B BB85      OUT	0x15,R24
(0185)  }
    012C 9508      RET
(0186) //***************字轮电机转动方向及步数判断函数2****************//
(0187) void  Judge2()           //判断字轮正反转
(0188) {
(0189)   if(b>10){R_Step=(20-b)*12; M_DIR0;}  
_Judge2:
    012D E08A      LDI	R24,0xA
    012E E090      LDI	R25,0
    012F 90200062  LDS	R2,_b
    0131 90300063  LDS	R3,_b+1
    0133 1582      CP	R24,R2
    0134 0593      CPC	R25,R3
    0135 F468      BCC	0x0143
    0136 E124      LDI	R18,0x14
    0137 E030      LDI	R19,0
    0138 1922      SUB	R18,R2
    0139 0933      SBC	R19,R3
    013A E00C      LDI	R16,0xC
    013B E010      LDI	R17,0
    013C D238      RCALL	mpy16s
    013D 93000060  STS	_R_Step,R16
    013F B385      IN	R24,0x15
    0140 7F87      ANDI	R24,0xF7
    0141 BB85      OUT	0x15,R24
    0142 C00A      RJMP	0x014D
(0190)   else {R_Step=b*12; M_DIR1; }  
    0143 91200062  LDS	R18,_b
    0145 91300063  LDS	R19,_b+1
    0147 E00C      LDI	R16,0xC
    0148 E010      LDI	R17,0
    0149 D22B      RCALL	mpy16s
    014A 93000060  STS	_R_Step,R16
    014C 9AAB      SBI	0x15,3
(0191) }
    014D 9508      RET
(0192) //***************机械手配合翻页电机翻页过程函数*****************//
(0193) void MotorZhua_fangZhi()
(0194) {Reverse_Step();
_MotorZhua_fangZhi:
    014E DF83      RCALL	_Reverse_Step
(0195)  u=0;
    014F 2422      CLR	R2
    0150 2433      CLR	R3
    0151 92300065  STS	_u+1,R3
    0153 92200064  STS	_u,R2
(0196)  DelayLong(5);           //吸纸延时10*(1000)	 
    0155 E005      LDI	R16,5
    0156 E010      LDI	R17,0
    0157 DEE7      RCALL	_DelayLong
    0158 C016      RJMP	0x016F
(0197)   while(SONSOR_6==0)     //检测传感器6
(0198)    {   
(0199)       M_DIR1;            //翻页电机正转  
    0159 9AAB      SBI	0x15,3
(0200)       u++;
    015A 91800064  LDS	R24,_u
    015C 91900065  LDS	R25,_u+1
    015E 9601      ADIW	R24,1
    015F 93900065  STS	_u+1,R25
    0161 93800064  STS	_u,R24
(0201)       PulseXingZou();    //翻页电机驱动脉冲输出 
    0163 DF27      RCALL	_PulseXingZou
(0202)       if(u==380){ GRASP_ACT0;}   //抓纸机械手后翻页电机往正转380步放纸
    0164 91800064  LDS	R24,_u
    0166 91900065  LDS	R25,_u+1
    0168 378C      CPI	R24,0x7C
    0169 E0E1      LDI	R30,1
    016A 079E      CPC	R25,R30
    016B F419      BNE	0x016F
    016C B385      IN	R24,0x15
    016D 7F8E      ANDI	R24,0xFE
    016E BB85      OUT	0x15,R24
    016F 9BB6      SBIS	0x16,6
    0170 CFE8      RJMP	0x0159
(0203)     }
(0204) }
    0171 9508      RET
(0205) //******************装票步进电机出仓过程函数********************//
(0206) void Motor3QianZou()
(0207) {
(0208)  M_DIR1;                   //装票步进电机出仓方向
_Motor3QianZou:
    0172 9AAB      SBI	0x15,3
    0173 C001      RJMP	0x0175
(0209)  while(SONSOR_0==0)        //检测前传感器                  
(0210)       PulseZhuangPiao();   //承票板往前走	 
    0174 DF0B      RCALL	_PulseZhuangPiao
    0175 9BB0      SBIS	0x16,0
    0176 CFFD      RJMP	0x0174
(0211) }
    0177 9508      RET
_Motor3HouZhong:
  e                    --> R20
    0178 D1E2      RCALL	push_gset1
(0212) //******************装票步进电机入仓过程函数********************//
(0213) void Motor3HouZhong()
(0214) {
    0179 C004      RJMP	0x017E
(0215)  uchar e;
(0216)  while(SONSOR_1==0)             //检测中传感器
(0217) 	     {
(0218)          M_DIR0;                //装票步进电机入仓方向
    017A B385      IN	R24,0x15
    017B 7F87      ANDI	R24,0xF7
    017C BB85      OUT	0x15,R24
(0219) 		 PulseZhuangPiao();     //装票步进电机驱动脉冲输出
    017D DF02      RCALL	_PulseZhuangPiao
    017E 9BB1      SBIS	0x16,1
    017F CFFA      RJMP	0x017A
(0220) 		 }
(0221) 		 for(e=0;e<55;e++)      //修正传感器位置误差55
    0180 2744      CLR	R20
    0181 C005      RJMP	0x0187
(0222) 		 {
(0223) 		  M_DIR0;               //装票步进电机入仓方向
    0182 B385      IN	R24,0x15
    0183 7F87      ANDI	R24,0xF7
    0184 BB85      OUT	0x15,R24
(0224) 		  PulseZhuangPiao();    //装票步进电机驱动脉冲输出
    0185 DEFA      RCALL	_PulseZhuangPiao
    0186 9543      INC	R20
    0187 3347      CPI	R20,0x37
    0188 F3C8      BCS	0x0182
(0225)           }
(0226) }
    0189 D1D4      RCALL	pop_gset1
    018A 9508      RET
(0227) //*********装票步进电机入仓后再进入盖章位置的过程函数***********//
(0228) void Motor3HouZou()
(0229) {
(0230)        M_DIR0;                  //装票步进电机入仓方向
_Motor3HouZou:
    018B B385      IN	R24,0x15
    018C 7F87      ANDI	R24,0xF7
    018D BB85      OUT	0x15,R24
    018E C001      RJMP	0x0190
(0231) 	while(SONSOR_2==0)          //检测后传感器
(0232)        PulseZhuangPiao();       //装票步进电机驱动脉冲输出
    018F DEF0      RCALL	_PulseZhuangPiao
    0190 9BB2      SBIS	0x16,2
    0191 CFFD      RJMP	0x018F
(0233) }
    0192 9508      RET
(0234) //*********************装票过程函数*****************************//
(0235) void Motor3()
(0236) {
(0237) Motor3QianZou();                //调用装票步进电机出仓过程函数
_Motor3:
    0193 DFDE      RCALL	_Motor3QianZou
(0238) Motor3HouZhong();               //调用装票步进电机入仓过程函数
(0239) }
    0194 CFE3      RJMP	_Motor3HouZhong
_Motor3QianZhong:
  i                    --> R20
    0195 D1C5      RCALL	push_gset1
(0240) //*******装票步进电机入仓后再进入盖章位置的逆过程函数***********//
(0241) void Motor3QianZhong()
(0242) {uint i;
(0243)  M_DIR1;                         //装票步进电机出方向
    0196 9AAB      SBI	0x15,3
    0197 C001      RJMP	0x0199
(0244)  while(SONSOR_1==0)              //检测中传感器
(0245) 	     {
(0246) 		 PulseZhuangPiao();      //装票步进电机驱动脉冲输出
    0198 DEE7      RCALL	_PulseZhuangPiao
    0199 9BB1      SBIS	0x16,1
    019A CFFD      RJMP	0x0198
(0247) 		 }
(0248)  for(i=0;i<20;i++)               //修正传感器位置误差20
    019B 2744      CLR	R20
    019C 2755      CLR	R21
    019D C003      RJMP	0x01A1
(0249)     PulseZhuangPiao();           //装票步进电机驱动脉冲输出
    019E DEE1      RCALL	_PulseZhuangPiao
    019F 5F4F      SUBI	R20,0xFF
    01A0 4F5F      SBCI	R21,0xFF
    01A1 3144      CPI	R20,0x14
    01A2 E0E0      LDI	R30,0
    01A3 075E      CPC	R21,R30
    01A4 F3C8      BCS	0x019E
(0250) }
    01A5 D1B8      RCALL	pop_gset1
    01A6 9508      RET
(0251) //***************翻页电机打印页码过程中复位函数*****************//
(0252) void Motor1_Fuwei()
(0253) {
(0254)   Reverse_Step();               //翻页电机行走抓纸张函数
_Motor1_Fuwei:
    01A7 DF2A      RCALL	_Reverse_Step
(0255)   DelayLong(5);    
    01A8 E005      LDI	R16,5
    01A9 E010      LDI	R17,0
    01AA DE94      RCALL	_DelayLong
    01AB C002      RJMP	0x01AE
(0256)    while(SONSOR_6==0)           //检测中传感器5
(0257)    { 
(0258)     M_DIR1;                     //翻页电机正转
    01AC 9AAB      SBI	0x15,3
(0259)    PulseXingZou();              //翻页电机行驱动脉冲输出
    01AD DEDD      RCALL	_PulseXingZou
    01AE 9BB6      SBIS	0x16,6
    01AF CFFC      RJMP	0x01AC
(0260) 	}
(0261)     M_DIR0;                     //翻页电机反转
    01B0 B385      IN	R24,0x15
    01B1 7F87      ANDI	R24,0xF7
    01B2 BB85      OUT	0x15,R24
(0262) }
    01B3 9508      RET
(0263) //***************字轮电机打印页码过程中复位函数*****************//
(0264) void Motor2_Fuwei()
(0265) {
(0266)    M_DIR0;                      //字轮电机反转            
_Motor2_Fuwei:
    01B4 B385      IN	R24,0x15
    01B5 7F87      ANDI	R24,0xF7
    01B6 BB85      OUT	0x15,R24
    01B7 C001      RJMP	0x01B9
(0267)    while(SONSOR_4==0)           //检测字轮定位传感器
(0268)      {
(0269)       PulseZiLun();             //字轮电机行驱动脉冲输出 
    01B8 DEDD      RCALL	_PulseZiLun
    01B9 9BB4      SBIS	0x16,4
    01BA CFFD      RJMP	0x01B8
(0270)      }
(0271) }
    01BB 9508      RET
_Motor12_Dama:
  p                    --> R22
  k                    --> R20
    01BC D1B5      RCALL	push_gset2
(0272) //***********字轮电机与翻页电机配合打印页码过程函数*************//
(0273) void Motor12_Dama()
(0274) {
(0275) uchar k=0;
    01BD 2744      CLR	R20
    01BE C0B9      RJMP	0x0278
(0276) uchar p;
(0277) while(SONSOR_3==0)              //纸张传感器为0(有票据)时执行循环
(0278)  {
(0279)     for(u=0;u<150;u++)          //字轮电机进入打印位置
    01BF 2422      CLR	R2
    01C0 2433      CLR	R3
    01C1 92300065  STS	_u+1,R3
    01C3 92200064  STS	_u,R2
    01C5 C00D      RJMP	0x01D3
(0280)      {
(0281) 	  M_DIR0;                   //字轮电机反转
    01C6 B385      IN	R24,0x15
    01C7 7F87      ANDI	R24,0xF7
    01C8 BB85      OUT	0x15,R24
(0282)       PulseXingZou();	        //字轮电机行驱动脉冲输出
    01C9 DEC1      RCALL	_PulseXingZou
    01CA 91800064  LDS	R24,_u
    01CC 91900065  LDS	R25,_u+1
    01CE 9601      ADIW	R24,1
    01CF 93900065  STS	_u+1,R25
    01D1 93800064  STS	_u,R24
    01D3 91800064  LDS	R24,_u
    01D5 91900065  LDS	R25,_u+1
    01D7 3986      CPI	R24,0x96
    01D8 E0E0      LDI	R30,0
    01D9 079E      CPC	R25,R30
    01DA F358      BCS	0x01C6
(0283)      }                          
(0284)      Motor2_Fuwei();            //字轮电机复位 
    01DB DFD8      RCALL	_Motor2_Fuwei
(0285)      p=0;
    01DC 2766      CLR	R22
(0286)      if(k<10)                                   
    01DD 304A      CPI	R20,0xA
    01DE F540      BCC	0x0207
(0287) 	   {
(0288) 	     b=k+k;
    01DF 2E24      MOV	R2,R20
    01E0 2433      CLR	R3
    01E1 2C42      MOV	R4,R2
    01E2 2455      CLR	R5
    01E3 0C42      ADD	R4,R2
    01E4 1C53      ADC	R5,R3
    01E5 92500063  STS	_b+1,R5
    01E7 92400062  STS	_b,R4
(0289)          Judge1();
    01E9 DF22      RCALL	_Judge1
(0290) 		 for(u=0;u<R_Step;u++)     //字轮电机转到打印位置
    01EA 2422      CLR	R2
    01EB 2433      CLR	R3
    01EC 92300065  STS	_u+1,R3
    01EE 92200064  STS	_u,R2
    01F0 C00A      RJMP	0x01FB
(0291)          {PulseZiLun(); }     
    01F1 DEA4      RCALL	_PulseZiLun
    01F2 91800064  LDS	R24,_u
    01F4 91900065  LDS	R25,_u+1
    01F6 9601      ADIW	R24,1
    01F7 93900065  STS	_u+1,R25
    01F9 93800064  STS	_u,R24
    01FB 90200060  LDS	R2,_R_Step
    01FD 2433      CLR	R3
    01FE 90400064  LDS	R4,_u
    0200 90500065  LDS	R5,_u+1
    0202 1442      CP	R4,R2
    0203 0453      CPC	R5,R3
    0204 F360      BCS	0x01F1
(0292)          Print_Act();
    0205 DE9B      RCALL	_Print_Act
(0293) 	    }
    0206 C06A      RJMP	0x0271
(0294) 
(0295) 	  else
(0296) 	   {
(0297) 	    b=k/10+k/10;               //取整的余数(个位数的值)
    0207 E02A      LDI	R18,0xA
    0208 E030      LDI	R19,0
    0209 2F04      MOV	R16,R20
    020A 2711      CLR	R17
    020B D100      RCALL	div16s
    020C 2E20      MOV	R2,R16
    020D 2E31      MOV	R3,R17
    020E 0E20      ADD	R2,R16
    020F 1E31      ADC	R3,R17
    0210 92300063  STS	_b+1,R3
    0212 92200062  STS	_b,R2
(0298)          Judge1();
    0214 DEF7      RCALL	_Judge1
(0299) 		 for(u=0;u<R_Step;u++)     //字轮电机转到打印位置
    0215 2422      CLR	R2
    0216 2433      CLR	R3
    0217 92300065  STS	_u+1,R3
    0219 92200064  STS	_u,R2
    021B C00A      RJMP	0x0226
(0300)          {PulseZiLun(); }   
    021C DE79      RCALL	_PulseZiLun
    021D 91800064  LDS	R24,_u
    021F 91900065  LDS	R25,_u+1
    0221 9601      ADIW	R24,1
    0222 93900065  STS	_u+1,R25
    0224 93800064  STS	_u,R24
    0226 90200060  LDS	R2,_R_Step
    0228 2433      CLR	R3
    0229 90400064  LDS	R4,_u
    022B 90500065  LDS	R5,_u+1
    022D 1442      CP	R4,R2
    022E 0453      CPC	R5,R3
    022F F360      BCS	0x021C
(0301)          Print_Act();              //打印个位数
    0230 DE70      RCALL	_Print_Act
(0302)         p=2*(k%10);                //取整的值(十位数的值)
    0231 E01A      LDI	R17,0xA
    0232 2F04      MOV	R16,R20
    0233 D10D      RCALL	mod8u
    0234 2F60      MOV	R22,R16
    0235 0F66      LSL	R22
(0303)          if(p>b)
    0236 90200062  LDS	R2,_b
    0238 90300063  LDS	R3,_b+1
    023A 2E46      MOV	R4,R22
    023B 2455      CLR	R5
    023C 1424      CP	R2,R4

⌨️ 快捷键说明

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