打印

I/O操作问题

[复制链接]
855|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dfsa|  楼主 | 2012-3-8 18:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的设计思想如下,单片机的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;都没有问题,所以我搞不懂,这样在终端里操作有什么问题呢

相关帖子

沙发
hsbjb| | 2012-3-8 18:39 | 只看该作者
把定时器关掉,直接用该IO驱动板子,看继电器会不会因为电磁干扰导致IO控制不住,你的控制逻辑,我没看出有问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

282

主题

2404

帖子

2

粉丝