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