探測機器人系統(tǒng)的設(shè)計
探測機器人系統(tǒng)的設(shè)計,探測,機器人,系統(tǒng),設(shè)計
電機控制程序
org 00h
ajmp start
org 30h
START:? ;??檢測鍵盤狀態(tài)的程序
mov p0,#0ffh????? ?? ;置p0為輸入口,將P0口置為1,用于檢查按鍵是否按下
jnb p0.0,QIDONG????? ;按鍵S2按下,p0.0為0,進入啟動(正轉(zhuǎn))程序
jnb p0.1,FANZHUAN?? ;按鍵S3按下,p0.1為0,進入反轉(zhuǎn)程序
jnb p0.2,JITING??????? ;按鍵S4按下,p0.2為0,進入急停程序
jnb p0.3,JIASU???????? ;按鍵S5按下,p0.3為0,進入加速程序
jnb p0.4,JIANSU??????? ;按鍵S6按下,p0.4為0,進入減速程序
jnb p0.5,TINGZHI????? ? ;按鍵S7按下,P0.5為0,進入停止程序
ajmp start
QIDONG. ;啟動程序,默認為順時針轉(zhuǎn)動,轉(zhuǎn)速為2000RPM
LCALL YANSHI?? ;調(diào)用延時子程序,目的:軟件消除按鍵抖動
JNB P0.0,QI
LJMP START ;軟件消抖后,若p0.0為1,則認為按鍵未按下,回到檢測按鍵狀態(tài)程序
QI:???
clr p0.6????? ;p0.6接電機R/S端,將其清零表示電機可以運行?????????
setb p0.7???? ;p0.7接DIR端,為1,則與COM端斷開,電機正轉(zhuǎn)
mov p2,#0Bh ;p2.0接CH1,p2.1接CH2,p2.2接CH3,將速度設(shè)定為2000RPM
lcall XIANSHI? ;顯示設(shè)定速度
LJMP START ;執(zhí)行完啟動程序后,回到檢測按鍵狀態(tài)程序
FANZHUAN: ;反轉(zhuǎn)程序,也即逆時針轉(zhuǎn)動
LCALL YANSHI?? ;調(diào)用延時子程序,目的:軟件消除按鍵抖動
JNB P0.1,FAN
LJMP START??? ;軟件消抖后,若p0.0為1,則認為按鍵未按下,回到檢測按鍵狀態(tài)程序
FAN:????
clr p2.3???????????? ;接通BRK端,使電機急停
lcall PANTING?? ;調(diào)用判停程序,能從判停程序中返回,說明機已停
setb p2.3??????? ?? ;斷開BRK端,解除急停狀態(tài)
clr p0.7?????????? ? ;接通DIR端,使電機逆時針轉(zhuǎn)動
lcall XIANSHI??? ?? ;顯示設(shè)定速度
LJMP START??? ;執(zhí)行完啟動程序后,回到檢測按鍵狀態(tài)程序
;急停程序
LCALL YANSHI?? ;調(diào)用延時子程序,目的:軟件消除按鍵抖動
JNB P0.2,JI
LJMP START ;軟件消抖后,若p0.0為1,則認為按鍵未按下,回到檢測按鍵狀態(tài)程序
JI:???
clr p2.3????????? ;接通BRK端,使電機急停
lcall PANTING???? ? ;調(diào)用判停程序,若能從中返回,說明電機已停
LJMP START? ? ;執(zhí)行完啟動程序后,回到檢測按鍵狀態(tài)程序
JIASU: ;加速程序,每按一次鍵,加速500rpm
LCALL YANSHI? ;調(diào)用延時子程序,目的:軟件消除按鍵抖動
JNB P0.3,JIA
LJMP START? ? ;軟件消抖后,若p0.0為1,則認為按鍵未按下,回到檢測按鍵狀態(tài)程序
JIA:?
mov a,p2???? ;將p2的值復(fù)制到累加器a中
anl a,#07h?? ?? ;取ch3ch2ch1的值,并放到累加器a中???
jz START??? ?? ;若a中值為0,則速度已經(jīng)最大,不再加速,回到檢測按鍵狀態(tài)程序??????
mov r0,p2
dec r0
mov p2,r0?????????? ;加速500rpm(參考電機驅(qū)動器說明中的多段速度選擇部分)
lcall XIANSHI???? ?? ;顯示設(shè)定的速度
LJMP START????? ;執(zhí)行完啟動程序后,回到檢測按鍵狀態(tài)程序
JIANSU: ;減速程序,每按一次鍵,減速500rpm
LCALL YANSHI? ;調(diào)用延時子程序,目的:軟件消除按鍵抖動
JNB P0.4,JIAN
LJMP START??? ;軟件消抖后,若p0.0為1,則認為按鍵未按下,回到檢測按鍵狀態(tài)程序
JIAN:?
mov a,p2??
anl a,#07h?????????? ;取ch3ch2ch1的值???
cjne a,#07h,JS???? ;若a中數(shù)值為07h,則速度已為0,
ljmp START????? ?? ;若速度為0,則程序回到開始程序,不再減速,以防出錯
JS:
mov a,P2
inc a???
mov P2,a?? ? ;減速500rpm(參考電機驅(qū)動器說明中的多段速度選擇部分)
lcall XIANSHI?????? ;顯示設(shè)定的速度
ljmp START?? ;執(zhí)行完啟動程序后,回到檢測按鍵狀態(tài)程序
TINGZHI: ;?停止程序
LCALL YANSHI? ;調(diào)用延時子程序,目的:軟件消除按鍵抖動
JNB P0.5,TING
LJMP START??? ;軟件消抖后,若p0.0為1,則認為按鍵未按下,回到檢測按鍵狀態(tài)程序
TING:??
setb p0.6??????? ;p0.6接R/S端,為1,則與COM端斷開
lcall PANTING??? ? ;調(diào)用判停程序,若能從中返回,說明電機已停
LJMP START???? ;執(zhí)行完啟動程序后,回到檢測按鍵狀態(tài)程序
YANSHI: ;延時10ms,這是一個子程序,功能是延時10毫秒
mov a,#0????????? ;對累加器a置零,延時用
y:???
mov r1,#00h????? ? ;對寄存器r1置零,延時用
inc r1
cjne r1,#0ffh,y??? ;延時1ms
inc a
cjne a,#10,y????? ;延時10×1=10ms
ret
PANTING: ;判停程序,這是一個子程序,若能從判停程序中返回,則說明電機已停
jnb p2.4,yanshi250ms ;若speed端為0,則進入延時程序
ajmp PANTING?? ;若speed端為1,則返回PANTING,等待speed端出現(xiàn)0電平
yanshi250ms:
clr p2.6??????????? ;允許對計數(shù)器置數(shù)
mov p3,#08h???????? ?? ;對計數(shù)器置入數(shù)8
setb p2.6??????? ??? ;計數(shù)器開始計數(shù)
mov a,#0?????????? ? ;對累加器a置零,延時用
y250:???
mov r1,#00h???????? ;對寄存器r1置零,延時用
inc r1
jb p2.5,PANTING??? ? ;若期間Tc為1,則電機未停,返回PANTING,繼續(xù)判斷
cjne r1,#0ffh,y250???? ;延時1ms
inc a
cjne a,#250,y250????? ;延時250ms,
ret???
;若至延時結(jié)束Tc一直不改變狀態(tài),則說明speed端口無脈沖輸出,認為電機停轉(zhuǎn),程序
;返回。
;在電機停轉(zhuǎn)之前,單片機不響應(yīng)按鍵狀態(tài)的改變。
XIANSHI: ;顯示程序,這是一個子程序
mov a,p2??????????? ? ;將當(dāng)前的速度設(shè)定值讀入a中
anl a,#07h???????? ? ;取ch3ch2ch1的值,存入a中
mov b,#4
mul ab????? ;取得低位速度值對應(yīng)的相對地址,存入a中
add a,r3???????????? ;得到低位字符地址,放在a中
mov scon,#00h????? ? ;初始化串行口方式0
mov r2,#0?????????? ;利用r2來控制顯示字符數(shù)
mov dptr,#tab???? ?? ;字形表的入口地址
mov r3,a??????????? ;低位速度值地址存入r3
?x:????? add a,r2??? ;利用a與r2的和獲得字符地址
???????? movc a,@a+dptr??? ;查表獲得字型碼,放在a中
???????? mov sbuf,a????????? ;串口顯示
???? l:? jnb ti,l??? ;等待發(fā)送完畢
???????? clr ti???? ;發(fā)送標志ti清零
???????? inc r2
???????? mov a,r3
???????? cjne? r2,#4,x??? ;發(fā)送四個字符
???????? ret
tab:?? db 03h,03h,49h,0dh
????? db 03h,03h,03h,0dh
????? db 03h,03h,49h,27h
????? db 03h,03h,03h,27h
????? db 03h,03h,49h,9fh
????? db 03h,03h,03h,9fh
????? db 03h,03h,49h,0ffh
????? db 03h,0ffh,0ffh,0ffh
END
收藏