搜索
bottom↓
回复: 2

发布一个用串口来控制煤矿风机的小程序

[复制链接]

出0入0汤圆

发表于 2011-7-20 13:37:21 | 显示全部楼层 |阅读模式
原先发布在这个博客
http://hi.baidu.com/%B5%FB%CF%FE%C3%CE/blog/item/7f956f07feb898c07a89476b.html
一个很简单的程序,主要实现:
用串口调试助手工具,发送“!a1”,只有LED灯P1.1亮,并返回“!a1ok”,并且发送“!b1”,p1.1灯灭,返回“!b1ok";以此类推,发送“!a2”,只有LED灯p1.2亮,并返回“!a2ok”,并且发送“!b2”,p1.2亮灭,返回“!b2ok")

// by蝶晓梦,串行通信演示
// 2010-7-10 2:06:26 调试通过
#include <REG52.H>
#include <math.h>//数学库

unsigned char power2(unsigned char x) // 计算2的x次幂
{
  return((unsigned char)exp(x * log(2)));
}

void main(void) {

  SCON = 0x50; // 模式 1, 8-bit UART, 使能接收
  TMOD |= 0x20; // timer 1, mode 2, 8-bit reload
  TH1 = 0xF3; // 2400 波特率 @ 12MHz
  TL1 = 0xF3; // 如果不用12MHz改用11.0592MHz删除这行,TH1    = 0xFD;
  TR1 = 1; // timer 1启动
  EA = 1; // 打开总中断
  ES = 1; // 打开串口中断

  while (1) // 主循环
  {
    P1 &= 0xFE; // P1.0低电平亮灯
  }
}

void UART_SER(void)interrupt 4 // 串行中断服务程序
{
  static unsigned char Cache[2], i = 0; // 定义缓存
  unsigned char Temp; // 定义临时变量

  if (RI) // 判断是接收中断产生
  {
    RI = 0; // 标志位清零
    Temp = SBUF; // 读入缓冲区的值
    if (Temp != '!') {
      Cache = Temp;
      i++;
      if (i > 1) {
        if ((Cache[0] == 'a') || (Cache[0] == 'b')) {
          if (Cache[0] == 'a')
            P1 &= 0xFF - power2(Cache[1] - '0');
          else
            P1 |= power2(Cache[1] - '0');

          SBUF = '!'; // 发回电脑端
          while (!TI); // 等待数据传完
          TI = 0; // 发送标志位清零
          SBUF = Cache[0]; // 发回电脑端
          while (!TI); // 等待数据传完
          TI = 0; // 发送标志位清零
          SBUF = Cache[1]; // 发回电脑端
          while (!TI); // 等待数据传完
          TI = 0; // 发送标志位清零
          SBUF = 'O'; // 发回电脑端
          while (!TI); // 等待数据传完
          TI = 0; // 发送标志位清零
          SBUF = 'K'; // 发回电脑端
          while (!TI); // 等待数据传完
          TI = 0; // 发送标志位清零
        }

        i = 0;

      }
    }
    else
      i = 0;
    if (i > 1)
      i = 0;

  }
  if (TI)
    TI = 0; // 发送标志位清零
}


好吧,全都写到一块了

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2011-7-23 14:52:19 | 显示全部楼层
楼主大概是初学吧,不知道在哪个矿工作?这种程序只能自己写写而已,在煤矿用起来估计会比较麻烦,异步通讯没有校验是不行的最起码也得CRC校验。不知道楼主是想控制局部风机还是主风机,局部风机的工作电压660/1140,直接启动时秒杀所有没有隔离和容错机制的控制设备,附近大大小小开关数个到十几个,每个开关的负载都是660或1140,电流至少10A起,频繁启动的也不少,电网的谐波非常厉害,如果再有几个变频器,效果更好,估计都看不出来正弦波了。民用UPS电源用在我们井口直接无法工作(只放电,不充电),而井口的电网谐波是比较小的。
如果用在主风机上,我只想说,如果风机停转超过半小时,那么就会被定性为重大事故,这个矿估计至少是要停产整顿了。
没有其他意思,只是建议楼主多看看实际,我也曾经如此天真。
另,发送数据时最好关串口中断。

出0入0汤圆

发表于 2013-10-18 13:41:57 | 显示全部楼层
建议用modbus
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 16:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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