找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1501|回复: 3
收起左侧

通过电脑发送数据控制单片机继电器的程序求助

[复制链接]
ID:394056 发表于 2018-9-7 10:52 | 显示全部楼层 |阅读模式
能利用这段代码控制继电器的,(就是电脑通过发送一段7E 80 00 01 00 00 80 AA 00 01 01 00 DE 62 7E 的指令来控制继电器。
请大神指导啊)

  1. #include "reg52.h"
  2. #include "init.h"
  3. #include "uart.h"
  4. #include "delay.h"
  5. #include "ad.h"
  6. #include "flash.h"
  7. #include "iic.h"
  8. //串口数据的格式
  9. #define  HEAD  0XF1 //帧头
  10. #define VERSION 0X15   //发送版本
  11. #define YUAN 0XB1   //源
  12. #define FH_VERSION 0XB1   //接收版本
  13. #define FH_YUAN 0XBF   //接收版本
  14. #define  ZI  0XD1   //  控制字
  15. #define  LEN1  0X28    //24   =4+20+1
  16. uint xdata  num=0;
  17. uint xdata n;
  18. extern uchar xdata buf[35];
  19. extern uchar i;
  20. uchar uart1_flag=0;
  21. //数组定义
  22. uchar  xdata fs_buf[46];
  23. uchar  xdata rbuf[]={
  24. 0x7E,0x80, 0x00, 0x01,
  25. 0x00, 0x00, 0x80, 0xAA,
  26. 0x00, 0x01, 0x01, 0x00,
  27. 0xDE, 0x62, 0x7E};
  28. uchar  xdata  uart2_rbuf[46];
  29. void uart1_fs();
  30. void uart2_fs();
  31. void receive_deal();
  32. sbit jdq1=P0^0;
  33. sbit jdq2=P0^1;
  34. void main()
  35. {
  36. Time_init();  //定时器初始化
  37. PCA_init();    //pca端口初始化
  38. InitUart() ;
  39. EA=1;
  40. ES=1;
  41. jdq1=jdq2=0;
  42. RI=1;
  43. while(1)
  44. {

  45.   
  46.   jdq1=1;
  47.   mDelay(100);
  48.   }

  49. }
  50. void uart_js() interrupt 4    //RI==1时执行串口中断
  51. {
  52. static unsigned char count;
  53. uchar xdata  receive1_xorg=0;

  54. if(RI==1)
  55.   {
  56.   RI=0;
  57.   rbuf[count]=SBUF; //保存数据  
  58.   if(uart1_flag!=0)
  59.    {
  60.    count=0;
  61.    return;
  62.    }
  63.   count++;
  64.   if((count==1)&&(rbuf[0]!=0x7E))//0  0xf1   
  65.          
  66.    {
  67.    count=0;
  68.    jdq1=!jdq1;
  69.    }            
  70.   else if((count==2)&&(rbuf[1]!=0x80)) //1 0xb1
  71.    {
  72.     count=0;
  73.    }
  74.   else if((count==3)&&(rbuf[2]!=0x00)) //1 0xbf
  75.    {
  76.     count=0;
  77.    }
  78.   else if((count==4)&&(rbuf[3]!=0x01))    //rbuf[3]     
  79.    {  
  80.    
  81.      count=0;
  82.    }
  83.   else if((count==5)&&(rbuf[4]!=0x00))   //rbuf[4]     
  84.    {  
  85.      count=0;
  86.    }
  87.   else if(count==6&&rbuf[5]==(rbuf[0]^rbuf[1]^rbuf[2]^rbuf[3]^rbuf[4]))     //count=6  实际接收6个字节 0-5  rbuf[5]
  88.     {
  89.     count=0 ;
  90.     uart1_flag=rbuf[3];
  91.      ES=0;   
  92.     }
  93.   else if(count==7&&(rbuf[6]==(rbuf[0]^rbuf[1]^rbuf[2]^rbuf[3]^rbuf[4]^rbuf[5])))  //count=7  实际接收7个字节 0-6
  94.     {
  95.     count=0  ;
  96.     uart1_flag=rbuf[3];
  97.     ES=0;
  98.     }
  99.   else if(count==8&&(rbuf[7]==(rbuf[0]^rbuf[1]^rbuf[2]^rbuf[3]^rbuf[4]^rbuf[5]^rbuf[6])))  //count=7  实际接收7个字节 0-6
  100.     {
  101.     count=0  ;
  102.     uart1_flag=rbuf[3];
  103.     ES=0;
  104.     }
  105. //  else if(count>8&&count<45) //6-42   
  106. //   {   
  107. //   }
  108. //  else if(count==45)     //0-44  
  109. //   {
  110. //    receive1_xorg=0;
  111. //    count=0;
  112. //    for (n=0;n<44;n++) //0-43
  113. //     {
  114. //     receive1_xorg^= rbuf[n] ;
  115. //    }
  116. //    if(rbuf[44]==receive1_xorg)   //通讯模块采集数据
  117. //     {
  118. //    uart1_flag=rbuf[3];
  119. //    ES=0;
  120. //    }         
  121. //   }
  122.   else if(count>8)
  123.    {
  124.    count=0;
  125.    }
  126.   }
  127. }
复制代码


回复

使用道具 举报

ID:394056 发表于 2018-9-7 11:41 | 显示全部楼层
搞了半天也没搞好啊,请大神给个建议或者方法吧
回复

使用道具 举报

ID:303383 发表于 2018-9-7 14:38 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

ID:394056 发表于 2018-9-7 15:51 | 显示全部楼层
小猫猫爱吃鱼 发表于 2018-9-7 14:38
你好!
1、你没有说明,发送数据的格式含义
2、你发送的数据和你定义的串口数据格式不一致

具体在哪里还请说明
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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