找回密码
 立即注册

QQ登录

只需一步,快速开始

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

用C语言处理0+0,1+1不报警0+1,1+0报警,这程序有问题老找不到怎么解决,高手帮忙.看

[复制链接]
跳转到指定楼层
楼主
ID:73176 发表于 2015-2-2 23:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include <REG51.H>
#include <shift.c>
#define unchar unsigned char
#define unint unsigned int
unchar tick;
unchar temp;       
sbit clock = P3^0;//时钟信号输入 (接印字板14脚)
sbit nor = P3^1;//印字反向吹气         (接印字板NOR9脚)
sbit sen  = P3^2;//光纤对照电眼          
sbit rest = P3^3;//复位信号输入
sbit stop = P1^0;//异常输出信号(送给PLC控制链条停)
sbit alrom = P1^1;//报警信号输出
bit al_flag;
bit re_enable;

void al_rest() //印字链条报警复位
{
        if (!rest) //复位片是不是没压下P3^3
                re_enable = 1;  //bit re_enable
                if (re_enable == 1)
                        if (rest)  //复位片是不是被压下
                        {
                                stop = 1;
                                if (!al_flag)  //报警信号正常,清除复位允许标记
                                        re_enable = 0;
                        }
}
       
/*主程序*/
void main(void)
{
   P1 = 0Xff;
        while (1)
        {
        //        al_rest();//报警复位
                       
                if (clock)        //判断是不是低电平       
                        tick = 1; //记号等于1
                        if (tick == 1) //记号是不是等于1
                                if (!clock)        //判断是不是变为高电平(高电平开始测试)
                                {
                                        temp = P3;//把P3口的值读给temp
                                        if (shift((temp&0x04),(temp&0x02 )))//带返回值return
                                        {
                                                al_flag = 0;        //排出异常
                                        }
                                                else
                                                {
                                                        al_flag = 1;
                                                }
                                                  if ((!al_flag) && (rest))
                                        {
                                                stop = 1;  //字印正常但电眼处于复位,报警 。
                                        }
                                                                 else
                                                        {
                                                                stop = al_flag;          //输出报警                                               
                                                        }
                                        tick = 0;
                                }        /**/
        }  
}

另一个文件
unchar shift(unchar sonsor, unchar blow){      blow_3 = blow_2; //吹气信号移两位          blow_2 = blow_1; //吹气信号移一位          blow_1 = blow;   //吹气信号送给blow_1
        a4 = a3;        a3 = a2;        a2 = a1;        a1 = aa;/*将吹气信号移两位后检测光纤信号*/        if ((sonsor == 0x04) && (blow_3 == 0x02))//(sonsor料遮掉对照电眼输出高电平)                     aa = 1;                            //采用逻辑与的方式(成立 aa = 1开始移位)           else              aa = 0;
/*结果是1返回1,0则返回0*/        if (a4 == 1)        //判断是不是移到48位,是的话返回1回去执行if (shift((temp&0x04),(temp&0x02 )))里面的程序                return 1;        //排出异常        else                 return 0;  //排出正常}                                               

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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