我的设计思想如下,单片机的P15口通过一个1K的电阻(外部没上拉)连接到一个NPN三极管,通过控制三极管的通断,来控制继电器的吸合与关断,即P15为1继电器线圈吸合,P15为0继电器断开,程序设置P15为推挽输出,定时器中断为100ms,每3000次进入定时器中断,即5分钟(300s),改变下P15的状态,如果原来为1变为0,如果为0则为1,但是程序运行后,问题出现了:
每隔三百秒,可以听到继电器瞬间吸合,瞬间断开,P15不能维持高电平,麻烦帮忙看看了
#include"reg51.h"
#include"intrins.h"
typedef unsigned int WORD;
#define FOSC 5800000L
#define T1MS (65536-FOSC/120)
sfr P1M1=0x91;
sfr P1M0=0x92;
sfr AUXR=0x8e;
sfr CLK_DIV=0x97;
sbit P15=P1^5;
WORD count=0,mode;
void T0_isr() interrupt 1 using 1
{
TL0= T1MS;
TH0=T1MS>>8;
if(count--==0)
{
count=3000;
if(mode==0)
{P15=1;mode=1;}
else
{P15=0;mode=0;}
}
}
void main()
{
count=3000;
AUXR=0x00; //12T
CLK_DIV=0x00;//不分频
TMOD=0x01;//定时器,16位
TL0=T1MS;//
TH0=T1MS>>8;
//P1.5推
P1M0=0x20;
P1M1=0x00;
P15=0;//挽方式输出
mode=0;
ET0=1;
PT0=1;
TR0=1;
EA=1;
while(1);
}
如果不在中断里操作P15口,在初始化里把P15=1;或者P15=0;都没有问题,所以我搞不懂,这样在终端里操作有什么问题呢 |