标题:
单片机遥控车的proteus仿真及源码
[打印本页]
作者:
51hei小林
时间:
2016-9-28 13:44
标题:
单片机遥控车的proteus仿真及源码
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
复制代码
作者:
lightsailing
时间:
2017-6-24 22:51
很好啊!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1