|
0.png (51.62 KB, 下載次數(shù): 50)
下載附件
2016-9-28 13:42 上傳
所有資料下載:
遙控車雙機(jī)通信仿真.rar
(27.62 KB, 下載次數(shù): 50)
2016-9-28 13:41 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
下面對(duì)本工廠做一些簡單的介紹,希望大家指導(dǎo):
從U1發(fā)送數(shù)據(jù)到U2,U2收到后按要求處理數(shù)據(jù),返回多個(gè)數(shù)值,并執(zhí)行相應(yīng)動(dòng)作
現(xiàn)在下行命令數(shù)據(jù)沒問題,U2的動(dòng)作也對(duì)
可是U2返回的數(shù)據(jù)串總是不對(duì)
通信方式為:
1、先下行(U1至U2),再上行
上行數(shù)據(jù)構(gòu)成(0F0H+數(shù)據(jù)1+數(shù)據(jù)2+0FFH)
2、由U2中斷引起上行數(shù)據(jù)發(fā)送
上行數(shù)據(jù)構(gòu)成(0F7H+數(shù)據(jù)A+數(shù)據(jù)L+數(shù)據(jù)R+0FFH)
U1收到數(shù)據(jù)根據(jù)接收到的第一個(gè)數(shù)據(jù)判斷為哪種類型,執(zhí)行相應(yīng)的顯示
其中如果發(fā)送0F0H數(shù)據(jù)段過程中遇到需要0F7H數(shù)據(jù)傳輸,后者優(yōu)先發(fā)送,整體數(shù)據(jù)發(fā)送完成后繼續(xù)0F0H數(shù)據(jù)
U1接收數(shù)據(jù)結(jié)束后,經(jīng)過數(shù)字處理
將數(shù)據(jù)A修改到第5行
將數(shù)據(jù)L修改到第6行
將數(shù)據(jù)R修改到第7行
經(jīng)過位跳轉(zhuǎn)
將數(shù)據(jù)1、2中的信息修改到第1、2、3行
第0行無變化
下面是我的測(cè)試電路,及程序,希望大家能夠給予幫助,謝謝
0.png (286.35 KB, 下載次數(shù): 72)
下載附件
2016-9-28 13:38 上傳
- ;***************************************************************************************************
- C_FLAG DATA 20H
- W BIT 00H
- UP BIT 01H
- DOWN BIT 02H
- LEFT BIT 03H
- RIGH BIT 04H
- UT BIT 05H
- FB BIT 06H
- GO_STO BIT 07H
- R_FLAG DATA 21H
- MAX BIT 08H
- MIN BIT 09H
- SPUP BIT 0AH
- SPDOW BIT 0BH
- COMD DATA 22H
- SPC BIT 13H
- STC BIT 12H
- CSP BIT 11H
- CHF BIT 10H
- C_CLKH DATA 23H
- C_CLKL DATA 24H
- SPEDL DATA 25H
- SPEDR DATA 26H
- COUNT DATA 27H
- TX_CT DATA 28H
- TX_DT DATA 29H
- MAXSP SET 255
- NORSP SET 1275
- MINSP SET 3825
- GATE EQU P3.4
- SFB EQU P1.0
- SSP0 EQU P1.1
- SSP1 EQU P1.2
- SSP2 EQU P1.3
- CLK EQU P1.4
- ;====================================================================================================
- ;主程序區(qū)
- ;----------------------------------------------------------------------------------------------------
- ;復(fù)位矢量和中斷矢量的設(shè)置
- ORG 0000H
- JMP MAIN
- ORG 0003H
- JMP EXT0
- ORG 000BH
- JMP T0_ISR
-
- ORG 0023H
- JMP UART1
- ;主程序入口和主程序開始存儲(chǔ)之處
- MAIN: MOV SP,#2FH ;初始化堆棧
- MOV IE,#00010011B ;設(shè)置中斷使能,EA、T2、ES、T1、I1、T0、I0
- MOV IP,#00000001B ;中斷優(yōu)先
- MOV TCON,#00000001B ;中斷觸發(fā)形態(tài),1為下降沿需軟件復(fù)位
- ;初始化串行通信
- MOV TMOD,#21H ;T1工作在MODE2,T0工作在MODE1
- MOV SCON,#50H ;UART工作在MODE1
- MOV TH1,#0F3H ;波特率2400
- SETB TR1 ;啟動(dòng)T1
- MOV IE,#10010011B ;中斷使能開啟
- ;初始化8253
- MOV P1,#0FFH
- MOV DPTR,#13FFH
- MOV A,#00010100B ;設(shè)置8253計(jì)數(shù)器00控制字,2模式7FH初值(分頻器)
- MOVX @DPTR,A
- MOV DPTR,#10FFH
- MOV A,#01111111B ;低八位為7FH
- MOVX @DPTR,A
- MOV DPTR,#13FFH
- MOV A,#01010110B ;設(shè)置8253計(jì)數(shù)器01控制字,2模式0FFH初值(計(jì)數(shù)器)
- MOVX @DPTR,A
- MOV DPTR,#11FFH
- MOV A,#11111111B ;低八位為FFH
- MOVX @DPTR,A
- MOV DPTR,#13FFH
- MOV A,#10010110B ;設(shè)置8253計(jì)數(shù)器02控制字,2模式0FFH初值(計(jì)數(shù)器)
- MOVX @DPTR,A
- MOV DPTR,#12FFH
- MOV A,#11111111B ;低八位為FFH
- MOVX @DPTR,A
-
- ;設(shè)置狀態(tài)為原地等待
- WAIT0: MOV C_FLAG,#0
- SETB W
- MOV R_FLAG,#0
- CLR CLK
- CLR TR0
- MOV TL0,#0EH
- MOV C_CLKL,#0EH
- MOV TH0,#0F1H
- MOV C_CLKH,#0F1H
- MOV COUNT,#15
-
- MOV TX_CT,#4
- MOV A,TX_DT
- JZ C_OUT1
- LJMP WAIT1
- C_OUT1: MOV SBUF,#0F7H
- DEC TX_CT
- WAIT1: JB UP,STA_P
- LJMP WAIT1
- STA_P: SETB TR0
- WAIT2: JB DOWN,WAIT3
- LJMP WAIT2
- WAIT3: JB MIN,WAIT0
- LJMP WAIT3
-
- ; JMP [ DISCUZ_CODE_40 ]nbsp; ;暫停,進(jìn)入空閑狀態(tài)
- ;------------------------------------------------------------------------------------------------------
- EXT0:
- CLR GATE
- PUSH ACC
- MOV DPTR,#11FFH
- MOVX A,@DPTR
- MOV R2,A
- MOV DPTR,#12FFH
- MOVX A,@DPTR
- MOV R3,A
- MOV DPTR,#13FFH
- MOV A,#01010110B ;設(shè)置8253計(jì)數(shù)器01控制字,2模式0FFH初值(計(jì)數(shù)器)
- MOVX @DPTR,A
- MOV DPTR,#11FFH
- MOV A,#10101111B ;低八位為AFH
- MOVX @DPTR,A
- MOV DPTR,#13FFH
- MOV A,#10010110B ;設(shè)置8253計(jì)數(shù)器02控制字,2模式0FFH初值(計(jì)數(shù)器)
- MOVX @DPTR,A
- MOV DPTR,#12FFH
- MOV A,#10111111B ;低八位為BFH
- MOVX @DPTR,A
- SETB GATE
- MOV A,#0AFH
- CLR C
- SUBB A,R2
- MOV SPEDL,A
- MOV A,#0BFH
- CLR C
- SUBB A,R3
- MOV SPEDR,A
-
- MOV TX_DT,#5
- MOV SBUF,#0F0H
- DEC TX_DT
- POP ACC
- RETI
- T0_ISR: PUSH ACC
- MOV TL0,C_CLKL
- MOV TH0,C_CLKH
- CPL CLK
- JNB UP,DOWS
- MOV A,COUNT
- CJNE A,#5,SSP
- CLR UP
- SETB W
- CLR SPUP
- LJMP C_OUT
- SSP: SETB SPUP
- LJMP S_ACT
- DOWS: JNB DOWN,SP_UP
- SETB SPDOW
- LJMP S_ACT
- SP_UP: JNB SPUP,SP_DOW
- LJMP S_ACT
- SP_DOW: JNB SPDOW,RELD
- LJMP S_ACT
- RELD: POP ACC
- RETI
- UART1: PUSH ACC
- JB RI,CH_C
- CLR TI
- MOV A,TX_DT
- CJNE A,#0,T_DA ;測(cè)速數(shù)據(jù)是否傳輸結(jié)束,否則繼續(xù)傳輸測(cè)速數(shù)據(jù)
- MOV A,TX_CT
- CJNE A,#4,NCSA ;判斷返回狀態(tài)是否發(fā)送過開始信號(hào)
- MOV SBUF,#0F7H
- DEC TX_CT
- POP ACC
- RETI
- NCSA: CJNE A,#3,NCD1 ;判斷返回狀態(tài)是否發(fā)送過第一組信息
- MOV SBUF,C_FLAG
- DEC TX_CT
- POP ACC
- RETI
- NCD1: CJNE A,#2,NCD2 ;判斷返回狀態(tài)是否發(fā)送過第二組信息
- MOV SBUF,R_FLAG
- DEC TX_CT
- POP ACC
- RETI
- NCD2: CJNE A,#1,NED ;判斷返回狀態(tài)是否發(fā)送過結(jié)束信號(hào)
- MOV SBUF,#0FFH
- DEC TX_CT
- POP ACC
- RETI
- T_DA: CJNE A,#5,NDST ;判斷傳輸數(shù)據(jù)是否發(fā)送過開始信號(hào)
- MOV SBUF,#0F0H
- DEC TX_DT
- POP ACC
- RETI
- NDST: CJNE A,#4,NDSA ;判斷傳輸數(shù)據(jù)是否發(fā)送過加速度空信號(hào)
- MOV SBUF,#089H
- DEC TX_DT
- POP ACC
- RETI
- NDSA: CJNE A,#3,NDSL ;判斷傳輸數(shù)據(jù)是否發(fā)送過第一組信息
- MOV SBUF,SPEDL
- DEC TX_DT
- POP ACC
- RETI
- NDSL: CJNE A,#2,NDSR ;判斷傳輸數(shù)據(jù)是否發(fā)送過第二組信息
- MOV SBUF,SPEDR
- DEC TX_DT
- POP ACC
- RETI
- NDSR: CJNE A,#1,NED ;判斷傳輸數(shù)據(jù)是否發(fā)送過結(jié)束信號(hào)
- MOV SBUF,#0FFH
- DEC TX_DT
- NED: POP ACC
- RETI
-
- CH_C: CLR RI
- MOV COMD,SBUF ;存儲(chǔ)指令
- MOV A,COMD
- JB GO_STO,N_GO ;判斷是否為運(yùn)動(dòng)狀態(tài),是則跳過啟動(dòng)指令
- ;啟動(dòng)停車判斷程序段
- CJNE A,#0CH,N_GO ;判斷啟動(dòng)指令
- ANL C_FLAG,#11000000B ;設(shè)置啟動(dòng)狀態(tài)
- SETB UP
- SETB GO_STO
- SETB MIN
- SETB TR0
- LJMP T_ACT
- ;LJMP ACT ;啟動(dòng)起步程序
- N_GO: CJNE A,#08H,N_STO ;判斷停車指令
- ANL C_FLAG,#11000000B ;設(shè)置停車狀態(tài)
- SETB DOWN
- LJMP T_ACT
- ;LJMP ACT ;啟動(dòng)停車程序
- ;方向判斷及修改程序段
- N_STO: CJNE A,#07H,N_FB ;判斷反向指令
- CPL FB ;修改方向
- CPL SFB ;修改方向控制管腳
- LJMP R_ACT ;跳至狀態(tài)返回程序
- ;速度修改判斷程序段
- N_FB: CJNE A,#05H,N_FA ;判斷是否為加速指令
- SETB SPUP ;設(shè)置加速狀態(tài)
- LJMP S_ACT ;跳至速度修改程序
- N_FA: CJNE A,#04H,N_SL ;判斷是否為減速指令
- SETB SPDOW ;設(shè)置減速狀態(tài)
- LJMP S_ACT ;跳至速度修改程序
- ;轉(zhuǎn)向判斷程序段
- N_SL: CJNE A,#03H,N_TL ;判斷是否為左轉(zhuǎn)指令
- JNB LEFT,CHRL ;判斷是否處于左轉(zhuǎn)狀態(tài)
- JB UT,NCHL ;判斷是否為左急轉(zhuǎn),是則無修改
- SETB UT ;修改為左急轉(zhuǎn)
- NCHL: LJMP T_ACT ;跳至轉(zhuǎn)向修改
- CHRL: JNB RIGH,CHL ;判斷是否為右轉(zhuǎn)狀態(tài),不是則修改為左轉(zhuǎn)狀態(tài)
- JNB UT,CHSTL ;判斷是否為右急轉(zhuǎn),是則改為右轉(zhuǎn)狀態(tài)
- CLR UT
- LJMP T_ACT
- CHSTL: CLR RIGH ;不是則改為直行狀態(tài)
- LJMP T_ACT
- CHL: SETB LEFT
- LJMP T_ACT
- N_TL: CJNE A,#01H,T_ACT ;判斷是否為右轉(zhuǎn)指令
- JNB RIGH,CHLR
- JB UT,NCHR
- SETB UT
- NCHR: LJMP T_ACT
- CHLR: JNB LEFT,CHR
- JNB UT,CHSTR
- CLR UT
- LJMP T_ACT
- CHSTR: CLR LEFT
- LJMP T_ACT
- CHR: SETB RIGH
- LJMP T_ACT
-
- ;速度修改程序
- S_ACT: JBC SPUP,C_FA ;判斷是否為加速
- JBC SPDOW,C_SL ;判斷是否為減速
- POP ACC
- RETI ;均不是,指令有誤,中斷結(jié)束
- C_FA: JB MAX,R_ACT ;判斷是否為已為最大速度,是則跳過速度調(diào)整
- DEC COUNT ;不是則速度降一級(jí)
- DJNZ COUNT,S_FA ;判斷是否已達(dá)到最大速度,是則設(shè)置最大速度狀態(tài)
- SETB MAX
- CLR MIN
- S_FA: INC COUNT
- LCALL C_SP ;執(zhí)行速度修改程序(修改計(jì)數(shù)器初值)
- POP ACC
- RETI
-
- C_SL: JB MIN,R_ACT ;判斷是否為已為最小速度,是則跳過速度調(diào)整
- INC COUNT ;不是則速度升一級(jí)
- MOV A,COUNT
- CJNE A,#0FH,S_SL ;判斷是否已達(dá)到最小速度,是則設(shè)置最小速度狀態(tài)
- SETB MIN
- CLR MAX
- S_SL: LCALL C_SP ;執(zhí)行速度修改程序(修改計(jì)數(shù)器初值)
- POP ACC
- RETI
-
- ;轉(zhuǎn)向修改程序
- T_ACT: JB LEFT,TL_ACT ;判斷是否為左轉(zhuǎn)
- JB RIGH,TR_ACT ;判斷是否為右轉(zhuǎn)
- ANL P1,#11110001B ;修改為直行
- LJMP R_ACT
- TL_ACT: MOV A,P1 ;讀取現(xiàn)有狀態(tài)
- ANL A,#11110001B ;清除
- ADD A,#00000010B ;設(shè)為左轉(zhuǎn)
- JNB UT,T_OUT ;判斷是否為急轉(zhuǎn),不是則跳至狀態(tài)輸出
- LJMP TU_ACT ;跳至急轉(zhuǎn)設(shè)置
- TR_ACT: MOV A,P1
- ANL A,#11110001B
- ADD A,#00000100B ;設(shè)為右轉(zhuǎn)
- JNB UT,T_OUT
- TU_ACT: ADD A,#00001000B ;設(shè)為急轉(zhuǎn)
- T_OUT: MOV P1,A ;輸出狀態(tài)
-
- R_ACT: MOV TX_CT,#4
- MOV A,TX_DT
- JZ C_OUT
- POP ACC
- RETI
- C_OUT: MOV SBUF,#0F7H
- DEC TX_CT
- POP ACC
- RETI
-
- C_SP: MOV A,COUNT
- MOV B,#0FFH
- MUL AB
- PUSH ACC
- MOV A,#0FFH
- CLR C
- SUBB A,B
- MOV C_CLKH,A
- POP B
- MOV A,#0FFH
- CLR C
- SUBB A,B
- MOV C_CLKL,A
- RET
- END
復(fù)制代碼- ;***************************************************************************************************
- C_FLAG DATA 20H
- W BIT 00H
- UP BIT 01H
- DOWN BIT 02H
- LEFT BIT 03H
- RIGH BIT 04H
- UT BIT 05H
- FB BIT 06H
- GO_STO BIT 07H
- R_FLAG DATA 21H
- MAX BIT 08H
- MIN BIT 09H
- SPUP BIT 0AH
- SPDOW BIT 0BH
- TX_FLAG DATA 22H
- LD_R BIT 10H ;串行數(shù)據(jù)類型,返回信號(hào)
- LD_D BIT 11H ;串行數(shù)據(jù)類型,行駛數(shù)據(jù)
- LD_BUF0 DATA 23H
- LD_BUF1 DATA 24H
- LD_BUF2 DATA 25H
- A_BUF DATA 26H
- S_BUF DATA 27H
- SPEDL DATA 28H
- SPEDR DATA 29H
- SPEDA DATA 2AH
- ;LCD部分控制位及變量
- TCD BIT P2.0
- TWR BIT P2.1
- TRD BIT P2.2
- P_X EQU 42H ;0=<X=<15
- P_Y EQU 43H ;0=<Y=<7
- CHAR EQU 44H ;'0'=10H
- END_C EQU 45H ;STR.END
- ;====================================================================================================
- ;主程序區(qū)
- ;----------------------------------------------------------------------------------------------------
- ;復(fù)位矢量和中斷矢量的設(shè)置
- ORG 0000H
- JMP MAIN
- ORG 0003H
- JMP EXT0
- ORG 000BH
- JMP T0_ISR
- ORG 0023H
- JMP UART1
- ORG 0030H
- ;主程序入口和主程序開始存儲(chǔ)之處
- MAIN: MOV SP,#6FH ;初始化堆棧
- ;MOV IE,#00010011B ;設(shè)置中斷使能,EA、T2、ES、T1、I1、T0、I0
- MOV IE,#00000011B
- MOV IP,#00000001B ;中斷優(yōu)先
- MOV TCON,#00000001B ;中斷觸發(fā)形態(tài),1為下降沿需軟件復(fù)位
- ;初始化串行通信
- MOV TMOD,#21H ;T1工作在MODE2,T0工作在MODE1
- MOV SCON,#50H ;UART工作在MODE1
- MOV TH1,#0F3H ;波特率2400
- SETB TR1 ;啟動(dòng)T1
- ;MOV IE,#10010011B ;中斷使能開啟
- MOV IE,#10000011B
- MOV R1,#LD_BUF0
- ;初始化LCD
- LCALL LCDINT
- LCALL CLEAR ;CLEAR RAM
- MOV P_X,#0 ;在位置00處顯示TEMP字符串
- MOV P_Y,#0
- MOV DPTR,#TEMP
- MOV END_C,#3FH
- LCALL PWSTR
- MOV DPTR,#W_S
- LCALL SH_10
- MOV DPTR,#STR_S
- LCALL SH_20
- MOV DPTR,#GO_S
- LCALL SH_28
- MOV P_X,#0 ;在位置50處顯示A_STR字符串
- MOV P_Y,#5
- MOV DPTR,#A_STR
- MOV END_C,#3FH
- LCALL PWSTR
- MOV P_X,#0 ;在位置60處顯示L_STR字符串
- MOV P_Y,#6
- MOV DPTR,#L_STR
- MOV END_C,#3FH
- LCALL PWSTR
- MOV P_X,#0 ;在位置70處顯示R_STR字符串
- MOV P_Y,#7
- MOV DPTR,#R_STR
- MOV END_C,#3FH
- LCALL PWSTR
- MOV P_X,#0 ;在位置40處顯示'
- 字符
- MOV P_Y,#4
- MOV CHAR,#04H
- LCALL PWCH
- JMP $
- CH_P: MOV A,P_Y ;位置修改
- MOV B,#10H
- MUL AB
- ADD A,P_X
- MOV R2,A
- MOV R3,#0
- MOV R4,#24H
- LCALL PWD2
- RET
- PWCH: LCALL CH_P ;在指定位置顯示字符
- MOV R4,#0C0H
- MOV R3,CHAR
- LCALL PWD1
- RET
- PWD2: MOV A,R2
- LCALL PWD
- PWD1: MOV A,R3
- LCALL PWD
- PWC: MOV A,R4
- SJMP PW
- PWD: CLR TCD
- PW: CLR TWR
- MOV P0,A
- SETB TWR
- SETB TCD
- RET
- PR: CLR TCD
- ORL P0,#0FFH
- CLR TRD
- MOV A,P0
- MOV P0,#0FFH
- RET
- CLEAR: MOV R2,#00H ;clear ram
- MOV R3,#00H
- MOV R4,#24H
- LCALL PWD2
- MOV R4,#0B0H
- LCALL PWC
- MOV R2,#1FH
- CLEAR1: MOV R3,#0FFH
- CLEAR2: MOV A,#00H
- LCALL PWD
- DJNZ R3,CLEAR2
- DJNZ R2,CLEAR1
- MOV R4,#0B2H
- LCALL PWC
- RET
- PWSTR: LCALL CH_P ;在指定位置為起始顯示字符串
- MOV R4,#0B0H
- LCALL PWC
- PWSTR1: MOV A,#0 ;依次顯示字符串內(nèi)字符
- MOVC A,@A+DPTR
- CJNE A,END_C,PWSTR2
- MOV R4,#0B2H
- LCALL PWC
- RET
- PWSTR2: INC DPTR
- LCALL PWD
- LJMP PWSTR1
- LCDINT: MOV R2,#00H
- MOV R3,#00H
- MOV R4,#40H
- LCALL PWD2
- MOV R2,#10H
- MOV R3,#00H
- MOV R4,#41H
- LCALL PWD2
- ;MOV R2,#00H
- ;MOV R3,#08H
- ;MOV R4,#42H
- ;LCALL PWD2
- ;MOV R2,#20H
- ;MOV R3,#00H
- ;MOV R4,#43H
- ;LCALL PWD2
- MOV R4,#0A7H
- LCALL PWC
- MOV R4,#80H
- LCALL PWC
- MOV R4,#94H
- LCALL PWC
- RET
-
- SH_10: MOV P_X,#0 ;在位置10處顯示字符串
- MOV P_Y,#1
- MOV END_C,#3FH
- LCALL PWSTR
- RET
- SH_18: MOV P_X,#8 ;在位置18處顯示字符串
- MOV P_Y,#1
- MOV END_C,#3FH
- LCALL PWSTR
- RET
- SH_20: MOV P_X,#0 ;在位置20處顯示字符串
- MOV P_Y,#2
- MOV END_C,#3FH
- LCALL PWSTR
- RET
- SH_28: MOV P_X,#8 ;在位置28處顯示字符串
- MOV P_Y,#2
- MOV END_C,#3FH
- LCALL PWSTR
- RET
- SH_30: MOV P_X,#0 ;在位置30處顯示字符串
- MOV P_Y,#3
- MOV END_C,#3FH
- LCALL PWSTR
- RET
-
- DELAY: MOV R7,#0FFH
- D1: NOP
- D2: DJNZ R7,D1
- RET
- DELAY1: MOV R4,#0FFH
- LOP3: LCALL DELAY
- DJNZ R4,LOP3
- RET
- ;------------------------------------------------------------------------------------------------------
- T0_ISR:
-
- RETI
- EXT0: PUSH ACC
- MOV A,P1
- SUBB A,#0F0H
- CJNE A,#0,N_STA ;啟動(dòng)
- JNB GO_STO,S_COM
- POP ACC
- RETI
- S_COM: MOV C_FLAG,#0
- SETB UP
- SETB GO_STO
- ;MOV P_X,#0
- ;MOV P_Y,#1
- ;MOV DPTR,#STA_S
- MOV SBUF,#0CH
- ;LCALL SH_10
- POP ACC
- RETI
- N_STA: JNB GO_STO,N_COM
- CJNE A,#2,N_STO ;停止
- MOV C_FLAG,#0
- SETB DOWN
- CLR GO_STO
- ;MOV P_X,#0
- ;MOV P_Y,#1
- ;MOV DPTR,#STO_S
- MOV SBUF,#08H
- ;LCALL SH_10
- POP ACC
- RETI
- N_STO: CJNE A,#4,N_TL ;左轉(zhuǎn)
- ;MOV C_FLAG,#0
- ;SETB LEFT
- ;MOV P_X,#0
- ;MOV P_Y,#2
- ;MOV DPTR,#TL_S
- MOV SBUF,#03H
- ;LCALL SH_20
- POP ACC
- RETI
- N_TL: CJNE A,#6,N_TR ;右轉(zhuǎn)
- ;MOV C_FLAG,#0
- ;SETB RIGH
- ;MOV P_X,#0
- ;MOV P_Y,#2
- ;MOV DPTR,#TR_S
- MOV SBUF,#01H
- ;LCALL SH_20
- POP ACC
- RETI
- N_TR: CJNE A,#5,N_FB ;正反
- CPL FB
- ;MOV P_X,#8
- ;MOV P_Y,#2
- JB FB,TBACK
- ;MOV DPTR,#GO_S
- MOV SBUF,#07H
- ;LCALL SH_28
- POP ACC
- RETI
- TBACK: ;MOV DPTR,#BA_S
- MOV SBUF,#07H
- ;LCALL SH_28
- POP ACC
- RETI
- N_FB: CJNE A,#1,N_UP ;加速
- ;CLR SPDOW
- ;SETB SPUP
- ;MOV P_X,#8
- ;MOV P_Y,#1
- ;MOV DPTR,#FA_S
- MOV SBUF,#05H
- POP ACC
- RETI
- N_UP: CJNE A,#9,N_COM ;減速
- ;SETB SPDOW
- ;CLR SPUP
- ;MOV P_X,#8
- ;MOV P_Y,#1
- ;MOV DPTR,#SL_S
- MOV SBUF,#04H
- N_COM: POP ACC
- RETI
- UART1: PUSH ACC
- JB RI,UR
- CLR TI
- POP ACC
- RETI
-
- UR: CLR RI
- MOV @R1,SBUF ;把數(shù)據(jù)存入緩沖區(qū)
- MOV R0,#TX_FLAG ;讀入收信狀態(tài)
- CJNE @R0,#0,N_D ;不是接收數(shù)據(jù)狀態(tài),跳至接收數(shù)據(jù)類型判斷
- INC R1 ;指向下一緩存單元
- LJMP BACK
- N_D: CJNE @R1,#0F7H,N_R ;判斷是否為狀態(tài)返回
- MOV @R1,#0 ;緩存單元清除指令數(shù)據(jù)
- SETB LD_R
- LJMP BACK
- N_R: CJNE @R1,#0F0H,N_C ;判斷是否為數(shù)據(jù)上傳
- MOV @R1,#0
- SETB LD_D
- LJMP BACK
- N_C: CJNE @R1,#0FFH,BACK ;判斷是否為傳輸結(jié)束信號(hào)
- MOV @R1,#0
- JBC LD_D,CHDA ;優(yōu)先判斷數(shù)據(jù)上傳
- JBC LD_R,CHPP ;再判斷狀態(tài)返回
- BACK: POP ACC
- RETI
- CHPP: LJMP CHP
- CHDA: MOV A,R1 ;指向加速度數(shù)據(jù)
- CLR C
- SUBB A,#3
- MOV R1,A
- MOV A,@R1
- MOV SPEDA,A ;存入加速度數(shù)據(jù)
- MOV P_Y,#5 ;修改顯示起始位置
- MOV P_X,#2
- CJNE A,#81H,CHD1 ;判斷與0加速度大小關(guān)系
- LJMP A_P ;加速度為0,正數(shù)
- CHD1: JNC A_P ;判斷是否大于0,C=1,小于零
- A_N: MOV B,A ;小于零
- MOV A,#081H ;負(fù)數(shù)變正數(shù),并將0對(duì)應(yīng)81H
- CLR C
- SUBB A,B
- PUSH ACC
- MOV CHAR,#0DH ;顯示負(fù)號(hào)
- LJMP SHP
- A_P: MOV B,#081H ;將0對(duì)應(yīng)81H
- CLR C
- SUBB A,B
- PUSH ACC
- MOV CHAR,#00H ;顯示' '作為正號(hào)
- SHP: LCALL PWCH
- MOV R0,#3
- POP ACC
- MOV P_X,6
- CLR C
- RLC A
- CHD2: MOV B,#0AH ;邊處理變顯示加速度
- DIV AB
- PUSH ACC
- MOV A,B
- ADD A,#10H
- MOV CHAR,A
- DJNZ R0,CHD3
- DEC P_X
- LCALL PWCH
- LJMP CHSL
- CHD3: LCALL PWCH
- POP ACC
- DEC P_X
- LJMP CHD2
-
- CHSL: INC R1
- MOV A,@R1
- MOV SPEDL,A
- MOV P_Y,#6
- LCALL CHS
- CHSR: INC R1
- MOV A,@R1
- MOV SPEDR,A
- MOV P_Y,#7
- LCALL CHS
- CHS: MOV R0,#3 ;處理完成后統(tǒng)一顯示轉(zhuǎn)速
- DO: MOV B,#0AH
- DIV AB
- PUSH B
- DJNZ R0,DO
- MOV P_X,#3
- MOV R0,#3
- SH: DJNZ R0,SH1
- INC P_X
- SH1: POP ACC
- ADD A,#10H
- MOV CHAR,A
- LCALL PWCH
- INC P_X
- INC R0
- DJNZ R0,SH
- MOV A,R1
- CLR C
- SUBB A,#2
- MOV R1,A
- POP ACC
- RETI
- CHP: MOV A,R1
- CLR C
- SUBB A,#2
- MOV R1,A
- MOV C_FLAG,@R1
- INC R1
- MOV R_FLAG,@R1
- JB W,P_W
- JNB UP,P_STO
- MOV DPTR,#STA_S
- LCALL SH_10
- LJMP P_UT
- P_STO: JNB DOWN,P_ERR
- MOV DPTR,#STO_S
- LCALL SH_10
- LJMP P_UT
- P_ERR: MOV R1,#LD_BUF0
- POP ACC
- RETI
- P_W: JB GO_STO,P_RU
- MOV DPTR,#W_S
- LCALL SH_10
- LJMP P_UT
- P_RU: MOV DPTR,#RUN_S
- LCALL SH_10
- P_UT: JNB UT,P_NUT
- MOV DPTR,#UT_S
- LCALL SH_18
- LJMP P_T
- P_NUT: MOV DPTR,#EM_S
- LCALL SH_18
- P_T: JNB LEFT,P_NL
- MOV DPTR,#TL_S
- LCALL SH_20
- LJMP P_FB
- P_NL: JNB RIGH,P_NR
- MOV DPTR,#TR_S
- LCALL SH_20
- LJMP P_FB
- P_NR: MOV DPTR,#STR_S
- LCALL SH_20
- P_FB: JB FB,P_BA
- MOV DPTR,#GO_S
- LCALL SH_28
- LJMP P_MAX
- P_BA: MOV DPTR,#BA_S
- LCALL SH_28
- P_MAX: JNB MAX,P_MIN
- MOV DPTR,#MAX_S
- LCALL SH_30
- P_MIN: JNB MIN,P_NOR
- MOV DPTR,#MIN_S
- LCALL SH_30
- P_NOR: MOV DPTR,#NOR_S
- LCALL SH_30
- DEC R1
- POP ACC
- RETI
- TAB:
- ;-- 字符串: 'a: 0.00 G_' --
- A_STR: DB 41H,1AH,00H,10H,0EH,10H,10H,00H,27H,3FH
- ;-- 字符串: 'sl:00.0 cm/s_' --
- L_STR: DB 53H,4CH,1AH,10H,10H,0EH,10H,00H,43H,4DH,0FH,53H,3FH
- ;-- 字符串: 'sr:00.0 cm/s_' --
- R_STR: DB 53H,52H,1AH,10H,10H,0EH,10H,00H,43H,4DH,0FH,53H,3FH
- ;-- 字符串: 'TEMP:_' --
- TEMP: DB 34H,25H,2DH,30H,1AH,3FH
- ;-- 字符串: 'WAIT _' --
- W_S: DB 37H,21H,29H,34H,00H,3FH
- ;-- 字符串: 'START_' --
- STA_S: DB 33H,34H,21H,32H,34H,3FH
- ;-- 字符串: 'STOP _' --
- STO_S: DB 33H,34H,2FH,30H,00H,3FH
- ;-- 字符串: 'FAST_' --
- FA_S: DB 26H,21H,33H,34H,3FH
- ;-- 字符串: 'SLOW_' --
- SL_S: DB 33H,2CH,2FH,37H,3FH
- ;-- 字符串: 'STRICK_' --
- STR_S: DB 33H,34H,32H,29H,23H,2BH,3FH
- ;-- 字符串: 'TURN L_' --
- TL_S: DB 34H,35H,32H,2EH,00H,2CH,3FH
- ;-- 字符串: 'TURN R_' --
- TR_S: DB 34H,35H,32H,2EH,00H,32H,3FH
- ;-- 字符串: 'U-TURN_' --
- UT_S: DB 35H,0DH,34H,35H,32H,2EH,3FH
- ;-- 字符串: ' _' --
- EM_S: DB 00H,00H,00H,00H,00H,00H,3FH
- ;-- 字符串: 'GO _' --
- GO_S: DB 27H,2FH,00H,00H,3FH
- ;-- 字符串: 'BACK_' --
- BA_S: DB 22H,21H,23H,2BH,3FH
- ;-- 字符串: 'MAX SPEED_' --
- MAX_S: DB 2DH,21H,38H,00H,33H,30H,25H,25H,24H,3FH
- ;-- 字符串: 'MIN SPEED_' --
- MIN_S: DB 2DH,29H,2EH,00H,33H,30H,25H,25H,24H,3FH
- ;-- 字符串: 'NOR SPEED_' --
- NOR_S: DB 2EH,2FH,32H,00H,33H,30H,25H,25H,24H,3FH
- ;-- 字符串: 'RUN _' --
- RUN_S: DB 32H,35H,2EH,00H,00H,3FH
- END
復(fù)制代碼
|
|