极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9181|回复: 0

【求助】大神们,帮帮小弟吧。坐等回复。。。[已解决]

[复制链接]
发表于 2014-6-5 16:03:48 | 显示全部楼层 |阅读模式
本帖最后由 Ethanwain 于 2014-6-5 17:09 编辑

百思不得骑姐的问题啊,求各位大神帮帮小弟,
小弟想把收到指令后Y00-Y05=0的状态延迟几秒后再恢复到Y00-Y05=1(延迟关闭的效果),程序是c,51单片机,我能看懂,就是怎么改都不成。。。

。。。用一个愚蠢的办法解决了这个问题,还是讨论一下吧,我修改的程序是在Y00=0;delay(k);后面加上Y00=1;这样造成的结果是只有在收到第二条指令的时候才会执行,索性发了一条废指令,然后这个愚蠢的办法就诞生了,但还是求解是什么原因。。。
[pre lang="c" line="1"]#include<STC12C5A60S2.H>                 //库文件
#include <intrins.h>
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int  //宏定义无符号整型
/********************************************************************
                            初始定义
*********************************************************************/

unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
/*定义八位数字量输入为单片机P0口*/
sbit X00=P1^0;
sbit X01=P1^1;
sbit X02=P1^4;
sbit X03=P1^5;
sbit X04=P1^6;
sbit X05=P1^7;
/*定义八位数字量输出IO口*/
sbit Y00=P2^0;  
sbit Y01=P2^1;
sbit Y02=P2^2;
sbit Y03=P2^3;
sbit Y04=P2^4;
sbit Y05=P2^5;
/********************************************************************
                            延时函数
*********************************************************************/
void delay(uchar t)
{
  uchar i,j;
   for(i=0;i<t;i++)
   {
            for(j=250;j>0;j--);
         { ;
         }
   }

}
/********************************************************************
                           输出处理函数
*********************************************************************/
void open_X3(uchar turm)
{
        char i;
        for(i=7;i>=0;i--)
        {  

                turm=_crol_(turm,1);
                switch(i)
                {
                  case 0:Y00=turm&0x01;break;
                  case 1:Y01=turm&0x01;break;
                  case 2:Y02=turm&0x01;break;
                  case 3:Y03=turm&0x01;break;
                  case 4:Y04=turm&0x01;break;
                  case 5:Y05=turm&0x01;break;
                  default:break;
                }
          }

}

/********************************************************************
              功能:串口初始化,波特率9600,方式1
*********************************************************************/
void Init_Com(void)
{
    //串口初始化
    TMOD = 0x20;
    SCON = 0x50;
    TH1 = 0xFd;
    TL1 = 0xFd;
    TR1 = 1;
        ES=1;                //开串口1中断         
   //485接口初始化       
    S2CON=0x50;        //方式1,八位数据,可变波特率                             
        AUXR1=0x00;        //1T工作方式                                  
        BRT=0XFD;         //设置波特率9600                                 
        AUXR=0x10;        //启动波特率发生器                                 
        EA=1;                 //开总中断                                                  
        IE2=0x01;        //开串口2中断                                 
}
/********************************************************************
                            配置P4口
*********************************************************************/
void P4_init(void)
{
    P4SW=0x70;   //配置P4口
    P4M0&=0x80;         
    P4M1&=0x80;
}
/********************************************************************
                            配置P4口
*********************************************************************/
void B485_send(uchar c)
{

  SBUF=S2BUF=c;
}
/********************************************************************
                            主函数
*********************************************************************/
void  main()
{
   Init_Com();//串口初始化
   P4_init();
   while(1)
   {              
       if(X00==0) {delay(20);Y00=0;while(!X00);Y00=1;B485_send(0XA1);}
           if(X01==0) {delay(20);Y01=0;while(!X01);Y01=1;B485_send(0XA2);}
           if(X02==0) {delay(20);Y02=0;while(!X02);Y02=1;B485_send(0XA3);}
           if(X03==0) {delay(20);Y03=0;while(!X03);Y03=1;B485_send(0XA4);}
           if(X04==0) {delay(20);Y04=0;while(!X04);Y04=1;B485_send(0XA5);}
           if(X05==0) {delay(20);Y05=0;while(!X05);Y05=1;B485_send(0XA6);}
        switch(dat) //接收数据判断
        {
                uchar k;
                k=10;
                case 0x00,0xAA,0xFF,0x00,0xEF: open_X3(0x00);delay(k);break; //  全开
                case 0x00,0xAA,0xEE,0x00,0xEE: open_X3(0xff);delay(k);break; //  全关
               
                case 0x00,0x06,0xff,0x00,0xF6: Y00=0;delay(k);break;           //  第一路开
                case 0x00,0x05,0xff,0x00,0xF5: Y01=0;delay(k);break;           //  第二路开
                case 0x00,0x04,0xff,0x00,0xF4: Y02=0;delay(k);break;           //  第三路开
                case 0x00,0x03,0xff,0x00,0xF3: Y03=0;delay(k);break;           //  第四路开
                case 0x00,0x02,0xff,0x00,0xF2: Y04=0;delay(k);break;           //  第五路开
                case 0x00,0x01,0xff,0x00,0xF1: Y05=0;delay(k);break;           //  第六路开


                default: break;                                           //  跳出
        }
   }
}
/********************************************************************
                          串口中断函数
*********************************************************************/
void commIntProc() interrupt 4
{
        if(TI)
                TI = 0;
        if(RI)
         {
          RI = 0;
          dat = SBUF;
         } //接收数据SBUF赋与dat       
}
/********************************************************************
                         串口二(485) 发送接收中断函数
*********************************************************************/
void uart2_isr()  interrupt 8
{
   if( S2CON & 0x01 )
         {
                S2CON &= ~0x01;
                   dat= S2BUF;       
         }
        if( S2CON & 0x02 )
        {
          S2CON&=0xfd;
        }
}         
/********************************************************************
                              结束
*********************************************************************/[/code]
回复

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-13 21:34 , Processed in 0.036401 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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