久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5186|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费在线观看一区二区三区 | 毛片a级毛片免费播放100 | 亚洲一区二区三区在线播放 | 国产女人叫床高潮大片免费 | 亚洲电影一级片 | 嫩草研究影院 | 人人九九精 | 毛片久久久 | 毛片区| 亚洲激情一区二区 | 国产中文字幕网 | 国产精品自拍啪啪 | 亚洲日本视频 | 欧美色综合 | 国产精品久久久久久久久久免费看 | 成人综合一区二区 | 日本成年免费网站 | 一区二区三区在线 | 欧 | 欧美成人精品欧美一级 | 欧美激情a∨在线视频播放 成人免费共享视频 | 一级特黄在线 | 五月综合激情网 | 日本免费黄色 | 日韩精品一区二区三区四区 | 日本福利片 | 毛片网站免费观看 | 亚洲一区二区三区视频 | 91欧美激情一区二区三区成人 | 嫩草一区二区三区 | 欧美又大粗又爽又黄大片视频 | 亚洲精品电影在线 | 国产97人人超碰caoprom | 午夜视频在线免费观看 | 国产精品日韩高清伦字幕搜索 | 国产欧美精品区一区二区三区 | 伊人在线 | 天天射天天干 | 蜜桃传媒一区二区 | 欧美成人激情 | 第一区在线观看免费国语入口 | 欧美日韩在线视频一区 |