找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5207|回复: 1
打印 上一主题 下一主题
收起左侧

单片机遥控车的proteus仿真及源码

[复制链接]
跳转到指定楼层
楼主

所有资料下载:
遥控车双机通信仿真.rar (27.62 KB, 下载次数: 50)

下面对本工厂做一些简单的介绍,希望大家指导:
从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行无变化

下面是我的测试电路,及程序,希望大家能够给予帮助,谢谢


  1. ;***************************************************************************************************
  2. C_FLAG        DATA                        20H
  3. W                        BIT                        00H
  4. UP                        BIT                        01H
  5. DOWN                BIT                        02H
  6. LEFT                BIT                        03H
  7. RIGH                BIT                        04H
  8. UT                        BIT                        05H
  9. FB                        BIT                        06H
  10. GO_STO                BIT                        07H
  11. R_FLAG        DATA                        21H
  12. MAX                        BIT                        08H
  13. MIN                        BIT                        09H
  14. SPUP                BIT                        0AH
  15. SPDOW                BIT                        0BH
  16. COMD        DATA                        22H
  17. SPC                        BIT                        13H
  18. STC                        BIT                        12H
  19. CSP                        BIT                        11H
  20. CHF                        BIT                        10H
  21. C_CLKH        DATA                        23H
  22. C_CLKL        DATA                        24H
  23. SPEDL        DATA                        25H
  24. SPEDR        DATA                        26H
  25. COUNT        DATA                        27H
  26. TX_CT        DATA                        28H
  27. TX_DT        DATA                        29H
  28. MAXSP        SET                        255
  29. NORSP        SET                        1275
  30. MINSP        SET                        3825
  31. GATE                EQU        P3.4
  32. SFB                        EQU        P1.0
  33. SSP0                EQU        P1.1
  34. SSP1                EQU        P1.2
  35. SSP2                EQU        P1.3
  36. CLK                        EQU        P1.4
  37. ;====================================================================================================
  38. ;主程序区
  39. ;----------------------------------------------------------------------------------------------------
  40. ;复位矢量和中断矢量的设置
  41.                 ORG                        0000H
  42.                 JMP                        MAIN

  43.                 ORG                        0003H
  44.                 JMP                        EXT0

  45.                 ORG                        000BH
  46.                 JMP                        T0_ISR
  47.                
  48.                 ORG                        0023H
  49.                 JMP                        UART1

  50. ;主程序入口和主程序开始存储之处
  51. MAIN:        MOV                        SP,#2FH                ;初始化堆栈
  52.                 MOV                        IE,#00010011B        ;设置中断使能,EA、T2、ES、T1、I1、T0、I0
  53.                 MOV                        IP,#00000001B        ;中断优先
  54.                 MOV                        TCON,#00000001B        ;中断触发形态,1为下降沿需软件复位
  55. ;初始化串行通信
  56.                 MOV                        TMOD,#21H                ;T1工作在MODE2,T0工作在MODE1
  57.                 MOV                        SCON,#50H                ;UART工作在MODE1
  58.                 MOV                        TH1,#0F3H                ;波特率2400
  59.                 SETB                TR1                                ;启动T1
  60.                 MOV                        IE,#10010011B        ;中断使能开启
  61. ;初始化8253
  62.                 MOV                        P1,#0FFH
  63.                 MOV                        DPTR,#13FFH
  64.                 MOV                        A,#00010100B        ;设置8253计数器00控制字,2模式7FH初值(分频器)
  65.                 MOVX                @DPTR,A
  66.                 MOV                        DPTR,#10FFH
  67.                 MOV                        A,#01111111B        ;低八位为7FH
  68.                 MOVX                @DPTR,A

  69.                 MOV                        DPTR,#13FFH
  70.                 MOV                        A,#01010110B        ;设置8253计数器01控制字,2模式0FFH初值(计数器)
  71.                 MOVX                @DPTR,A
  72.                 MOV                        DPTR,#11FFH
  73.                 MOV                        A,#11111111B        ;低八位为FFH
  74.                 MOVX                @DPTR,A

  75.                 MOV                        DPTR,#13FFH
  76.                 MOV                        A,#10010110B        ;设置8253计数器02控制字,2模式0FFH初值(计数器)
  77.                 MOVX                @DPTR,A
  78.                 MOV                        DPTR,#12FFH
  79.                 MOV                        A,#11111111B        ;低八位为FFH
  80.                 MOVX                @DPTR,A
  81.                
  82. ;设置状态为原地等待
  83. WAIT0:        MOV                        C_FLAG,#0
  84.                 SETB                W
  85.                 MOV                        R_FLAG,#0
  86.                 CLR                        CLK
  87.                 CLR                        TR0
  88.                 MOV                        TL0,#0EH
  89.                 MOV                        C_CLKL,#0EH
  90.                 MOV                        TH0,#0F1H
  91.                 MOV                        C_CLKH,#0F1H
  92.                 MOV                        COUNT,#15
  93.                
  94.                 MOV                        TX_CT,#4
  95.                 MOV                        A,TX_DT
  96.                 JZ                        C_OUT1
  97.                 LJMP                WAIT1
  98. C_OUT1:        MOV                        SBUF,#0F7H
  99.                 DEC                        TX_CT
  100. WAIT1:        JB                        UP,STA_P
  101.                 LJMP                        WAIT1
  102. STA_P:        SETB                TR0               
  103. WAIT2:        JB                        DOWN,WAIT3
  104.                 LJMP                        WAIT2
  105. WAIT3:        JB                        MIN,WAIT0
  106.                 LJMP                        WAIT3
  107.                
  108. ;                JMP                        [        DISCUZ_CODE_40        ]nbsp;               ;暂停,进入空闲状态
  109. ;------------------------------------------------------------------------------------------------------
  110. EXT0:
  111.                 CLR                        GATE
  112.                 PUSH                ACC

  113.                 MOV                        DPTR,#11FFH
  114.                 MOVX                A,@DPTR
  115.                 MOV                        R2,A        
  116.                 MOV                        DPTR,#12FFH
  117.                 MOVX                A,@DPTR
  118.                 MOV                        R3,A

  119.                 MOV                        DPTR,#13FFH
  120.                 MOV                        A,#01010110B        ;设置8253计数器01控制字,2模式0FFH初值(计数器)
  121.                 MOVX                @DPTR,A
  122.                 MOV                        DPTR,#11FFH
  123.                 MOV                        A,#10101111B        ;低八位为AFH
  124.                 MOVX                @DPTR,A

  125.                 MOV                        DPTR,#13FFH
  126.                 MOV                        A,#10010110B        ;设置8253计数器02控制字,2模式0FFH初值(计数器)
  127.                 MOVX                @DPTR,A
  128.                 MOV                        DPTR,#12FFH
  129.                 MOV                        A,#10111111B        ;低八位为BFH
  130.                 MOVX                @DPTR,A

  131.                 SETB                        GATE        

  132.                 MOV                        A,#0AFH
  133.                 CLR                        C
  134.                 SUBB                A,R2
  135.                 MOV                        SPEDL,A               
  136.                 MOV                        A,#0BFH
  137.                 CLR                        C
  138.                 SUBB                A,R3
  139.                 MOV                        SPEDR,A
  140.                
  141.                 MOV                        TX_DT,#5
  142.                 MOV                        SBUF,#0F0H
  143.                 DEC                        TX_DT
  144.                 POP                        ACC
  145.                 RETI

  146. T0_ISR:        PUSH                ACC
  147.                 MOV                        TL0,C_CLKL
  148.                 MOV                        TH0,C_CLKH
  149.                 CPL                        CLK               
  150.                 JNB                        UP,DOWS
  151.                 MOV                        A,COUNT
  152.                 CJNE                A,#5,SSP
  153.                 CLR                        UP
  154.                 SETB                W
  155.                 CLR                        SPUP
  156.                 LJMP                C_OUT
  157. SSP:                SETB                SPUP
  158.         LJMP                S_ACT
  159. DOWS:        JNB                        DOWN,SP_UP
  160.                 SETB                SPDOW
  161.         LJMP                S_ACT

  162. SP_UP:        JNB                        SPUP,SP_DOW
  163.                 LJMP                S_ACT
  164. SP_DOW:        JNB                        SPDOW,RELD
  165.                 LJMP                S_ACT

  166. RELD:        POP                        ACC
  167.                 RETI

  168. UART1:        PUSH                ACC
  169.                 JB                        RI,CH_C
  170.                 CLR                        TI
  171.                 MOV                        A,TX_DT
  172.                 CJNE                A,#0,T_DA                ;测速数据是否传输结束,否则继续传输测速数据
  173.                 MOV                        A,TX_CT
  174.                 CJNE                A,#4,NCSA                        ;判断返回状态是否发送过开始信号
  175.                 MOV                        SBUF,#0F7H
  176.                 DEC                        TX_CT
  177.                 POP                        ACC
  178.                 RETI
  179. NCSA:        CJNE                A,#3,NCD1                        ;判断返回状态是否发送过第一组信息
  180.                 MOV                        SBUF,C_FLAG
  181.                 DEC                        TX_CT
  182.                 POP                        ACC
  183.                 RETI
  184. NCD1:        CJNE                A,#2,NCD2                        ;判断返回状态是否发送过第二组信息
  185.                 MOV                        SBUF,R_FLAG
  186.                 DEC                        TX_CT
  187.                 POP                        ACC
  188.                 RETI
  189. NCD2:        CJNE                A,#1,NED                        ;判断返回状态是否发送过结束信号
  190.                 MOV                        SBUF,#0FFH
  191.                 DEC                        TX_CT
  192.                 POP                        ACC
  193.                 RETI

  194. T_DA:        CJNE                A,#5,NDST                        ;判断传输数据是否发送过开始信号
  195.                 MOV                        SBUF,#0F0H
  196.                 DEC                        TX_DT
  197.                 POP                        ACC
  198.                 RETI
  199. NDST:        CJNE                A,#4,NDSA                        ;判断传输数据是否发送过加速度空信号
  200.                 MOV                        SBUF,#089H
  201.                 DEC                        TX_DT
  202.                 POP                        ACC
  203.                 RETI

  204. NDSA:        CJNE                A,#3,NDSL                        ;判断传输数据是否发送过第一组信息
  205.                 MOV                        SBUF,SPEDL
  206.                 DEC                        TX_DT
  207.                 POP                        ACC
  208.                 RETI
  209. NDSL:        CJNE                A,#2,NDSR                        ;判断传输数据是否发送过第二组信息
  210.                 MOV                        SBUF,SPEDR
  211.                 DEC                        TX_DT
  212.                 POP                        ACC
  213.                 RETI
  214. NDSR:        CJNE                A,#1,NED                        ;判断传输数据是否发送过结束信号
  215.                 MOV                        SBUF,#0FFH
  216.                 DEC                        TX_DT
  217. NED:        POP                        ACC
  218.                 RETI
  219.                
  220. CH_C:        CLR                        RI
  221.                 MOV                        COMD,SBUF                ;存储指令
  222.                 MOV                        A,COMD
  223.                 JB                        GO_STO,N_GO                ;判断是否为运动状态,是则跳过启动指令
  224. ;启动停车判断程序段               
  225.                 CJNE                A,#0CH,N_GO                ;判断启动指令
  226.                 ANL                        C_FLAG,#11000000B        ;设置启动状态
  227.                 SETB                UP
  228.                 SETB                GO_STO
  229.                 SETB                MIN
  230.                 SETB                TR0
  231.                 LJMP                T_ACT
  232.                 ;LJMP                ACT                                ;启动起步程序
  233. N_GO:        CJNE                A,#08H,N_STO        ;判断停车指令
  234.                 ANL                        C_FLAG,#11000000B        ;设置停车状态
  235.                 SETB                DOWN
  236.                 LJMP                T_ACT
  237.                 ;LJMP                ACT                                ;启动停车程序
  238. ;方向判断及修改程序段               
  239. N_STO:        CJNE                A,#07H,N_FB                ;判断反向指令
  240.                 CPL                        FB                                ;修改方向
  241.                 CPL                        SFB                                ;修改方向控制管脚
  242.                 LJMP                R_ACT                        ;跳至状态返回程序
  243. ;速度修改判断程序段               
  244. N_FB:        CJNE                A,#05H,N_FA                ;判断是否为加速指令
  245.                 SETB                SPUP                        ;设置加速状态
  246.                 LJMP                S_ACT                        ;跳至速度修改程序
  247. N_FA:        CJNE                A,#04H,N_SL                ;判断是否为减速指令
  248.                 SETB                SPDOW                        ;设置减速状态
  249.                 LJMP                S_ACT                        ;跳至速度修改程序
  250. ;转向判断程序段               
  251. N_SL:        CJNE                A,#03H,N_TL                ;判断是否为左转指令
  252.                 JNB                        LEFT,CHRL                ;判断是否处于左转状态
  253.                 JB                        UT,NCHL                        ;判断是否为左急转,是则无修改
  254.                 SETB                UT                                ;修改为左急转
  255. NCHL:        LJMP                T_ACT                        ;跳至转向修改
  256. CHRL:        JNB                        RIGH,CHL                ;判断是否为右转状态,不是则修改为左转状态
  257.                 JNB                        UT,CHSTL                ;判断是否为右急转,是则改为右转状态
  258.                 CLR                        UT
  259.                 LJMP                T_ACT
  260. CHSTL:        CLR                        RIGH                        ;不是则改为直行状态
  261.                 LJMP                T_ACT
  262. CHL:        SETB                LEFT
  263.                 LJMP                T_ACT
  264. N_TL:        CJNE                A,#01H,T_ACT                ;判断是否为右转指令
  265.                 JNB                        RIGH,CHLR
  266.                 JB                        UT,NCHR
  267.                 SETB                UT
  268. NCHR:        LJMP                T_ACT               
  269. CHLR:        JNB                        LEFT,CHR
  270.                 JNB                        UT,CHSTR
  271.                 CLR                        UT
  272.                 LJMP                T_ACT
  273. CHSTR:        CLR                        LEFT
  274.                 LJMP                T_ACT
  275. CHR:        SETB                RIGH
  276.                 LJMP                T_ACT
  277.                
  278. ;速度修改程序
  279. S_ACT:        JBC                        SPUP,C_FA                ;判断是否为加速
  280.                 JBC                        SPDOW,C_SL                ;判断是否为减速
  281.                 POP                        ACC
  282.                 RETI                                                ;均不是,指令有误,中断结束
  283. C_FA:        JB                        MAX,R_ACT                ;判断是否为已为最大速度,是则跳过速度调整
  284.                 DEC                        COUNT                        ;不是则速度降一级
  285.                 DJNZ                COUNT,S_FA                ;判断是否已达到最大速度,是则设置最大速度状态
  286.                 SETB                MAX
  287.                 CLR                        MIN
  288. S_FA:        INC                        COUNT
  289.                 LCALL                C_SP                        ;执行速度修改程序(修改计数器初值)
  290.                 POP                        ACC
  291.                 RETI
  292.                
  293. C_SL:        JB                        MIN,R_ACT                ;判断是否为已为最小速度,是则跳过速度调整
  294.                 INC                        COUNT                        ;不是则速度升一级
  295.                 MOV                        A,COUNT
  296.                 CJNE                A,#0FH,S_SL                ;判断是否已达到最小速度,是则设置最小速度状态
  297.                 SETB                MIN
  298.                 CLR                        MAX
  299. S_SL:        LCALL                C_SP                        ;执行速度修改程序(修改计数器初值)
  300.                 POP                        ACC
  301.                 RETI
  302.                
  303. ;转向修改程序
  304. T_ACT:        JB                        LEFT,TL_ACT                ;判断是否为左转
  305.                 JB                        RIGH,TR_ACT                ;判断是否为右转
  306.                 ANL                        P1,#11110001B        ;修改为直行
  307.                 LJMP                R_ACT
  308. TL_ACT:        MOV                        A,P1                        ;读取现有状态
  309.                 ANL                        A,#11110001B        ;清除
  310.                 ADD                        A,#00000010B        ;设为左转
  311.                 JNB                        UT,T_OUT                ;判断是否为急转,不是则跳至状态输出
  312.                 LJMP                TU_ACT                        ;跳至急转设置
  313. TR_ACT:        MOV                        A,P1
  314.                 ANL                        A,#11110001B
  315.                 ADD                        A,#00000100B        ;设为右转
  316.                 JNB                        UT,T_OUT
  317. TU_ACT:        ADD                        A,#00001000B        ;设为急转
  318. T_OUT:        MOV                        P1,A                        ;输出状态
  319.                
  320. R_ACT:        MOV                        TX_CT,#4
  321.                 MOV                        A,TX_DT
  322.                 JZ                        C_OUT
  323.                 POP                        ACC
  324.                 RETI
  325. C_OUT:        MOV                        SBUF,#0F7H
  326.                 DEC                        TX_CT
  327.                 POP                        ACC
  328.                 RETI
  329.                
  330. C_SP:        MOV                        A,COUNT
  331.                 MOV                        B,#0FFH
  332.                 MUL                        AB
  333.                 PUSH                ACC
  334.                 MOV                        A,#0FFH
  335.                 CLR                        C
  336.                 SUBB                A,B
  337.                 MOV                        C_CLKH,A
  338.                 POP                        B
  339.                 MOV                        A,#0FFH
  340.                 CLR                        C
  341.                 SUBB                A,B
  342.                 MOV                        C_CLKL,A
  343.                 RET               

  344.                 END
复制代码
  1. ;***************************************************************************************************
  2. C_FLAG                DATA                20H
  3. W                        BIT                        00H
  4. UP                        BIT                        01H
  5. DOWN                BIT                        02H
  6. LEFT                BIT                        03H
  7. RIGH                BIT                        04H
  8. UT                        BIT                        05H
  9. FB                        BIT                        06H
  10. GO_STO                BIT                        07H
  11. R_FLAG                DATA                21H
  12. MAX                        BIT                        08H
  13. MIN                        BIT                        09H
  14. SPUP                BIT                        0AH
  15. SPDOW                BIT                        0BH
  16. TX_FLAG                DATA                22H
  17. LD_R                BIT                        10H                ;串行数据类型,返回信号
  18. LD_D                BIT                        11H                ;串行数据类型,行驶数据
  19. LD_BUF0                DATA                23H
  20. LD_BUF1                DATA                24H
  21. LD_BUF2                DATA                25H
  22. A_BUF                DATA                26H
  23. S_BUF                DATA                27H
  24. SPEDL                DATA                28H
  25. SPEDR                DATA                29H
  26. SPEDA                DATA                2AH
  27. ;LCD部分控制位及变量
  28. TCD                BIT        P2.0
  29. TWR                BIT        P2.1
  30. TRD                BIT        P2.2
  31. P_X                EQU        42H                ;0=<X=<15
  32. P_Y                EQU        43H                ;0=<Y=<7
  33. CHAR                EQU        44H                ;'0'=10H
  34. END_C                EQU        45H                ;STR.END
  35. ;====================================================================================================
  36. ;主程序区
  37. ;----------------------------------------------------------------------------------------------------
  38. ;复位矢量和中断矢量的设置
  39.                 ORG                        0000H
  40.                 JMP                        MAIN

  41.                 ORG                        0003H
  42.                 JMP                        EXT0

  43.                 ORG                        000BH
  44.                 JMP                        T0_ISR

  45.                 ORG                        0023H
  46.                 JMP                        UART1

  47.                 ORG                        0030H
  48. ;主程序入口和主程序开始存储之处
  49. MAIN:                MOV                        SP,#6FH                ;初始化堆栈
  50.                 ;MOV                        IE,#00010011B        ;设置中断使能,EA、T2、ES、T1、I1、T0、I0
  51.                 MOV                        IE,#00000011B
  52.                 MOV                        IP,#00000001B        ;中断优先
  53.                 MOV                        TCON,#00000001B        ;中断触发形态,1为下降沿需软件复位
  54. ;初始化串行通信
  55.                 MOV                        TMOD,#21H                ;T1工作在MODE2,T0工作在MODE1
  56.                 MOV                        SCON,#50H                ;UART工作在MODE1
  57.                 MOV                        TH1,#0F3H                ;波特率2400
  58.                 SETB                        TR1                                ;启动T1
  59.                 ;MOV                        IE,#10010011B        ;中断使能开启
  60.                 MOV                        IE,#10000011B
  61.                 MOV                        R1,#LD_BUF0
  62. ;初始化LCD
  63.                 LCALL        LCDINT
  64.                 LCALL        CLEAR                ;CLEAR RAM
  65.                 MOV                P_X,#0                ;在位置00处显示TEMP字符串
  66.                 MOV                P_Y,#0
  67.                 MOV                DPTR,#TEMP
  68.                 MOV                END_C,#3FH
  69.                 LCALL        PWSTR
  70.                 MOV                DPTR,#W_S
  71.                 LCALL        SH_10
  72.                 MOV                DPTR,#STR_S
  73.                 LCALL        SH_20
  74.                 MOV                DPTR,#GO_S
  75.                 LCALL        SH_28
  76.                 MOV                P_X,#0                ;在位置50处显示A_STR字符串
  77.                 MOV                P_Y,#5
  78.                 MOV                DPTR,#A_STR
  79.                 MOV                END_C,#3FH
  80.                 LCALL        PWSTR
  81.                 MOV                P_X,#0                ;在位置60处显示L_STR字符串
  82.                 MOV                P_Y,#6
  83.                 MOV                DPTR,#L_STR
  84.                 MOV                END_C,#3FH
  85.                 LCALL        PWSTR
  86.                 MOV                P_X,#0                ;在位置70处显示R_STR字符串
  87.                 MOV                P_Y,#7
  88.                 MOV                DPTR,#R_STR
  89.                 MOV                END_C,#3FH
  90.                 LCALL        PWSTR
  91.                 MOV                P_X,#0                ;在位置40处显示'



  92. 字符
  93.                 MOV                P_Y,#4
  94.                 MOV                CHAR,#04H
  95.                 LCALL        PWCH
  96.                 JMP        $

  97. CH_P:                MOV                A,P_Y                ;位置修改
  98.                 MOV                B,#10H
  99.                 MUL                AB
  100.                 ADD                A,P_X
  101.                 MOV                R2,A
  102.                 MOV                R3,#0
  103.                 MOV                R4,#24H
  104.                 LCALL        PWD2
  105.                 RET

  106. PWCH:                LCALL        CH_P                ;在指定位置显示字符
  107.                 MOV                R4,#0C0H
  108.                 MOV                R3,CHAR
  109.                 LCALL        PWD1
  110.                 RET

  111. PWD2:                MOV                A,R2
  112.                 LCALL        PWD
  113. PWD1:                MOV                A,R3
  114.                 LCALL        PWD
  115. PWC:                MOV                A,R4
  116.                 SJMP        PW
  117. PWD:                CLR                TCD
  118. PW:                CLR                TWR
  119.                 MOV                P0,A
  120.                 SETB        TWR
  121.                 SETB        TCD
  122.                 RET

  123. PR:                CLR                TCD
  124.                 ORL                P0,#0FFH
  125.                 CLR                TRD
  126.                 MOV                A,P0
  127.                 MOV                P0,#0FFH
  128.                 RET

  129. CLEAR:                MOV                R2,#00H                ;clear ram
  130.                 MOV                R3,#00H
  131.                 MOV                R4,#24H
  132.                 LCALL        PWD2
  133.                 MOV                R4,#0B0H
  134.                 LCALL        PWC
  135.                 MOV                R2,#1FH
  136. CLEAR1:                MOV                R3,#0FFH
  137. CLEAR2:         MOV                A,#00H
  138.                 LCALL        PWD
  139.                 DJNZ        R3,CLEAR2
  140.                 DJNZ        R2,CLEAR1
  141.                 MOV                R4,#0B2H
  142.                 LCALL        PWC
  143.                 RET

  144. PWSTR:                LCALL        CH_P                ;在指定位置为起始显示字符串
  145.                 MOV                R4,#0B0H
  146.                 LCALL        PWC
  147. PWSTR1:                MOV                A,#0                ;依次显示字符串内字符
  148.                 MOVC        A,@A+DPTR
  149.                 CJNE        A,END_C,PWSTR2
  150.                 MOV                R4,#0B2H
  151.                 LCALL        PWC
  152.                 RET
  153. PWSTR2:                INC                DPTR
  154.                 LCALL        PWD
  155.                 LJMP        PWSTR1

  156. LCDINT:                MOV                R2,#00H
  157.                 MOV                R3,#00H
  158.                 MOV                R4,#40H
  159.                 LCALL        PWD2

  160.                 MOV                R2,#10H
  161.                 MOV                R3,#00H
  162.                 MOV                R4,#41H
  163.                 LCALL        PWD2

  164.                 ;MOV        R2,#00H
  165.                 ;MOV        R3,#08H
  166.                 ;MOV        R4,#42H
  167.                 ;LCALL        PWD2

  168.                 ;MOV        R2,#20H
  169.                 ;MOV        R3,#00H
  170.                 ;MOV        R4,#43H
  171.                 ;LCALL        PWD2

  172.                 MOV                R4,#0A7H
  173.                 LCALL        PWC
  174.                 MOV                R4,#80H
  175.                 LCALL        PWC
  176.                 MOV                R4,#94H
  177.                 LCALL        PWC
  178.                 RET
  179.                
  180. SH_10:                MOV                P_X,#0                ;在位置10处显示字符串
  181.                 MOV                P_Y,#1
  182.                 MOV                END_C,#3FH
  183.                 LCALL        PWSTR
  184.                 RET
  185. SH_18:                MOV                P_X,#8                ;在位置18处显示字符串
  186.                 MOV                P_Y,#1
  187.                 MOV                END_C,#3FH
  188.                 LCALL        PWSTR               
  189.                 RET
  190. SH_20:                MOV                P_X,#0                ;在位置20处显示字符串
  191.                 MOV                P_Y,#2
  192.                 MOV                END_C,#3FH
  193.                 LCALL        PWSTR
  194.                 RET
  195. SH_28:                MOV                P_X,#8                ;在位置28处显示字符串
  196.                 MOV                P_Y,#2
  197.                 MOV                END_C,#3FH
  198.                 LCALL        PWSTR
  199.                 RET
  200. SH_30:                MOV                P_X,#0                ;在位置30处显示字符串
  201.                 MOV                P_Y,#3
  202.                 MOV                END_C,#3FH
  203.                 LCALL        PWSTR
  204.                 RET
  205.                

  206. DELAY:                MOV                R7,#0FFH
  207. D1:                NOP
  208. D2:                DJNZ        R7,D1
  209.                 RET

  210. DELAY1:                MOV                R4,#0FFH
  211. LOP3:                LCALL        DELAY
  212.                 DJNZ        R4,LOP3
  213.                 RET

  214. ;------------------------------------------------------------------------------------------------------
  215. T0_ISR:               
  216.                
  217.                 RETI

  218. EXT0:                PUSH        ACC
  219.                 MOV                A,P1
  220.                 SUBB        A,#0F0H

  221.                 CJNE        A,#0,N_STA                ;启动
  222.                 JNB                GO_STO,S_COM
  223.                 POP                ACC
  224.                 RETI
  225. S_COM:                MOV                C_FLAG,#0
  226.                 SETB        UP
  227.                 SETB        GO_STO
  228.                 ;MOV        P_X,#0
  229.                 ;MOV        P_Y,#1
  230.                 ;MOV                DPTR,#STA_S
  231.                 MOV                SBUF,#0CH
  232.                 ;LCALL        SH_10
  233.                 POP                ACC
  234.                 RETI

  235. N_STA:                JNB                GO_STO,N_COM
  236.                 CJNE        A,#2,N_STO                ;停止
  237.                 MOV                C_FLAG,#0
  238.                 SETB        DOWN
  239.                 CLR                GO_STO
  240.                 ;MOV        P_X,#0
  241.                 ;MOV        P_Y,#1
  242.                 ;MOV                DPTR,#STO_S
  243.                 MOV                SBUF,#08H
  244.                 ;LCALL        SH_10
  245.                 POP                ACC
  246.                 RETI

  247. N_STO:                CJNE        A,#4,N_TL                ;左转
  248.                 ;MOV        C_FLAG,#0
  249.                 ;SETB        LEFT
  250.                 ;MOV        P_X,#0
  251.                 ;MOV        P_Y,#2
  252.                 ;MOV                DPTR,#TL_S
  253.                 MOV                SBUF,#03H
  254.                 ;LCALL        SH_20
  255.                 POP                ACC
  256.                 RETI

  257. N_TL:                CJNE        A,#6,N_TR                ;右转
  258.                 ;MOV        C_FLAG,#0
  259.                 ;SETB        RIGH
  260.                 ;MOV        P_X,#0
  261.                 ;MOV        P_Y,#2
  262.                 ;MOV                DPTR,#TR_S
  263.                 MOV                SBUF,#01H
  264.                 ;LCALL        SH_20
  265.                 POP                ACC
  266.                 RETI

  267. N_TR:                CJNE        A,#5,N_FB                ;正反
  268.                 CPL                FB
  269.                 ;MOV        P_X,#8
  270.                 ;MOV        P_Y,#2
  271.                 JB                FB,TBACK
  272.                 ;MOV                DPTR,#GO_S
  273.                 MOV                SBUF,#07H
  274.                 ;LCALL        SH_28
  275.                 POP                ACC
  276.                 RETI
  277. TBACK:                ;MOV                DPTR,#BA_S
  278.                 MOV                SBUF,#07H
  279.                 ;LCALL        SH_28
  280.                 POP                ACC
  281.                 RETI

  282. N_FB:                CJNE        A,#1,N_UP                ;加速
  283.                 ;CLR        SPDOW
  284.                 ;SETB        SPUP
  285.                 ;MOV        P_X,#8
  286.                 ;MOV        P_Y,#1
  287.                 ;MOV        DPTR,#FA_S
  288.                 MOV                SBUF,#05H
  289.                 POP                ACC
  290.                 RETI

  291. N_UP:                CJNE        A,#9,N_COM                ;减速
  292.                 ;SETB        SPDOW
  293.                 ;CLR        SPUP
  294.                 ;MOV        P_X,#8
  295.                 ;MOV        P_Y,#1
  296.                 ;MOV        DPTR,#SL_S
  297.                 MOV                SBUF,#04H
  298. N_COM:                POP                ACC
  299.                 RETI

  300. UART1:                PUSH        ACC
  301.                 JB        RI,UR
  302.                 CLR        TI
  303.                 POP                ACC
  304.                 RETI
  305.                
  306. UR:                CLR        RI
  307.                 MOV                @R1,SBUF                        ;把数据存入缓冲区
  308.                 MOV                R0,#TX_FLAG                        ;读入收信状态
  309.                 CJNE        @R0,#0,N_D                        ;不是接收数据状态,跳至接收数据类型判断
  310.                 INC                R1                                        ;指向下一缓存单元
  311.                 LJMP        BACK
  312. N_D:                CJNE        @R1,#0F7H,N_R        ;判断是否为状态返回
  313.                 MOV                @R1,#0                                ;缓存单元清除指令数据
  314.                 SETB        LD_R
  315.                 LJMP        BACK
  316. N_R:                CJNE        @R1,#0F0H,N_C        ;判断是否为数据上传
  317.                 MOV                @R1,#0
  318.                 SETB        LD_D
  319.                 LJMP        BACK        
  320. N_C:                CJNE        @R1,#0FFH,BACK        ;判断是否为传输结束信号
  321.                 MOV                @R1,#0
  322.                 JBC                LD_D,CHDA                        ;优先判断数据上传
  323.                 JBC                LD_R,CHPP                        ;再判断状态返回
  324. BACK:                POP                ACC
  325.                 RETI
  326. CHPP:                LJMP                CHP

  327. CHDA:                MOV                A,R1                        ;指向加速度数据
  328.                 CLR                C
  329.                 SUBB        A,#3
  330.                 MOV                R1,A
  331.                 MOV                A,@R1
  332.                 MOV                SPEDA,A                                ;存入加速度数据
  333.                 MOV                P_Y,#5                                ;修改显示起始位置
  334.                 MOV                P_X,#2
  335.                 CJNE        A,#81H,CHD1                        ;判断与0加速度大小关系
  336.                 LJMP        A_P                                        ;加速度为0,正数
  337. CHD1:                JNC                A_P                                ;判断是否大于0,C=1,小于零
  338. A_N:                MOV                B,A                                ;小于零
  339.                 MOV                A,#081H                                ;负数变正数,并将0对应81H
  340.                 CLR                C
  341.                 SUBB        A,B
  342.                 PUSH        ACC
  343.                 MOV                CHAR,#0DH                        ;显示负号
  344.                 LJMP        SHP
  345. A_P:                MOV                B,#081H                        ;将0对应81H
  346.                 CLR                C
  347.                 SUBB        A,B
  348.                 PUSH        ACC
  349.                 MOV                CHAR,#00H                        ;显示' '作为正号
  350. SHP:                LCALL        PWCH
  351.                 MOV                R0,#3
  352.                 POP                ACC
  353.                 MOV                P_X,6
  354.                 CLR                C
  355.                 RLC                A
  356. CHD2:                MOV                B,#0AH                ;边处理变显示加速度
  357.                 DIV                AB
  358.                 PUSH        ACC
  359.                 MOV                A,B
  360.                 ADD                A,#10H
  361.                 MOV                CHAR,A
  362.                 DJNZ        R0,CHD3
  363.                 DEC                P_X
  364.                 LCALL        PWCH
  365.                 LJMP        CHSL
  366. CHD3:                LCALL        PWCH
  367.                 POP                ACC
  368.                 DEC                P_X
  369.                 LJMP        CHD2
  370.                
  371. CHSL:                INC                R1
  372.                 MOV                A,@R1
  373.                 MOV                SPEDL,A
  374.                 MOV                P_Y,#6
  375.                 LCALL        CHS
  376. CHSR:                INC                R1
  377.                 MOV                A,@R1
  378.                 MOV                SPEDR,A
  379.                 MOV                P_Y,#7
  380.                 LCALL        CHS        

  381. CHS:                MOV                R0,#3                ;处理完成后统一显示转速
  382. DO:                MOV                B,#0AH
  383.                 DIV                AB
  384.                 PUSH        B
  385.                 DJNZ        R0,DO
  386.                 MOV                P_X,#3
  387.                 MOV                R0,#3
  388. SH:                DJNZ        R0,SH1
  389.                 INC                P_X
  390. SH1:                POP                ACC
  391.                 ADD                A,#10H
  392.                 MOV                CHAR,A
  393.                 LCALL        PWCH
  394.                 INC                P_X
  395.                 INC                R0
  396.                 DJNZ        R0,SH
  397.                 MOV                A,R1
  398.                 CLR                C
  399.                 SUBB        A,#2
  400.                 MOV                R1,A
  401.                 POP                ACC
  402.                 RETI

  403. CHP:                MOV                A,R1
  404.                 CLR                C
  405.                 SUBB        A,#2
  406.                 MOV                R1,A
  407.                 MOV                C_FLAG,@R1
  408.                 INC                R1
  409.                 MOV                R_FLAG,@R1
  410.                 JB                W,P_W
  411.                 JNB                UP,P_STO
  412.                 MOV                DPTR,#STA_S
  413.                 LCALL        SH_10
  414.                 LJMP        P_UT
  415. P_STO:                JNB                DOWN,P_ERR
  416.                 MOV                DPTR,#STO_S
  417.                 LCALL        SH_10
  418.                 LJMP        P_UT
  419. P_ERR:                MOV                R1,#LD_BUF0
  420.                 POP                ACC
  421.                 RETI
  422. P_W:                JB                GO_STO,P_RU
  423.                 MOV                DPTR,#W_S
  424.                 LCALL        SH_10
  425.                 LJMP        P_UT
  426. P_RU:                MOV                DPTR,#RUN_S
  427.                 LCALL        SH_10
  428. P_UT:                JNB                UT,P_NUT
  429.                 MOV                DPTR,#UT_S
  430.                 LCALL        SH_18
  431.                 LJMP        P_T
  432. P_NUT:                MOV                DPTR,#EM_S
  433.                 LCALL        SH_18
  434. P_T:                JNB                LEFT,P_NL
  435.                 MOV                DPTR,#TL_S
  436.                 LCALL        SH_20
  437.                 LJMP        P_FB
  438. P_NL:                JNB                RIGH,P_NR
  439.                 MOV                DPTR,#TR_S
  440.                 LCALL        SH_20
  441.                 LJMP        P_FB
  442. P_NR:                MOV                DPTR,#STR_S
  443.                 LCALL        SH_20
  444. P_FB:                JB        FB,P_BA
  445.                 MOV                DPTR,#GO_S
  446.                 LCALL        SH_28
  447.                 LJMP        P_MAX
  448. P_BA:                MOV                DPTR,#BA_S
  449.                 LCALL        SH_28
  450. P_MAX:                JNB                MAX,P_MIN
  451.                 MOV                DPTR,#MAX_S
  452.                 LCALL        SH_30
  453. P_MIN:                JNB                MIN,P_NOR
  454.                 MOV                DPTR,#MIN_S
  455.                 LCALL        SH_30
  456. P_NOR:                MOV                DPTR,#NOR_S
  457.                 LCALL        SH_30
  458.                 DEC                R1
  459.                 POP                ACC
  460.                 RETI

  461. TAB:

  462. ;-- 字符串: 'a: 0.00 G_' --
  463. A_STR:        DB 41H,1AH,00H,10H,0EH,10H,10H,00H,27H,3FH

  464. ;-- 字符串: 'sl:00.0 cm/s_' --
  465. L_STR:        DB 53H,4CH,1AH,10H,10H,0EH,10H,00H,43H,4DH,0FH,53H,3FH

  466. ;-- 字符串: 'sr:00.0 cm/s_' --
  467. R_STR:        DB 53H,52H,1AH,10H,10H,0EH,10H,00H,43H,4DH,0FH,53H,3FH

  468. ;-- 字符串: 'TEMP:_' --
  469. TEMP:        DB 34H,25H,2DH,30H,1AH,3FH

  470. ;-- 字符串: 'WAIT _' --
  471. W_S:        DB 37H,21H,29H,34H,00H,3FH

  472. ;-- 字符串: 'START_' --
  473. STA_S:        DB 33H,34H,21H,32H,34H,3FH

  474. ;-- 字符串: 'STOP _' --
  475. STO_S:        DB 33H,34H,2FH,30H,00H,3FH

  476. ;-- 字符串: 'FAST_' --
  477. FA_S:        DB 26H,21H,33H,34H,3FH

  478. ;-- 字符串: 'SLOW_' --
  479. SL_S:        DB 33H,2CH,2FH,37H,3FH

  480. ;-- 字符串: 'STRICK_' --
  481. STR_S:        DB 33H,34H,32H,29H,23H,2BH,3FH

  482. ;-- 字符串: 'TURN L_' --
  483. TL_S:        DB 34H,35H,32H,2EH,00H,2CH,3FH

  484. ;-- 字符串: 'TURN R_' --
  485. TR_S:        DB 34H,35H,32H,2EH,00H,32H,3FH

  486. ;-- 字符串: 'U-TURN_' --
  487. UT_S:        DB 35H,0DH,34H,35H,32H,2EH,3FH

  488. ;-- 字符串: '      _' --
  489. EM_S:        DB 00H,00H,00H,00H,00H,00H,3FH

  490. ;-- 字符串: 'GO  _' --
  491. GO_S:        DB 27H,2FH,00H,00H,3FH

  492. ;-- 字符串: 'BACK_' --
  493. BA_S:        DB 22H,21H,23H,2BH,3FH

  494. ;-- 字符串: 'MAX SPEED_' --
  495. MAX_S:        DB 2DH,21H,38H,00H,33H,30H,25H,25H,24H,3FH

  496. ;-- 字符串: 'MIN SPEED_' --
  497. MIN_S:        DB 2DH,29H,2EH,00H,33H,30H,25H,25H,24H,3FH

  498. ;-- 字符串: 'NOR SPEED_' --
  499. NOR_S:        DB 2EH,2FH,32H,00H,33H,30H,25H,25H,24H,3FH

  500. ;-- 字符串: 'RUN  _' --
  501. RUN_S:        DB 32H,35H,2EH,00H,00H,3FH

  502.                 END
复制代码




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:214353 发表于 2017-6-24 22:51 | 只看该作者
很好啊!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表