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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1815|回復: 6
打印 上一主題 下一主題
收起左側

完成串口發送測試

[復制鏈接]
跳轉到指定樓層
樓主
ID:326783 發表于 2018-5-13 21:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:242300 發表于 2018-5-13 22:28 來自手機 | 只看該作者
我來搶沙發
回復

使用道具 舉報

板凳
ID:326783 發表于 2018-5-14 23:09 | 只看該作者
今天回來有點晚,完成了控制器模擬接收G代碼的功能。。。。
回復

使用道具 舉報

地板
ID:326783 發表于 2018-5-16 23:13 | 只看該作者
終于畫出了第一張圖


回復

使用道具 舉報

5#
ID:326783 發表于 2018-5-16 23:25 | 只看該作者
珍惜自己的每一個想法,雖然付出的艱辛是常人不能體會的,但是成功帶來的喜悅能彌補一切。天道酬勤!曾有朋友問我,你學習編程的意義何在,能掙錢么?我也想過這個問題,并為之糾結。現在我可以回答他:編程本身就是一種快樂,這種快樂,不是錢能衡量的,也許就是人生的意義所在。

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:1 發表于 2018-5-17 00:07 | 只看該作者
好東東 樓主能分享點制作資料嗎?
回復

使用道具 舉報

7#
ID:326783 發表于 2018-5-29 22:45 | 只看該作者
(分享設計)雕刻機主程序分享!!!
  1. #include "IAP15W4K61S4.h"
  2. #include "Delay_m.h"
  3. #include "serial_xj.h"
  4. #include "TIMER.h"
  5. #include "m_XoY.h"
  6. #define m_Speed 15                        //設置電機速度
  7. #define pulse_Number 40        //單位為1時電機所需要的脈沖數
  8. #define uint   unsigned int
  9. #define uchar  unsigned char
  10. /*引腳定義區*/
  11. /**Step:        脈沖
  12. ***Dir :        方向
  13. ***Sleep:        驅動芯片睡眠使能
  14. ***En:                使能
  15. **/
  16. sbit X_Step=P1^2;
  17. sbit X_Dir=P1^1;
  18. sbit X_Sleep=P1^2;
  19. sbit X_En=P1^4;

  20. sbit Y_Step=P5^5;
  21. sbit Y_Dir=P5^4;
  22. sbit Y_Sleep=P3^3;
  23. sbit Y_En=P3^5;
  24. /*標志位定義區*/
  25. /**
  26. ***Flag0:                                完成一次單位運行標志位
  27. ***m_Flag:                                X/Y軸運行標志位
  28. ***Serval_Flag                        串行接收完成標志位
  29. **/
  30. bit Flag0=0, m_Flag=0, Serval_Flag=0;
  31. bit G_mode=0;                        //G代碼模式G0或G1
  32. bit Laser_En=1;                        //激光使能標志
  33. /*變量定義區*/
  34. /**
  35. **X_start:                                X軸開始坐標-整形變量
  36. **Y_start:                                Y軸開始坐標-整形變量
  37. **X_end:                                 X軸終點坐標-整形變量
  38. **Y_end:                                Y軸終點坐標-整形變量
  39. **/
  40. int X_start=0, Y_start=0, X_end=0, Y_end=0;

  41. uchar Rotation_dir;                //轉動方向
  42. uint  Circle_Step;                //總的步數-整形變量
  43. uchar q=0;                                //象限值
  44. uchar Re_value[40];                //接收字節數組

  45. /*子函數定義區*/
  46. void Pin_Init(void);        //引腳初使化
  47. void Timer_Creat(void);        //創建Timer0
  48. //void motor_Stop(void);
  49. void motor_Zx(void);        //X軸正轉運行一個單位
  50. void motor_Fx(void);        //X軸反轉運行一個單位
  51. void motor_Zy(void);        //Y軸正轉運行一個單位
  52. void motor_Fy(void);        //Y軸反轉運行一個單位
  53. void motor_Run(uint circle_step, uchar Q); //電機運行
  54. void G_code(void);
  55. /********主函數********/
  56. void main()
  57. {
  58.         //uchar i;
  59.         Serial1_Init();                        //串行通信初使化
  60.         Pin_Init();                                //引腳初使化
  61.         Timer_Creat();                         //定時器0初使化
  62.         mDelay(100);                        //待系統穩定
  63.         Send_data(0x55);
  64.         ES=1;                                        //開啟串行中斷使能
  65.         EA=1;                                        //開啟總中斷
  66.         while(1)
  67.         {
  68.                 if(Serval_Flag)                                                                                //如果串行信號接收正確
  69.                 {
  70.                         Serval_Flag=0;                                                                         //清除串行接收正確標志位
  71.                         G_code();                                                                                //分析G代碼,計算X_end,Y_end及激光是否加載
  72.                         //X_end=0;                                                                                //接收到給定的X坐標值
  73.                         //Y_end=0;                                                                                //接收到給定的Y坐標值
  74. //                        Send_data(X_start);
  75. //                        Send_data(Y_start);
  76. //                        Send_data(X_end);
  77. //                        Send_data(X_end);
  78.                         //Send_data(0xAA);
  79.                         Circle_Step=(Abs(Y_end-Y_start)+Abs(X_end-X_start));        //總步數
  80.                         q=Pd_XoY(X_start, Y_start, X_end, Y_end);                                //所在象限
  81. //                        Send_data(q);
  82. //                        Send_ata(0xAA);
  83.                         motor_Run(Circle_Step, q);                                                                //電機運行
  84.                         Y_start=Y_end;                                                                                        //運行完畢后將最終值賦與初使值
  85.                         X_start=X_end;
  86. //                        for(i=0;i<(Re_value[1]-47);i++)
  87. //                        {
  88. //                                Send_data(Re_value[i]);       
  89. //                        }
  90.                         Send_data(0x55);
  91.                         ES=1;         //打開串行中斷
  92.                 }
  93.         }
  94. }
  95. void Pin_Init(void)
  96. {
  97.         X_En=1;
  98.         X_Sleep=1;
  99.         Y_En=1;
  100.         Y_Sleep=1;
  101. }
  102. /******************************
  103. **函數功能:定時器創建并初使化
  104. **函數名:        Timer_Creat(void)                       
  105. */
  106. void Timer_Creat(void)
  107. {
  108.         TIM_InitTypeDef myTim_inittypedef;

  109.         myTim_inittypedef.TIM_Mode=TIM_16BitAutoReload;         //模式為8位重裝
  110.         myTim_inittypedef.TIM_Polity=0;                                                //不設工作優先級
  111.         myTim_inittypedef.TIM_Interrupt=ENABLE;                                //允許中斷
  112.         myTim_inittypedef.TIM_ClkSource=TIM_CLOCK_12T;                //時鐘為傳統12分頻
  113.         myTim_inittypedef.TIM_ClkOut=DISABLE;                                 //不允許外輸出時鐘
  114.         myTim_inittypedef.TIM_Value=65500;                                        //設置時間初值
  115.         myTim_inittypedef.TIM_Run=DISABLE;                                         //TR0=1
  116.         Timer_Inilize(Timer0,&myTim_inittypedef);
  117. }
  118. /******************************
  119. **函數功能:Timer0定時器中斷
  120. **函數名:        timer0_int(void)
  121. **運行變量:static uchar Count0運行頻率控制變量
  122. **                        static uint Count1 運行步數控制變量
  123. **                        m_Flag                           X/Y電機運行標志位
  124. **                        Flag0                           運行完畢標志位
  125. **運行常量:m_Speed                5
  126. **                        pulse_Number       2               
  127. */
  128. void timer0_int (void) interrupt TIMER0_VECTOR
  129. {
  130.         static uchar         Count0=0;                //運行頻率控制變量控制運行速度
  131.         static uint         Count1=0;                 //運行步數控制變量控制運行長度
  132.         if(Count0 == m_Speed)                        //頻率控制計數器等于m_Speed
  133.         {
  134.                 Count0=0;                                         //頻率控制變量=0
  135.                 if(m_Flag)                                        //當X/Y運行控制位=1
  136.                 {
  137.                         X_Step=!X_Step;                        //X軸動作
  138.                 }
  139.                 else
  140.                 {
  141.                         Y_Step=!Y_Step;                        //Y軸動作
  142.                 }
  143.                 Count1++;
  144.         }
  145.         else
  146.         {
  147.                 Count0++;
  148.         }
  149.         if(Count1==pulse_Number)
  150.         {
  151.                  Count0=0;
  152.                 Count1=0;
  153.                 TR0=0;
  154.                 Flag0=1;        //完成一次運轉
  155.         }
  156. }
  157. /*
  158. void motor_Stop(void)
  159. {
  160.         X_En=1;
  161.         X_Sleep=0;
  162.         Y_En=1;
  163.         Y_Sleep=0;
  164. }*/
  165. /*
  166. **X軸電機正向運行
  167. */
  168. /******************************
  169. **函數功能:Y軸電機正向運行
  170. **函數名:        motor_Fx(void)
  171. **運行變量:bit Flag0                                每一步運行完畢標志位
  172. **                        bit m_Flag                                Y電機工作                       
  173. */
  174. void motor_Zx(void)
  175. {
  176.         X_En=0;
  177.         X_Dir=0;
  178.         m_Flag=1;
  179.         TR0=1;
  180.         while(!Flag0);
  181.         Flag0=0;       
  182.         X_En=1;
  183. }
  184. /******************************
  185. **函數功能:X軸電機反向運行
  186. **函數名:        motor_Fx(void)
  187. **運行變量:bit Flag0                                每一步運行完畢標志位
  188. **                        bit m_Flag                                Y電機工作                       
  189. */
  190. void motor_Fx(void)
  191. {
  192.           X_En=0;
  193.         X_Dir=1;
  194.         m_Flag=1;
  195.         TR0=1;
  196.         while(!Flag0);
  197.         Flag0=0;       
  198.         X_En=1;
  199. }
  200. /******************************
  201. **函數功能:Y軸電機正向運行
  202. **函數名:        motor_Zy(void)
  203. **運行變量:bit Flag0                                每一步運行完畢標志位
  204. **                        bit m_Flag                                X/Y電機工作標志               
  205. */
  206. void motor_Zy(void)
  207. {
  208.         Y_En=0;                        //Y軸電機使能
  209.         Y_Dir=1;                //Y軸電機正轉
  210.         m_Flag=0;                //Y電機工作
  211.         TR0=1;                        //開啟定時器1中斷                       
  212.         while(!Flag0);        //等待完成步進
  213.         Flag0=0;                 //清除步進完成標志位
  214.         Y_En=1;
  215. }
  216. /******************************
  217. **函數功能:Y軸電機反向運行
  218. **函數名:        motor_Fy(void)
  219. **運行變量:bit Flag0                                每一步運行完畢標志位
  220. **                        bit m_Flag                                X/Y電機工作標志                       
  221. */
  222. void motor_Fy(void)
  223. {
  224.         Y_En=0;                        //Y軸電機使能
  225.         Y_Dir=0;                //Y軸電機反轉
  226.         m_Flag=0;                //Y電機工作
  227.         TR0=1;                        //開啟定時器1中斷                       
  228.         while(!Flag0);        //等待完成步進
  229.         Flag0=0;                 //清除步進完成標志位
  230.         Y_En=1;
  231. }
  232. /******************************
  233. **函數功能:電機運行直線插補
  234. **函數名:        motor_Run(uint circle_step, uchar Q)
  235. **形參說明:uint circle_step運行步數
  236.                         Q直線所在象限                                       
  237. */
  238. void motor_Run(uint circle_step, uchar Q)
  239. {
  240.         int Fm=0;
  241.         while(circle_step)
  242.         {
  243.                 if(Q==0)                //延Y軸運行
  244.                 {
  245.                         if(Y_end > Y_start)
  246.                         {
  247.                                   Rotation_dir=1;        //Y++
  248.                         }
  249.                         else
  250.                         {
  251.                                 Rotation_dir=2;        //Y--
  252.                         }
  253.                 }
  254.                 else if(Q==5)        //沿X軸運行
  255.                 {
  256.                         if(X_end > X_start)
  257.                         {
  258.                                 Rotation_dir=3;                        //X++
  259.                         }
  260.                         else
  261.                         {
  262.                                 Rotation_dir=4;                        //X--
  263.                         }
  264.                 }
  265.                 else if(Q==1)                                        //在第一象限
  266.                 {
  267.                         if(Fm>=0)
  268.                         {
  269.                                 Rotation_dir=3;                        //X++
  270.                                 Fm=Fm-(Y_end-Y_start);        //任意兩點
  271.                         }
  272.                         else
  273.                         {
  274.                                 Rotation_dir=1;                        //Y++
  275.                                 Fm=Fm+(X_end-X_start);         //任意兩點
  276.                         }
  277.                 }
  278.                 else if(Q==2)         //在第二象限
  279.                 {
  280.                         if(Fm>=0)
  281.                         {
  282.                                 Rotation_dir=4;                        //X--       
  283.                                 Fm=Fm-(Y_end-Y_start);
  284.                         }
  285.                         else
  286.                         {
  287.                                 Rotation_dir=1;                        //Y++
  288.                                 Fm=Fm+(X_start-X_end);
  289.                         }
  290.                 }
  291.                 else if(Q==3)        //在第三象限
  292.                 {
  293.                         if(Fm>=0)
  294.                         {
  295.                                 Rotation_dir=4;                //X--
  296.                                 Fm=Fm-(Y_start-Y_end);
  297.                         }
  298.                         else
  299.                         {
  300.                                 Rotation_dir=2;                //Y--
  301.                                 Fm=Fm+(X_start-X_end);
  302.                         }       
  303.                 }
  304.                 else                          //在第四象限
  305.                 {
  306.                         if(Fm>=0)
  307.                         {
  308.                                 Rotation_dir=3;                        //X++
  309.                                 Fm=Fm-(Y_start-Y_end);
  310.                         }
  311.                         else
  312.                         {
  313.                                 Rotation_dir=2;                //Y--
  314.                                 Fm=Fm+(X_end-X_start);
  315.                         }
  316.                 }
  317.                 switch(Rotation_dir)
  318.                 {
  319.                         case 1:
  320.                         {
  321.                                 motor_Zy();
  322.                         }
  323.                         break;
  324.                         case 2:
  325.                         {
  326.                                 motor_Fy();
  327.                         }
  328.                         break;
  329.                         case 3:
  330.                         {
  331.                                 motor_Zx();
  332.                         }
  333.                         break;
  334.                         case 4:
  335.                         {
  336.                                 motor_Fx();
  337.                         }
  338.                         break;
  339.                 }
  340.                 circle_step--;
  341.         }
  342. }
  343. /******************************
  344. **函數功能:串行中斷子函數
  345. **函數名:        Serial_inter()
  346. **運行變量:static uchar Count2          接收計數器
  347. **                        uchar Re_value[40]                串行數據寄存數組       
  348. **                        bit Serval_Flag                        接收完畢標志位
  349. */
  350. void Serial_inter() interrupt 4
  351. {
  352.         static uchar Count2=0;                        //設立串行接收計數器
  353.         if(TI)
  354.         {
  355.                 TI=0;
  356.         }
  357.         if(RI)
  358.         {
  359.                 RI=0;
  360.                 Re_value[Count2]=SBUF;                //接收數組進行數據接收
  361.                 if(Re_value[0]==0x47)                 //如果接收數組[0]="G"
  362.                 {
  363.                         if(Re_value[Count2]==0x0d)         //如果接收數組有一位為結束符
  364.                         {
  365.                                 Count2=0;                         //清除串行接收計數器
  366.                                 ES=0;
  367.                                 Serval_Flag=1;                //接收正確標志位置位
  368.                         }
  369.                         else                                         //否則
  370.                         {
  371.                                 Count2++;                          //串行接收計數器加1
  372.                         }
  373.                 }
  374.         }
  375. }
  376. /******************************
  377. **函數功能:G代碼解釋程序
  378. **函數名:        G_code(void)
  379. **運行變量:uchar Re_value[40]                串行數據寄存數組       
  380. **                        bit Serval_Flag                        接收完畢標志位
  381. */
  382. void G_code(void)
  383. {
  384.         uchar i;
  385.         uchar GXoYoZ=0;                                        //讀取X或Y或Z字符
  386.         uchar X_posi, Y_posi, Z_posi;
  387.         if(Re_value[2])                                //如果第二位等于1
  388.         {
  389.                 G_mode=1;                                 //G1模式
  390.         }
  391.         else
  392.         {
  393.                 G_mode=0;                                //G0模式
  394.         }
  395.         for(i=3;i<(Re_value[1]-47);i++)
  396.         {
  397.                 if(Re_value[i]==0x58)                        //當字符等于X
  398.                 {
  399.                         GXoYoZ=0x01;
  400.                         X_posi=i;
  401.                 }
  402.                 else if(Re_value[i]==0x59)                //當字符等于Y
  403.                 {
  404.                         GXoYoZ=0x02;
  405.                         Y_posi=i;
  406.                 }
  407.                 else if(Re_value[i]==0x5a)                //當字符等于Z
  408.                 {
  409.                         GXoYoZ=0x03;
  410.                         Z_posi=i;
  411.                 }
  412.                 else if(Re_value[i]==0x2e)                 //當字符等于.
  413.                 {
  414.                         switch(GXoYoZ)
  415.                         {
  416.                                 case 0x01:
  417.                                 {
  418.                                          if((i-X_posi)==3)
  419.                                         {
  420.                                                 X_end=(Re_value[i-2]-0x30)*100+(Re_value[i-1]-0x30)*10+(Re_value[i+1]-0x30);
  421.                                         }
  422.                                         else
  423.                                         {
  424.                                                 X_end=(Re_value[i-1]-0x30)*10+(Re_value[i+1]-0x30);
  425.                                         }
  426.                                         GXoYoZ=0;
  427.                                         X_posi=0;
  428.                                 }
  429.                                 break;
  430.                                 case 0x02:
  431.                                 {
  432.                                         if((i-Y_posi)==3)
  433.                                         {
  434.                                                 Y_end=(Re_value[i-2]-0x30)*100+(Re_value[i-1]-0x30)*10+(Re_value[i+1]-0x30);
  435.                                         }
  436.                                         else
  437.                                         {
  438.                                                 Y_end=(Re_value[i-1]-0x30)*10+(Re_value[i+1]-0x30);
  439.                                         }
  440.                                         GXoYoZ=0;
  441.                                         Y_posi=0;
  442.                                 }
  443.                                 break;
  444.                                 case 0x03:
  445.                                 {
  446.                                         if(Re_value[Z_posi+1]=='-')
  447.                                         {
  448.                                                 Laser_En=0;
  449.                                         }
  450.                                         else
  451.                                         {
  452.                                                 Laser_En=1;
  453.                                         }
  454.                                         GXoYoZ=0;
  455.                                         Z_posi=0;
  456.                                 }
  457.                                 break;
  458.                         }
  459.                 }
  460.                 else
  461.                 {
  462.                         ;
  463.                 }       
  464.         }
  465. }
復制代碼

評分

參與人數 1黑幣 +80 收起 理由
admin + 80 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久国产成人精品亚洲午夜 | 欧美理论 | 亚洲国产成人久久久 | 精品福利av导航 | 在线免费观看毛片 | 成人在线影视 | 999免费观看视频 | 欧美成人一区二区 | 日本在线综合 | 国产精品久久久久久妇女6080 | 精品欧美一区二区精品久久久 | 中文字幕1区 | 精品亚洲视频在线 | 天天干夜夜操 | 国产美女特级嫩嫩嫩bbb片 | 成人国产在线视频 | 国产精品亚洲成在人线 | 色999视频 | 色综合久久天天综合网 | 99re在线视频 | 午夜一区二区三区在线观看 | 一区二区福利视频 | 亚洲综合色视频在线观看 | 国产一区二区三区 | 国产免费一区二区三区 | 巨大荫蒂视频欧美另类大 | 久久看片| 九九视频在线观看视频6 | 亚洲一区二区久久 | 久久久精品一区 | 久久精彩视频 | 久久婷婷国产麻豆91 | a级片播放 | 六月色婷 | 精品一区在线看 | 精品中文在线 | 亚洲顶级毛片 | 亚洲第一区久久 | 亚洲国产精品精华素 | 亚洲精品中文字幕av | 日本久久精品视频 |