程序單
1. 程序1(紙杯選擇控制程序):
按照逆時(shí)針B-BC-C-CA-A-AB-B-BC-C通電,每相鄰一拍延時(shí)0.2s,最后一拍完成后延時(shí)10s
電機(jī)順時(shí)針轉(zhuǎn)
延 時(shí) 10s 鐘
電機(jī)逆時(shí)針轉(zhuǎn)
靜止并鎖定
P1.2P1.1P1.0置為“010”
保持P1.2P1.1P1.0始終不變
步進(jìn)電機(jī)轉(zhuǎn)回最初位置并鎖定位置
步進(jìn)電機(jī)控制程序
P1.4P1.3=01
P1.4P1.3=11
P1.4P1.3=10
P1.1置為“1”
按照逆時(shí)針B-BA-A-AC-C-CB-B-BA-A通電,每相鄰一拍延時(shí)0.2s,最后一拍完成后延時(shí)10s
P1.5=1?即發(fā)現(xiàn)假幣否?
保持靜止并
鎖定
YES
NO
#include
sbit L0=P1^0; //定義端口,A相;
sbit L1=P1^1;//B相;
sbit L2=P1^2;//C相;
sbit L3=P1^3;
sbit L4=P1^4;
sbit L5= P1^5;
sbit L6=P1^6;
void delay10s(void) //延時(shí)10秒子程序
{unsigned char i,j,k;
for(i=019H;i>0;i--)
for(j=085H;j>0;j--)
for(k=0FAH;k>0;k--);
}
void delay02s(void) //延時(shí)0.2秒子程序
{unsigned char i,j,k;
for(i=20;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
void main(void)
{while(L5==0)
{if((L4==1)&(L3==1))//選擇1.5元的紙杯
{L1=1; //順時(shí)針方向轉(zhuǎn)過15°
L2=1;
L0=0;
Delay02s();}
{L1=0; // 順時(shí)針方向轉(zhuǎn)過15°
L2=1;
L0=0;
Delay02s();}
{L0=1; // 順時(shí)針方向轉(zhuǎn)過15°
L1=0;
L2=1;
Delay02s();}
{L0=1; // 順時(shí)針方向轉(zhuǎn)過15°
L1=0;
L2=0;
Delay02s();}
{L0=1; // 順時(shí)針方向轉(zhuǎn)過15°
L1=1;
L2=0;
Delay02s();}
{L0=0; // 順時(shí)針方向轉(zhuǎn)過15°
L1=1;
L2=0;
Delay02s();}
{L0=0; // 順時(shí)針方向轉(zhuǎn)過15°
L1=1;
L2=1;
Delay02s();}
{L0=0; // 繼續(xù)順時(shí)針方向轉(zhuǎn)過15°并鎖定等待挖紙杯
L1=0;
L2=1;}
{ L6=1;
Delay02s(); //預(yù)留6ms的時(shí)間給螺線管挖紙杯
Delay02s();
Delay02s();
L6=0;}
{L1=1; //逆時(shí)針方向轉(zhuǎn)過15°
L2=1;
L0=0;
Delay02s();}
{L1=1; //逆時(shí)針方向轉(zhuǎn)過15°
L2=0;
L0=0;
Delay02s();}
{L0=1; //逆時(shí)針方向轉(zhuǎn)過15°
L1=1;
L2=0;
Delay02s();}
{ L0=1; //逆時(shí)針方向轉(zhuǎn)過15°
L1=0;
L2=0;
Delay02s();}
{ L0=1; //逆時(shí)針方向轉(zhuǎn)過15°
L1=0;
L2=1;
Delay02s();}
{ L0=0; //逆時(shí)針方向轉(zhuǎn)過15°
L1=0;
L2=1;
Delay02s();}
{ L0=0; //逆時(shí)針方向轉(zhuǎn)過15°
L1=1;
L2=1;
Delay02s();}
{ L0=0; //逆時(shí)針方向轉(zhuǎn)過15°并鎖定
L1=1;
L2=0;}
}
{ Else if((L4==0)&(L3=1))//選擇0.5元的紙杯
{L1=1; //逆時(shí)針方向轉(zhuǎn)過15°
L2=0;
L0=1;
Delay02s();}
{L1=0; //逆時(shí)針方向轉(zhuǎn)過15°
L2=0;
L0=1;
Delay02s();}
{L0=1; //逆時(shí)針方向轉(zhuǎn)過15°
L1=0;
L2=1;
Delay02s();}
{ L0=0; //逆時(shí)針方向轉(zhuǎn)過15°
L1=0;
L2=1;
Delay02s();}
{ L0=0; //逆時(shí)針方向轉(zhuǎn)過15°
L1=1;
L2=1;
Delay02s();}
{ L0=0; //逆時(shí)針方向轉(zhuǎn)過15°
L1=1;
L2=0;
Delay02s();}
{ L0=1; //逆時(shí)針方向轉(zhuǎn)過15°
L1=1;
L2=0;
Delay02s();}
{ L0=1; //逆時(shí)針方向轉(zhuǎn)過15°并鎖定等待挖紙杯
L1=0;
L2=0;}
{ L6=1;
Delay02s();//預(yù)留6ms的時(shí)間給螺線管挖紙杯
Delay02s();
Delay02s();
L6=0;}
{L1=1; //順時(shí)針方向轉(zhuǎn)過15°
L2=0;
L0=1;
Delay02s();}
{L1=1; // 順時(shí)針方向轉(zhuǎn)過15°
L2=0;
L0=0;
Delay02s();}
{L0=0; // 順時(shí)針方向轉(zhuǎn)過15°
L1=1;
L2=1;
Delay02s();}
{L0=0; // 順時(shí)針方向轉(zhuǎn)過15°
L1=0;
L2=1;
Delay02s();}
{L0=1; // 順時(shí)針方向轉(zhuǎn)過15°
L1=0;
L2=1;
Delay02s();}
{L0=1; // 順時(shí)針方向轉(zhuǎn)過15°
L1=0;
L2=0;
Delay02s();}
{L0=1; // 順時(shí)針方向轉(zhuǎn)過15°
L1=1;
L2=0;
Delay02s();}
{L0=0; // 繼續(xù)順時(shí)針方向轉(zhuǎn)過15°并鎖定
L1=1;
L2=0;}
}
{Else if((L4==1)&(L3=0))//選擇1.0元的紙杯并挖出紙杯
{ L6=1;
Delay02s(); //預(yù)留6ms的時(shí)間給螺線管挖紙杯
Delay02s();
Delay02s();
L6=0;}
}
{Else() //其他情況下鎖定在B相位置
{L0=0;
L1=1;
L2=0;}
}
2. 程序2(硬幣去留控制程序):
開始
發(fā)現(xiàn)假幣信號否?即P1.0=1?
發(fā)現(xiàn)退幣否?即P1.1=1?
NO
電機(jī)正轉(zhuǎn)(逆時(shí)針)收取硬幣
電機(jī)逆轉(zhuǎn)(順時(shí)針)退幣
NO
YES
YES
發(fā)現(xiàn)抽飲料按鈕信號否?即P1.3=1?
等待2分鐘,并不斷檢查抽飲料按鈕信號
NO
YES
;****************************步進(jìn)電機(jī)的驅(qū)動
; DESIGN BY BENLADN911??? FOSC = 12MHz??? 2010.05.10
; ----------------------------------------------------------------
; 步進(jìn)電機(jī)的驅(qū)動信號必須為脈沖信號!!! 轉(zhuǎn)動的速度和脈沖的頻率成正比!
; 本步進(jìn)電機(jī)步進(jìn)角為 7.5度 . 一圈 360 度 , 需要 48 個(gè)脈沖完成!
; A組線圈對應(yīng) P2.4
; B組線圈對應(yīng) P2.5
; C組線圈對應(yīng) P2.6
; D組線圈對應(yīng) P2.7
; 正轉(zhuǎn)次序: AB組--BC組--CD組--DA組 (即一個(gè)脈沖,正轉(zhuǎn) 7.5 度)
;硬幣識別裝置發(fā)現(xiàn)假幣則發(fā)出“0”信號
; -------------------------------------------------------------------
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: ORL P2,#30H ;為控制做準(zhǔn)備
ANL P1,#03H ;為檢查控制條件做準(zhǔn)備
MOV A,P1
JB ACC.1,LOOP4 ;如果發(fā)現(xiàn)假幣則自動退幣,否則等待抽飲料按鈕信號
SJMP LOOP3 ;如果P1.0=0則跳到LOOP3等待
JB ACC.0,LOOP4 ;如果發(fā)現(xiàn)退幣信號則退幣
;---------------------------正轉(zhuǎn)(逆時(shí)針)收取硬幣---------------------
LOOP1: MOV R3,#48?? ;正轉(zhuǎn) 1圈共48 脈沖
START:
MOV R0,#00H
START1:
MOV P2,#00H
MOV A,R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
JZ START?? ;對 A 的判斷,當(dāng) A = 0 時(shí)則轉(zhuǎn)到 START
MOV P2,A
LCALL DELAY
INC R0
DJNZ R3,START1
MOV P2,#00H
LCALL DELAY1
LJMP MAIN
;--------------------------反轉(zhuǎn)(順時(shí)針)退幣------------------------
LOOP3: JB ACC.2,LOOP1 ; 2分鐘內(nèi)等到抽飲料按鈕信號則收取硬幣,否則退幣
JNB ACC.0,LOOP3 ;如果P1.0=0則跳到LOOP3繼續(xù)檢查
SJMP LOOP4
LOOP2: LCALL DELAY2 ; 等待延時(shí)2分鐘
LOOP4: MOV R3,#48??; 反轉(zhuǎn)一圈共 48個(gè)脈沖
START2:
MOV P2,#00H
MOV R0,#05
START3:
MOV A,R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
JZ START2
MOV P2,A
LCALL DELAY
INC R0
DJNZ R3,START3
MOV P2,#00H
LCALL DELAY1
LJMP MAIN
DELAY: MOV R7,#40 ;步進(jìn)電機(jī)的轉(zhuǎn)速
M3: MOV R6,#248
DJNZ R6,$
DJNZ R7,M3
RET
DELAY1:?MOV?? R4,#20??? ;2S 延時(shí)子程序
DEL2:?MOV?? R3,#200
DEL3:?MOV?? R2,#250
????????????DJNZ? R2,$
????????????DJNZ? R3,DEL3
????????????DJNZ? R4,DEL2
????????????RET
DELAY2: ;誤差 0us,2min延時(shí)子程序
MOV R6,#0F0H
DL0: MOV R5,#0F8H
DJNZ R5,$
DJNZ R6,DL0
NOP
RET
TABLE:
DB 30H,60H,0C0H,90H? ;正轉(zhuǎn)表
DB 00? ;正轉(zhuǎn)結(jié)束
DB 30H,90H,0C0H,60H? ;反轉(zhuǎn)表
DB 00? ;反轉(zhuǎn)結(jié)束
END
3. 程序3(飲料抽取量控制程序):
準(zhǔn)備開始
發(fā)現(xiàn)出飲料信號否,即P1.6=1?
發(fā)現(xiàn)假幣否?
沒發(fā)現(xiàn)抽飲料信號?即P1.7=0?
檢測硬幣投入量的多少,即檢查P1.4P1.3=??
按硬幣投入量控制電機(jī)開啟時(shí)間,并根據(jù)飲料桶中信號的反饋隨時(shí)等待使電機(jī)停轉(zhuǎn)!
開啟電機(jī),即使P1.5=1
維持電機(jī)停轉(zhuǎn)
維持電機(jī)停轉(zhuǎn)
使電機(jī)停轉(zhuǎn)
YES
NO
YES
NO
NO
YES
開始檢測硬幣量
僅檢測到0.5元硬幣信號,即P1.4P1.3=01
僅檢測到1.5元硬幣信號,即P1.4P1.3=11
僅檢測到1.0元硬幣信號,即P1.4P1.3=10
100ml銅電極通電否,即P1.0=1?
300ml銅電極通電否,即P1.2=1?
200ml銅電極通電否,即P1.1=1?
開啟電機(jī),即使得P1.5=1并維持狀態(tài)
使電機(jī)停轉(zhuǎn)并維持,即使得P1.5-0維持
等待下次交易
YES
YES
YES
NO
NO
NO
#include <80C31.H>
sbit L0=P1^0; //定義端口
sbit L1=P1^1;
sbit L2=P1^2;
sbit L3=P1^3;
sbit L4=P1^4;
sbit L5=P1^5;
sbit L6=P1^6;
sbit L7=P1^7;
void delay1s(void) //延時(shí)1.0秒子程序
{unsigned char i,j,k;
for(i=50;i>0;i--)
for(j=40;j>0;j--)
for(k=248;k>0;k--);
}
void main(void)
{ sbit L5=1;//初始化,確保電機(jī)在停轉(zhuǎn)狀態(tài)
{while (L7==0 ) //如果L7=0維持電機(jī)停轉(zhuǎn)狀態(tài)
{L5=1;}
}
{ while (L6==0 )
{ while (L7==1 )
{ while (L0==0) //檢查容器中液位到了50ml否
{ if(L4==0&L3==1)
{ L5=0; //開啟電機(jī)并延時(shí)1.0s
Delay1s();
L5=1; }
}
}
{ while (L1==0 ) //檢查容器中液位到了100ml否
{ if (L4==1&L3==0 )
{ L5=0;//開啟電機(jī)并延時(shí)2.0s
Delay1s();
Delay1s();
L5=1; }
}
}
{ while (L2==0 ) //檢查容器中液位到了150ml否
{ if (L4==1&L3==1 )
{ L5=0; //開啟電機(jī)并延時(shí)3.0s
Delay1s();
Delay1s();
Delay1s();
L5=1; }
}
}
L5=1; //如果檢查到假幣信號或者沒有按下抽飲料按鈕的信號就保持電機(jī)停轉(zhuǎn)狀態(tài)
}
L5=1; //如果檢查到出飲料按鈕信號就馬上停止電機(jī)
}
4. 單片機(jī)組優(yōu)化后的電路、控制流程圖及其程序設(shè)計(jì)
思路分析:硬幣檢測裝置在檢測到假幣的時(shí)候發(fā)出“1”信號,檢測到0.5元硬幣的時(shí)候發(fā)出“1”信號并傳送到P1.3端口,檢測到1.0元或兩枚0.5元硬幣的時(shí)候發(fā)出“1”信號并傳送到P1.4端口。如上面電路所示,硬幣真假識別信號經(jīng)非門負(fù)變之后與抽飲料按鈕信號相與,如果硬幣識別裝置沒檢測到假幣,而消費(fèi)者并不按下抽飲料按鈕,收取硬幣的電機(jī)和抽飲料的電機(jī)并不動作,而是保持原狀態(tài)并等待2分鐘,若沒等到抽飲料按鈕信號則自動退幣,否則兩電機(jī)都動作實(shí)現(xiàn)收取硬幣和抽飲料的目的。在電路中我們還看到硬幣真假識別信號與退幣按鈕信號相或,只要消費(fèi)者按下退幣按鈕或者硬幣檢測裝置檢測到假幣就馬上退幣。上面電路中我們另一個(gè)至關(guān)重要的是出飲料按鈕電路。我們該怎么讓出飲料按鈕信號對單片機(jī)起控制作用呢?投機(jī)取巧的消費(fèi)者可能會因?yàn)榕既粰C(jī)會發(fā)現(xiàn)邊抽飲料邊出飲料會得到多一點(diǎn)。為了防止這種投機(jī)取巧的行為,我們可以將出飲料按鈕信號電路經(jīng)非門負(fù)變之后與抽飲料按鈕信號和硬幣真假信號相與再連接到P1.0端口或者直接把出飲料按鈕信號連接到P1.2口,我們選擇的是后者,如此一來一旦消費(fèi)者按下出飲料按鈕信號售貨機(jī)便停止抽飲料。上面電路中我們沒有畫出螺線管的連接電路,我們將其驅(qū)動電路連接在P0.0口。具體的程序及其流程圖如下面所示。
準(zhǔn)備開始
發(fā)現(xiàn)假幣否
初始化各電機(jī),使各電機(jī)都保持停轉(zhuǎn)狀態(tài)
檢測硬幣的總投入量
發(fā)現(xiàn)退幣信號否
發(fā)現(xiàn)抽飲料信號否
開啟收硬幣電機(jī)收取硬幣和抽飲料電機(jī)抽取飲料
NO
NO, 等待2分鐘
YES
開啟電機(jī)退幣
YES
YES
NO
檢查出飲料信號,按下了否?
開啟收硬幣電機(jī)收取硬幣和抽飲料電機(jī)抽取飲料
繼續(xù)抽飲料,直到結(jié)束并停止電機(jī)
中斷抽飲料電機(jī)
等待下次交易
YES
NO
開始檢測硬幣量
僅檢測到0.5元硬幣信號,即P1.4P1.3=01
僅檢測到1.5元硬幣信號,即P1.4P1.3=11
僅檢測到1.0元硬幣信號,即P1.4P1.3=10
100ml銅電極通電否,即P1.7=1?
300ml銅電極通電否,即P1.5=1?
200ml銅電極通電否,即P1.6=1?
開啟電機(jī),即使得P3.7=1并維持狀態(tài)
使電機(jī)停轉(zhuǎn)并維持,即使得P3.7=0維持
等待下次交易
YES
YES
YES
NO
NO
NO
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: ANL P3,#23H ;初始化電機(jī)狀態(tài),使兩電機(jī)保持停轉(zhuǎn)和鎖定狀態(tài)
ANL P1,#FFH ;為檢測外部輸入的控制信號做準(zhǔn)備
MOV A,P1
JB ACC.1,LOOP2 ;如果發(fā)現(xiàn)假幣或退幣信號則自動退幣,否則等抽飲料按鈕信號
JNB ACC.0,LOOP0 ;如果P1.0=0則跳到LOOP0等待2分鐘
JB ACC.3,AP2 ;P1.3=1 跳轉(zhuǎn)到AP2
JNB ACC.4,LOOP11 ;P1.4=1,P1.3=0則跳轉(zhuǎn)LOOP11挖1元相應(yīng)紙杯
AP2: JB ACC.4,LOOP6 ;P1.4=1則跳轉(zhuǎn)到LOOP6出售1.5元相應(yīng)紙杯
SJMP LOOP4 ;P1.4P1.3=01則跳轉(zhuǎn)LOOP4出售0.5元相應(yīng)紙杯
;-------------------------硬幣去留電機(jī)正轉(zhuǎn)(逆時(shí)針)收取硬幣---------------------
LOOP1: MOV R3,#48?? ;正轉(zhuǎn) 1圈共48 脈沖
START:
MOV R0,#00H
START1:
MOV P3#00H
MOV A,R0
MOV DPTR,#TABLE1
MOVC A,@A+DPTR
JZ START?? ;對 A 的判斷,當(dāng) A = 0 時(shí)則轉(zhuǎn)到 START
MOV P3,A
LCALL DELAY
INC R0
DJNZ R3,START1
MOV P3,#00H
LCALL DELAY1
SJMP AP1
;---------------硬幣去留電機(jī)反轉(zhuǎn)(順時(shí)針)退幣------------------------
LOOP0: LCALL DELAY2 ;延時(shí)等待2分鐘
LOOP2: JB ACC.0,LOOP1 ;2分鐘內(nèi)等到抽飲料按鈕信號則收取硬幣,否則退幣
MOV R3,#48?? ;反轉(zhuǎn)一圈共 48個(gè)脈沖
START2:
MOV P3,#00H
MOV R0,#05
START3:
MOV A,R0
MOV DPTR,#TABLE1
MOVC A,@A+DPTR
JZ START2
MOV P3,A
CALL DELAY
INC R0
DJNZ R3,START3
MOV P3,#00H
LCALL DELAY1
SJMP MAIN
;---------------紙杯電機(jī)正轉(zhuǎn)(逆時(shí)針)出售0.5元對應(yīng)的紙杯---------------------
LOOP4: MOV R3,#8 ;正轉(zhuǎn) 1/3圈共8 脈沖
START4:
MOV R0,#00H
START5:
MOV P3,#00H
MOV A,R0
MOV DPTR,#TABLE2 ,查表程序
MOVC A,@A+DPTR
JZ START4 ;對 A 的判斷,當(dāng) A = 0 時(shí)則轉(zhuǎn)到 START
MOV P3,A
LCALL DELAY
INC R0
DJNZ R3,START5
MOV P3,#20H
LCALL DELAY1
;------------------------------挖出0.5元紙杯------------------------------
Loop13: ORL P0,#80H ;使P0.0=1,其他位不變
LCALL DELAY3
ANL P0,7FH ;使P0.0=0,其他位不變
;-------------------------紙杯電機(jī)反轉(zhuǎn)復(fù)位鎖定--------------------------------
LOOP5: MOV R3,#8 ;反轉(zhuǎn)1/3圈共 8個(gè)脈沖
START6:
MOV P3,#00H
MOV R0,#07H
START7:
MOV A,R0
MOV DPTR,#TABLE2 ;查表程序
MOVC A,@A+DPTR
JZ START6
MOV P3,A
LCALL DELAY
INC R0
DJNZ R3,START7
MOV P3,#20H ;返回到原始位置鎖定電機(jī)
LCALL DELAY1
SJMP LOOP8 ;紙杯銷售完后馬上抽200ml飲料
;----------------------紙杯電機(jī)反轉(zhuǎn)銷售1.5元相應(yīng)的紙杯-----------------------
LOOP6: MOV R3,#8 ;反轉(zhuǎn)1/3圈共 8個(gè)脈沖
START8:
MOV P3,#00H
MOV R0,#07H
START9:
MOV A,R0
MOV DPTR,#TABLE2
MOVC A,@A+DPTR
JZ START8
MOV P3,A
LCALL DELAY
INC R0
DJNZ R3,START9
MOV P3,#20H
LCALL DELAY1
;------------------------------挖出1.5元紙杯------------------------------
LOOP12: ORL P0,#80H ;使P0.0=1,其他位不變進(jìn)行挖紙杯動作
LCALL DELAY3
ANL P0,7FH ;使P0.0=0,其他位不變
;---------------紙杯電機(jī)正轉(zhuǎn)(逆時(shí)針)復(fù)位鎖定------------------------------
LOOP14: MOV R3,#8 ;正轉(zhuǎn) 1/3圈共8 脈沖
START10:
MOV R0,#00H
START11:
MOV P3,#00H
MOV A,R0
MOV DPTR,#TABLE2
MOVC A,@A+DPTR
JZ START10 ;對 A 的判斷,當(dāng) A = 0 時(shí)則轉(zhuǎn)到 START10
MOV P3,A
LCALL DELAY
INC R0
DJNZ R3,START11
MOV P3,#20H
LCALL DELAY1
SJMP LOOP9 ;紙杯銷售完后馬上抽300ml飲料
;------------------------------挖出1.0元紙杯------------------------------
LOOP11: ORL P0,#80H ;使P0.0=1,其他位不變
LCALL DELAY3
ANL P0,7FH ;使P0.0=0,其他位不變
SJMP LOOP10 ;紙杯銷售完后馬上抽200ml飲料
;--------------------------------抽飲料------------------------------------
LOOP8: ORL P3,80H ;抽100ml飲料
JB ACC.2,TZ
JB ACC.6,MAIN ;檢查容器中液位達(dá)到100ml否
LCALL DELAY3 ;延時(shí)0.5S
SJMP FW ;抽完飲料就等待下次交易
LOOP9: ORL P3,80H ;抽300ml飲料
JB ACC.2,TZ
JB ACC.4,MAIN ;檢查飲料桶中液位達(dá)到300ml否
LCALL DELAY3 ;延時(shí)1.5S
LCALL DELAY3
LCALL DELAY3
SJMP FW ;抽完飲料就等待下次交易
LOOP10: ORL P3,80H ;抽200ml飲料
JB ACC.2,TZ
JB ACC.5,MAIN ;檢查飲料桶中液位達(dá)到200ml否
LCALL DELAY3 ;延時(shí)1s
LCALL DELAY3
SJMP FW ;抽完飲料就等待下次交易
TZ: ANL P3,7FH ;檢測到出飲料按鈕信號則使電機(jī)停轉(zhuǎn)
FW: ANL P3,#23H ;使兩步進(jìn)電機(jī)在原始位置維持鎖定狀態(tài)
ANL P1,00H ;使控制信號口都置零,等待下次交易
SJMP MAIN ;循環(huán)檢查
;--------------------------一些延時(shí)子程序-------------------------------------
DELAY: MOV R7,#40 ;步進(jìn)電機(jī)的轉(zhuǎn)速
M3: MOV R6,#248
DJNZ R6,$
DJNZ R7,M3
RET
DELAY1:? MOV?? R4,#20??? ;2S 延時(shí)子程序
DEL2: MOV?? R3,#200
DEL3:?MOV?? R2,#250
??????DJNZ? R2,$
??????DJNZ? R3,DEL3
??????DJNZ? R4,DEL2
??????RET
DELAY2: ;誤差 0us,2min延時(shí)子程序
MOV R6,#0F0H
DL0: MOV R5,#0F8H
DJNZ R5,$
DJNZ R6,DL0
NOP
RET
DELAY3: ;誤差 0us,0.5s延時(shí)子程序
MOV R6,#47H
DL1:
MOV R5,#02H
DJNZ R5,$
DJNZ R6,DL0
RET
TABLE1:
DB 03H,06H,0CH,09H? ;硬幣控制電機(jī)正轉(zhuǎn)表
DB 00? ;正轉(zhuǎn)結(jié)束
DB 03H,09H,0CH,06H? ;硬幣控制電機(jī)反轉(zhuǎn)表
DB 00 ;反轉(zhuǎn)結(jié)束
TABLE2:
DB 20H,30H,10H,50H,40H,60H ;紙杯電機(jī)正轉(zhuǎn)表
DB 00 ;正轉(zhuǎn)結(jié)束
DB 20H,60H,40H,50H,10H,30H ;紙杯電機(jī)反轉(zhuǎn)表
DB 00 ;反轉(zhuǎn)結(jié)束
END
27