|
|
本帖最后由 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] |
|