找回密码
 立即注册

QQ登录

只需一步,快速开始

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

为什么STC12C5A雕刻机固件和上位机连不上 求帮助

[复制链接]
跳转到指定楼层
楼主
ID:688775 发表于 2020-2-6 21:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 啊哈哈哈啊哈 于 2020-2-7 10:43 编辑

为什么STC12C5A雕刻机固件和上位机连不上,刚从网上下了个智成雕刻机上位机和固件下进去了,就是连不上,有没有高手帮忙看看程序有问题吗?

21ic下载_基于51单片机的三轴雕刻机上位机 使用说明 keil源码.rar

3.86 MB, 下载次数: 20, 下载积分: 黑币 -5

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

使用道具 举报

沙发
ID:688775 发表于 2020-2-7 10:44 | 只看该作者
  #include <STC12C5A60S2.H> #define uchar unsigned char #define uint unsigned int #define FOSC 12000000L      //System frequenc #define BAUD 2400           //UART baudrate sbit dirx=P1^0;        //方向 sbit stepx=P1^1;       //脉冲 sbit diry=P1^2;        //方向 sbit stepy=P1^3;       //脉冲 sbit hongwai=P1^4;       //红外管 uint x=0; uint y=0; bit ruoguang=1;           //弱光定位 uchar shuju[5];//头,功能码,颜色,附加参数,lrc uchar lrc(uchar *shu,chang)                  //lrc校验 {         uchar ii=0,ff=0;         for(ii=0;ii<chang;ii++)         {                 ff=ff+shu[ii];         }         ff=~ff+1;         return ff; }  void yanshi(uint a)                                //短时间延时 {                 while(a--);         } void yanshi2(uint a)                        //长时间延时 {                 uchar j=100;         while(a--)         {                 j=100;                 while(j--);         }                  } void UartInit(void)                //2400bps@12.000MHz {     SCON = 0x50;            //8-bit variable UART       TMOD = 0x20;            //Set Timer1 as 8-bit auto reload mode     TH1 = TL1 = -(FOSC/12/32/BAUD); //Set auto-reload vaule     TR1 = 1;                //Timer1 start run     ES = 0;                 //Enable UART interrupt     EA = 0;                 //Open master interrupt switch } void go(bit l)//1为X,0为Y.每调用一次相应的轴走一个像素,对应步进电机走8个脉冲 {         uchar i=0;         if(l)         {                 for(i=0;i<8;i++)                 {stepx=1;yanshi(1000);stepx=0;yanshi(1000);}//一个像素走8步         }         else         {                 for(i=0;i<8;i++)                 {stepy=1;yanshi(1000);stepy=0;yanshi(1000);        }         } } void zhixing()                        //对上位机发来的数据进行处理 {         uint j=0;         switch(shuju[1])         {                 case 1:                         //x轴减1                         dirx=0;go(1);                 break;                 case 2:                         //x轴加1                         dirx=1;go(1);                 break;                 case 3:                         //Y轴减1                         diry=1;go(0);                 break;                 case 4:                         //Y轴加1                         diry=0;go(0);                 break;                 case 5:                         //复位系统的x,y坐标,上位机和下位机都复位到0,0.                         x=0;y=0;                 break;                 case 6:                         //点灯亮灯                         j=shuju[2];                         j=j<<8;                         j=j|shuju[3];                                  hongwai=1;                         yanshi2(j);                         hongwai=0;                 break;                 case 7:                          //打开弱光定位,这个很实用哦                         ruoguang=1;                 break;                 case 8:                          //关闭弱光定位,这个很实用哦                         ruoguang=0;                 break;         }         shuju[0]=0;                 //每次执行完,清空接受数组         shuju[1]=0;         shuju[2]=0;         shuju[3]=0;         shuju[4]=0; } void main() {         uchar shu=0,jishu=0;         hongwai=0;         UartInit();         while(1)                        //大循环         {                                                  while(!RI)                                          //在这个循环里,实现弱光定位                 {                                                        //原理很简单撒,就是在红外管                         if(ruoguang)                        //端口发出不同占空比的方波就行了。                         {                                                //单片机的大部分时间都是在这个循环里。                                 hongwai=1;                                 yanshi(34);                                 hongwai=0;                                 yanshi(30);                         }                 }                 RI=0;                 shu = SBUF;                                   //有数据过来就读取                 if(jishu==0)                           //判断读数计数器为零的时候                 {                                                   //读到的数是不是数据头                         if(shu==0xff)                   //只有第一个数是0xff才往下面读哦!                         {                                 shuju[0]=0xff;                                 jishu++;                         }                         else                                                           {                                 jishu=0;                   //要不是的话就重新读。                         }                 }                 else                 {                         shuju[jishu]=shu;           //从第二个数开始就直接放在数组里                         jishu++;                           //然后计数加1.                                                          if(jishu==5)                   //判断是否读完4个数                         {                                         jishu=0;                   //读完后,清零                                 if(lrc(shuju,4)==shuju[4])          //验证数据                                 {                                         zhixing();                                 //执行命令                                         SBUF=99;                                 //返回确认码0x63,也就是99                                         while(!TI);                                         TI=0;                                 }                         }                 }                                          } }
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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