|
0.png (51.62 KB, 下載次數: 50)
下載附件
2016-9-28 13:42 上傳
所有資料下載:
遙控車雙機通信仿真.rar
(27.62 KB, 下載次數: 50)
2016-9-28 13:41 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
下面對本工廠做一些簡單的介紹,希望大家指導:
從U1發送數據到U2,U2收到后按要求處理數據,返回多個數值,并執行相應動作
現在下行命令數據沒問題,U2的動作也對
可是U2返回的數據串總是不對
通信方式為:
1、先下行(U1至U2),再上行
上行數據構成(0F0H+數據1+數據2+0FFH)
2、由U2中斷引起上行數據發送
上行數據構成(0F7H+數據A+數據L+數據R+0FFH)
U1收到數據根據接收到的第一個數據判斷為哪種類型,執行相應的顯示
其中如果發送0F0H數據段過程中遇到需要0F7H數據傳輸,后者優先發送,整體數據發送完成后繼續0F0H數據
U1接收數據結束后,經過數字處理
將數據A修改到第5行
將數據L修改到第6行
將數據R修改到第7行
經過位跳轉
將數據1、2中的信息修改到第1、2、3行
第0行無變化
下面是我的測試電路,及程序,希望大家能夠給予幫助,謝謝
0.png (286.35 KB, 下載次數: 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
- ;====================================================================================================
- ;主程序區
- ;----------------------------------------------------------------------------------------------------
- ;復位矢量和中斷矢量的設置
- ORG 0000H
- JMP MAIN
- ORG 0003H
- JMP EXT0
- ORG 000BH
- JMP T0_ISR
-
- ORG 0023H
- JMP UART1
- ;主程序入口和主程序開始存儲之處
- MAIN: MOV SP,#2FH ;初始化堆棧
- MOV IE,#00010011B ;設置中斷使能,EA、T2、ES、T1、I1、T0、I0
- MOV IP,#00000001B ;中斷優先
- MOV TCON,#00000001B ;中斷觸發形態,1為下降沿需軟件復位
- ;初始化串行通信
- MOV TMOD,#21H ;T1工作在MODE2,T0工作在MODE1
- MOV SCON,#50H ;UART工作在MODE1
- MOV TH1,#0F3H ;波特率2400
- SETB TR1 ;啟動T1
- MOV IE,#10010011B ;中斷使能開啟
- ;初始化8253
- MOV P1,#0FFH
- MOV DPTR,#13FFH
- MOV A,#00010100B ;設置8253計數器00控制字,2模式7FH初值(分頻器)
- MOVX @DPTR,A
- MOV DPTR,#10FFH
- MOV A,#01111111B ;低八位為7FH
- MOVX @DPTR,A
- MOV DPTR,#13FFH
- MOV A,#01010110B ;設置8253計數器01控制字,2模式0FFH初值(計數器)
- MOVX @DPTR,A
- MOV DPTR,#11FFH
- MOV A,#11111111B ;低八位為FFH
- MOVX @DPTR,A
- MOV DPTR,#13FFH
- MOV A,#10010110B ;設置8253計數器02控制字,2模式0FFH初值(計數器)
- MOVX @DPTR,A
- MOV DPTR,#12FFH
- MOV A,#11111111B ;低八位為FFH
- MOVX @DPTR,A
-
- ;設置狀態為原地等待
- 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; ;暫停,進入空閑狀態
- ;------------------------------------------------------------------------------------------------------
- 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 ;設置8253計數器01控制字,2模式0FFH初值(計數器)
- MOVX @DPTR,A
- MOV DPTR,#11FFH
- MOV A,#10101111B ;低八位為AFH
- MOVX @DPTR,A
- MOV DPTR,#13FFH
- MOV A,#10010110B ;設置8253計數器02控制字,2模式0FFH初值(計數器)
- 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 ;測速數據是否傳輸結束,否則繼續傳輸測速數據
- MOV A,TX_CT
- CJNE A,#4,NCSA ;判斷返回狀態是否發送過開始信號
- MOV SBUF,#0F7H
- DEC TX_CT
- POP ACC
- RETI
- NCSA: CJNE A,#3,NCD1 ;判斷返回狀態是否發送過第一組信息
- MOV SBUF,C_FLAG
- DEC TX_CT
- POP ACC
- RETI
- NCD1: CJNE A,#2,NCD2 ;判斷返回狀態是否發送過第二組信息
- MOV SBUF,R_FLAG
- DEC TX_CT
- POP ACC
- RETI
- NCD2: CJNE A,#1,NED ;判斷返回狀態是否發送過結束信號
- MOV SBUF,#0FFH
- DEC TX_CT
- POP ACC
- RETI
- T_DA: CJNE A,#5,NDST ;判斷傳輸數據是否發送過開始信號
- MOV SBUF,#0F0H
- DEC TX_DT
- POP ACC
- RETI
- NDST: CJNE A,#4,NDSA ;判斷傳輸數據是否發送過加速度空信號
- MOV SBUF,#089H
- DEC TX_DT
- POP ACC
- RETI
- NDSA: CJNE A,#3,NDSL ;判斷傳輸數據是否發送過第一組信息
- MOV SBUF,SPEDL
- DEC TX_DT
- POP ACC
- RETI
- NDSL: CJNE A,#2,NDSR ;判斷傳輸數據是否發送過第二組信息
- MOV SBUF,SPEDR
- DEC TX_DT
- POP ACC
- RETI
- NDSR: CJNE A,#1,NED ;判斷傳輸數據是否發送過結束信號
- MOV SBUF,#0FFH
- DEC TX_DT
- NED: POP ACC
- RETI
-
- CH_C: CLR RI
- MOV COMD,SBUF ;存儲指令
- MOV A,COMD
- JB GO_STO,N_GO ;判斷是否為運動狀態,是則跳過啟動指令
- ;啟動停車判斷程序段
- CJNE A,#0CH,N_GO ;判斷啟動指令
- ANL C_FLAG,#11000000B ;設置啟動狀態
- SETB UP
- SETB GO_STO
- SETB MIN
- SETB TR0
- LJMP T_ACT
- ;LJMP ACT ;啟動起步程序
- N_GO: CJNE A,#08H,N_STO ;判斷停車指令
- ANL C_FLAG,#11000000B ;設置停車狀態
- SETB DOWN
- LJMP T_ACT
- ;LJMP ACT ;啟動停車程序
- ;方向判斷及修改程序段
- N_STO: CJNE A,#07H,N_FB ;判斷反向指令
- CPL FB ;修改方向
- CPL SFB ;修改方向控制管腳
- LJMP R_ACT ;跳至狀態返回程序
- ;速度修改判斷程序段
- N_FB: CJNE A,#05H,N_FA ;判斷是否為加速指令
- SETB SPUP ;設置加速狀態
- LJMP S_ACT ;跳至速度修改程序
- N_FA: CJNE A,#04H,N_SL ;判斷是否為減速指令
- SETB SPDOW ;設置減速狀態
- LJMP S_ACT ;跳至速度修改程序
- ;轉向判斷程序段
- N_SL: CJNE A,#03H,N_TL ;判斷是否為左轉指令
- JNB LEFT,CHRL ;判斷是否處于左轉狀態
- JB UT,NCHL ;判斷是否為左急轉,是則無修改
- SETB UT ;修改為左急轉
- NCHL: LJMP T_ACT ;跳至轉向修改
- CHRL: JNB RIGH,CHL ;判斷是否為右轉狀態,不是則修改為左轉狀態
- JNB UT,CHSTL ;判斷是否為右急轉,是則改為右轉狀態
- CLR UT
- LJMP T_ACT
- CHSTL: CLR RIGH ;不是則改為直行狀態
- LJMP T_ACT
- CHL: SETB LEFT
- LJMP T_ACT
- N_TL: CJNE A,#01H,T_ACT ;判斷是否為右轉指令
- 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 ;均不是,指令有誤,中斷結束
- C_FA: JB MAX,R_ACT ;判斷是否為已為最大速度,是則跳過速度調整
- DEC COUNT ;不是則速度降一級
- DJNZ COUNT,S_FA ;判斷是否已達到最大速度,是則設置最大速度狀態
- SETB MAX
- CLR MIN
- S_FA: INC COUNT
- LCALL C_SP ;執行速度修改程序(修改計數器初值)
- POP ACC
- RETI
-
- C_SL: JB MIN,R_ACT ;判斷是否為已為最小速度,是則跳過速度調整
- INC COUNT ;不是則速度升一級
- MOV A,COUNT
- CJNE A,#0FH,S_SL ;判斷是否已達到最小速度,是則設置最小速度狀態
- SETB MIN
- CLR MAX
- S_SL: LCALL C_SP ;執行速度修改程序(修改計數器初值)
- POP ACC
- RETI
-
- ;轉向修改程序
- T_ACT: JB LEFT,TL_ACT ;判斷是否為左轉
- JB RIGH,TR_ACT ;判斷是否為右轉
- ANL P1,#11110001B ;修改為直行
- LJMP R_ACT
- TL_ACT: MOV A,P1 ;讀取現有狀態
- ANL A,#11110001B ;清除
- ADD A,#00000010B ;設為左轉
- JNB UT,T_OUT ;判斷是否為急轉,不是則跳至狀態輸出
- LJMP TU_ACT ;跳至急轉設置
- TR_ACT: MOV A,P1
- ANL A,#11110001B
- ADD A,#00000100B ;設為右轉
- JNB UT,T_OUT
- TU_ACT: ADD A,#00001000B ;設為急轉
- T_OUT: MOV P1,A ;輸出狀態
-
- 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
復制代碼- ;***************************************************************************************************
- 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 ;串行數據類型,返回信號
- LD_D BIT 11H ;串行數據類型,行駛數據
- 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
- ;====================================================================================================
- ;主程序區
- ;----------------------------------------------------------------------------------------------------
- ;復位矢量和中斷矢量的設置
- ORG 0000H
- JMP MAIN
- ORG 0003H
- JMP EXT0
- ORG 000BH
- JMP T0_ISR
- ORG 0023H
- JMP UART1
- ORG 0030H
- ;主程序入口和主程序開始存儲之處
- MAIN: MOV SP,#6FH ;初始化堆棧
- ;MOV IE,#00010011B ;設置中斷使能,EA、T2、ES、T1、I1、T0、I0
- MOV IE,#00000011B
- MOV IP,#00000001B ;中斷優先
- MOV TCON,#00000001B ;中斷觸發形態,1為下降沿需軟件復位
- ;初始化串行通信
- MOV TMOD,#21H ;T1工作在MODE2,T0工作在MODE1
- MOV SCON,#50H ;UART工作在MODE1
- MOV TH1,#0F3H ;波特率2400
- SETB TR1 ;啟動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 ;依次顯示字符串內字符
- 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 ;啟動
- 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 ;左轉
- ;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 ;右轉
- ;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 ;把數據存入緩沖區
- MOV R0,#TX_FLAG ;讀入收信狀態
- CJNE @R0,#0,N_D ;不是接收數據狀態,跳至接收數據類型判斷
- INC R1 ;指向下一緩存單元
- LJMP BACK
- N_D: CJNE @R1,#0F7H,N_R ;判斷是否為狀態返回
- MOV @R1,#0 ;緩存單元清除指令數據
- SETB LD_R
- LJMP BACK
- N_R: CJNE @R1,#0F0H,N_C ;判斷是否為數據上傳
- MOV @R1,#0
- SETB LD_D
- LJMP BACK
- N_C: CJNE @R1,#0FFH,BACK ;判斷是否為傳輸結束信號
- MOV @R1,#0
- JBC LD_D,CHDA ;優先判斷數據上傳
- JBC LD_R,CHPP ;再判斷狀態返回
- BACK: POP ACC
- RETI
- CHPP: LJMP CHP
- CHDA: MOV A,R1 ;指向加速度數據
- CLR C
- SUBB A,#3
- MOV R1,A
- MOV A,@R1
- MOV SPEDA,A ;存入加速度數據
- MOV P_Y,#5 ;修改顯示起始位置
- MOV P_X,#2
- CJNE A,#81H,CHD1 ;判斷與0加速度大小關系
- LJMP A_P ;加速度為0,正數
- CHD1: JNC A_P ;判斷是否大于0,C=1,小于零
- A_N: MOV B,A ;小于零
- MOV A,#081H ;負數變正數,并將0對應81H
- CLR C
- SUBB A,B
- PUSH ACC
- MOV CHAR,#0DH ;顯示負號
- LJMP SHP
- A_P: MOV B,#081H ;將0對應81H
- CLR C
- SUBB A,B
- PUSH ACC
- MOV CHAR,#00H ;顯示' '作為正號
- 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 ;處理完成后統一顯示轉速
- 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
復制代碼
|
|