大家好!我是单片机的初学者,现在遇到一个问题无法解决,希望能得到大家的帮忙,谢谢!
如题:
1、我做了一个边沿触发方式的外部中断0,当按键按下不放时按要求串口发送数据.
2、在P2.3口做了个独立式按键S1,当按下时向串口发送相关字符,松开按键时也发送相关字符。
3、出现问题:启动程序后按下外中断0无串口发送,不知道哪里有问题(好像一直运行While循环中(2)以下的代码中),烦请大家帮我看看代码,
看看是程序哪里有问题,还是思路有问题?谢谢!
#include
//#include
//#include
#include
#define uint unsigned int
typedef unsigned int uint2;
sbit p0_0 =P0^0;
sbit p2_0 =P2^0;
sbit p2_1 =P2^1;
sbit p3_2 =P3^2;
bit flag;
bit flagStep;
bit temp;
unsigned char start;
unsigned char stop;
void Send(unsigned char info);
void int_0();
void init(void);
void delay(uint k);
void delay(uint k)
{
uint data i,j;
for(i=0;i
{
for(j=0;j<121;j++)
{
;
}
}
}
void init(void)
{
EA=1; //中断总允许
EX0=1; //EX0=0时禁止外部中断;EX0=1时,允许外部中断0;
IT0=1; //外部中断0请求方式控制位:IT0=0为电平触发方式,INT0低电平有效;IT0=1时,INT0为边沿触发方式,INT0电平由高到低的负跳变有效。
//串口设置
SCON = 0x50; //串口方式1,允许接收
TMOD = 0x20; //定时器1定时方式2
TH1 = 0xfd; //11.0592MHz 9600 波特率
TL1 = 0xfd;
TR1 = 1; //启动定时器1
}
//INT0中断 由P3.2引脚产生
void int_0() interrupt 0 using 0
{
delay(100); //延时100ms
if(p3_2==0){flag=!flag;}
}
void Send(unsigned char info)
{
SBUF = info;
while(!TI);
TI = 0;
}
void main(void)
{
//
start='T';
stop='P';
flag =0;
init();
delay(100);
//判断程序启动时按键是否在按下状态,然后按相关要求发送数据。
if (p2_3==0)
{
flagStep =0;
}
else
{
flagStep =1;
}
temp=flagStep;
//
if (temp==0)
{
Send('P');
}
while(1)
{
if(flag)
{
//控制相关IO断电器动作
p2_1=1; //TX、RX开路
p2_0=1; //GND 开路
delay(10); //延时10ms
p0_0=1; //子机短路放电、电源2.6V断开
delay(1000); //延时1秒放电
p0_0=0; //子机通电、电源2。6V连接
delay(100); //延时10ms
p2_1=0; //TX、RX连接
p2_0=0; //GND 连接
delay(2000); //延时10ms
Send('C');
flag =0;
}
//(2)
//以下是看S1状态是否有改变,有则按相关要求发送数据。
delay(50);
flagStep=p2_3;
if (temp==flagStep)
{;}
else
{
temp=flagStep;
if (temp==1)
{
Send('T');
}
else
{
Send('P');
}
}
}
}