?? 遙控電機程序, 按遙控器0-9步進電機正轉0-9步,按遙控器11-19步進電器分別反轉.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0039)http://www.8951.com/TEST/TEST/tl007.htm -->
<HTML><HEAD><TITLE>單片機通信</TITLE><LINK
href="遙控電機程序, 按遙控器0-9步進電機正轉0-9步,按遙控器11-19步進電器分別反轉.files/gpszx.css" type=text/css
rel=stylesheet><LINK href="../index.files/gpszx.css" type=text/css
rel=stylesheet>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2900.2523" name=GENERATOR>
<META content=FrontPage.Editor.Document name=ProgId></HEAD>
<BODY>
<DIV align=center>
<TABLE height=356 cellSpacing=0 cellPadding=0 width=769 bgColor=#66ccff
borderColorLight=#000000 border=0>
<TBODY>
<TR>
<TD align=middle width=752 bgColor=#ffffff colSpan=5 height=356>
<P align=left><FONT font><FONT color=#ff0000>單片機提高</FONT><FONT
color=#ff0000><IMG height=11
src="遙控電機程序, 按遙控器0-9步進電機正轉0-9步,按遙控器11-19步進電器分別反轉.files/gif091.gif"
width=28 border=0></FONT><FONT color=#454545>WWW.51C51.COM
自學單片機的網站:作中國單片機編程技術普及推廣第一站!倚天一出寶刀屠龍</FONT></FONT><IMG height=100
src="遙控電機程序, 按遙控器0-9步進電機正轉0-9步,按遙控器11-19步進電器分別反轉.files/titou2.jpg"
width=760 border=0> <FONT color=#454545 font><A
href="http://www.8951.com/index.htm">返回主頁 給我留言</A> <A
href="http://www.8951.com/jiaoxue.htm">單片機教學</A> <A
href="http://www.8951.com/tigao.htm">單片機提高</A> <A
href="http://www.8951.com/pinzhi.htm">品質技術</A> <A
href="http://www.8951.com/1000/WANGZHI.HTM">單片機網址</A> <A
href="http://www.8951.com/down/down.htm">軟件下載</A> <A
href="http://www.8951.com/yejin/yejin.htm">學液晶顯示</A> <A
href="http://www.8951.com/chanpin.htm">產品介紹</A> <A
href="http://www.8951.com/10/huikan.htm">如何購買</A></FONT><FONT size=2>
<BR><BR><BR>;遙控電機程序,
按遙控器0-9步進電機正轉0-9步,按遙控器11-19步進電器分別反轉<BR>;0-9步,同時數碼管分別顯示當前的數字!<BR>;***************************************************************************<BR>;*
E-mail:sxj1974@163.com (51c51 test web) 51單片機學習網,自學單片機的網站
*<BR>;* Create by :石學軍 <A
href="http://www.51c51.com/">http://www.51c51.com/</A>
www.8951.com 更多例程請登陸網站
*<BR>;***************************************************************************<BR>org
00h<BR>JMP MAIN<BR>ORG 30H<BR>MAIN:<BR>MOV P1,#0FFH<BR>MOV P2,#0FFH<BR>MOV
P3,#0FFH<BR>START:<BR>JB P3.7,$ ;等待遙控信號出現<BR>SB:<BR>MOV R4,#8
;8毫秒為高電平錯誤<BR>SBA:<BR>MOV R5,#250<BR>SBB:<BR>JB P3.7,SXB1<BR>DJNZ
R5,SBB<BR>DJNZ R4,SBA<BR>MOV R4,#2<BR>JMP SBC<BR>SXB1:<BR>MOV
R5,#5<BR>SXB2: ;去掉20US的尖峰干擾信號<BR>JNB P3.7,SBB<BR>DJNZ R5,SXB2<BR>JMP
START<BR>SBC:<BR>MOV R5,#250<BR>SB1:<BR>JB P3.7,SB2
;2MS內不為高電平錯誤(監測9MS的低電平引導碼)<BR>DJNZ R5,SB1<BR>DJNZ R4,SBC<BR>JMP
START<BR>SB2: ;去掉20US的尖峰干擾信號<BR>MOV R5,#5<BR>SB2_A:<BR>JNB
P3.7,SB1<BR>DJNZ R5,SB2_A<BR>MOV R4,#3<BR>SB2_1:<BR>MOV R5,#250<BR>SB3:
;監測4.5MS高電平,如3MS內出現低電平錯誤<BR>JNB P3.7,SXC<BR>DJNZ R5,SB3<BR>DJNZ
R4,SB2_1<BR>MOV R4,#2<BR>JMP SB3_1<BR>SXC: ;去掉20US的尖峰干擾信號<BR>MOV
R5,#5<BR>SXC1:<BR>JB P3.7,SB3<BR>DJNZ R5,SXC1<BR>JMP START<BR>SB3_1:
;監測4.5MS高電平,如5MS內不為低電平錯誤<BR>MOV R5,#250<BR>SB3_2:<BR>JNB P3.7,SB4<BR>DJNZ
R5,SB3_2<BR>DJNZ R4,SB3_1<BR>JMP START<BR>SB4: ;去掉20US的尖峰干擾信號<BR>MOV
R5,#5<BR>SB4_1:<BR>JB P3.7,SB3_2<BR>DJNZ R5,SB4_1<BR>MOV R1,#1AH
;設定1AH為起始RAM區<BR>MOV R2,#4<BR>PP: MOV R3,#8<BR>JJJJ:<BR>MOV
R5,#250<BR>JJJJ2: ;1MS內不為低電平錯誤<BR>JB P3.7,JJJJ3<BR>DJNZ R5,JJJJ2<BR>JMP
START<BR>JJJJ3:<BR>LCALL YS1 ;高電平開始后用882微秒的時間尺去判斷信號此時的高低電平狀態<BR>MOV C,P3.7
;將P3.7引腳此時的電平狀態0或1存入C中<BR>JNC UUU ;如果為0就跳轉到UUU<BR>MOV
R5,#250<BR>JJJJ4:<BR>JNB P3.7,UUU<BR>NOP<BR>DJNZ R5,JJJJ4<BR>JMP
START<BR>UUU: MOV A,@R1 ;將R1中地址的給A<BR>RRC A ;將C中的值0或1移入A中的最低位<BR>MOV @R1,A
;將A中的數暫時存放在R1中<BR>DJNZ R3,JJJJ ;接收地址碼的高8位<BR>INC R1
;對R1中的值加1,換成下一個RAM<BR>DJNZ R2,PP
;接收完16位地址碼和8位數據碼和8位數據反碼,存放在1AH/1BH/1CH/1DH的RAM中<BR>;以下對代碼是否正確和定義進行識別<BR>MOV
A,1AH ;比較高8位地址碼<BR>XRL A,#00000000B ;判斷1AH的值是否等于00000000,相等的話A為0<BR>JNZ
EXIT ;如果不相等說明解碼失敗退出解碼程序<BR>MOV A,1BH ;比較低8位地址<BR>XRL A,#11111111B
;再判斷高8位地址是否正確<BR>JNZ EXIT ;如果不相等說明解碼失敗退出解碼程序<BR>LCALL YS3<BR>MOV A,1CH
;比較數據碼和數據反碼是否正確?<BR>CPL A<BR>XRL A,1DH ;將1CH的值取反后和1DH比較
不同則無效丟棄,核對數據是否準確<BR>JNZ EXIT ;如果不相等說明解碼失敗退出解碼程序<BR>LCALL YS3<BR>CLR P2.6
;選中數碼管<BR>CLR P3.3 ;解碼成功喇叭響?<BR>AJMP BIJIAO<BR>;判斷在118毫秒內是否有連發碼<BR>AA: MOV
R1,#25<BR>XX: ACALL YS2<BR>JNB P3.7,HH ;跳轉到判斷連發代碼是否正確的程序段<BR>DJNZ
R1,XX<BR>EXIT: ;對所有端口清零<BR><BR>AJMP START<BR>;連發碼判斷程序段-----------<BR>HH:
MOV R6,#4<BR>S: ACALL YS1 ;調用882微秒延時子程序<BR>JB P3.7,EXIT
;延時882微秒后判斷P3.7腳是否出現高電平如果有就退出解碼程序<BR>DJNZ R6, S
;重復4次,目的是確認連發碼的低電平信號波形<BR>JNB P3.7, $ ;等待高電?<BR>LCALL YS3<BR>AJMP
AA<BR><BR>BIJIAO:<BR>MOV R0,#18 ;一共18個按鍵<BR>MOV DPTR,#TAB_REM
;遙控鍵值查表<BR>LOOKUP_1:<BR>MOV A,R0 ;查表偏移量<BR>MOVC A,@A+DPTR<BR>XRL A,1cH
;比較鍵值<BR>JZ REM_BAK0 ;相等轉移<BR>DJNZ R0,LOOKUP_1 ;直到18個健比較完畢<BR>JMP EXIT
;都不對退出<BR>REM_BAK0: ;鍵值處理<BR>MOV A,R0 ;R0<BR>MOV R1,A ;<BR>SUBB A,#9
;如果大于9則反轉并將值減去9<BR>JC REM_BAK1 ;小余或等于9到正轉<BR>INC A ;加1<BR>MOV R1,A ;
查顯示碼表<BR>MOV DPTR,#TABLE1 ;<BR>MOVC A,@A+DPTR<BR>MOV P0,A ;送顯示<BR>CLR P2.6
;開顯示<BR><BR>REM_REV: ;反轉程序<BR>CALL REV<BR>CALL delay ;轉速<BR>DJNZ
R1,REM_REV ;轉動的步數到了停止<BR>JMP AA<BR>REM_BAK1: ;正轉程序<BR>NOP<BR>MOV A,R1
;按鍵數值判斷執<BR>MOV DPTR,#TABLE1 ; 查顯示碼表<BR>MOVC A,@A+DPTR<BR>MOV P0,A
;送顯示<BR>CLR P2.6 ;開顯示<BR><BR>REM_FOR: ;正轉<BR>CALL FOR<BR>CALL
DELAY<BR>DJNZ R1,REM_FOR<BR>JMP AA<BR>for: mov r0,#00h
;正轉到tab取碼指針初值<BR>for1:mov a,r0 ;取碼<BR>mov dptr,#table ;<BR>movc
a,@a+dptr<BR>jz FOREXT ;是否到了結束碼00h<BR>cpl a ;把acc反向<BR>mov p1,a
;輸出到p1開始正轉<BR>call delay ;轉動的速度<BR>inc r0 ;取下一個碼<BR>jmp for1
;繼續正轉<BR>rev:mov r0,#05h ;反轉到tab取碼指針初值<BR>rev1:mov a,r0<BR>mov dptr,#table
;取碼<BR>movc a,@a+table<BR>jz FOREXT ;是否到了結束碼00h<BR>cpl a ;把acc反向<BR>mov
p1,a ;輸出到p1開始反轉<BR>call delay ;轉動的速度<BR>inc r0 ;取下一個碼<BR>jmp rev1
;繼續反轉<BR>FOREXT:<BR>RET<BR><BR>YS1: MOV R4,#20 ;延時子程序1,精確延時882微秒<BR>D1:
MOV R5,#20<BR>DJNZ R5,$<BR>DJNZ R4,D1<BR>RET<BR>YS2: MOV R4,#10
;延時子程序2,精確延時4740微秒<BR>D2: MOV R5,#235<BR>DJNZ R5,$<BR>DJNZ
R4,D2<BR>RET<BR>YS3: MOV R4,#2 ;延時程序3,精確延時1000微秒<BR>D3:MOV R5,#248<BR>DJNZ
R5,$<BR>DJNZ R4,D3<BR>RET<BR><BR>TAB_REM: ;遙控的鍵值<BR>DB 00H<BR>DB
10H,03H,01H,06H,09H,1DH,1FH,0DH,19H<BR>DB
11H,15H,17H,12H,16H,4CH,40H,48H,04H<BR><BR>delay: mov r3,#40
;步進電機的轉速20ms<BR>m3: mov r2,#248<BR>djnz r2,$<BR>djnz
r3,m3<BR>ret<BR>TABLE1:db
28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h;數碼管的碼表<BR>;0 1 2 3 4 5 6 7 8
9<BR>table:<BR>db 03h,09h,0ch,06h ;正轉表<BR>db 00 ;正轉結束<BR>db
03h,06h,0ch,09h ;反轉<BR>db 00
;反轉結束<BR>end<BR><BR></FONT></P></TD></TR></TBODY></TABLE></DIV></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -