打印

I/O操作问题

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

相关帖子

沙发
火箭球迷| | 2013-2-28 16:10 | 只看该作者
LZ,先这样,把定时器关掉

直接用该IO驱动板子,看继电器会不会因为电磁干扰导致IO控制不住

你的控制逻辑,我没看出有问题

使用特权

评论回复
板凳
hsbjb| | 2013-2-28 16:22 | 只看该作者
是不是电流问题呢

使用特权

评论回复
地板
xsgy123| | 2013-2-28 16:32 | 只看该作者
加一驱动级看看.
既然能够出现瞬间响应的话,说明逻辑上应该问题不大.
很可能是硬件.

单片机直接驱动继电器有点勉强

使用特权

评论回复
5
sinadz| | 2013-2-28 18:29 | 只看该作者
火箭球迷 发表于 2013-2-28 16:10
LZ,先这样,把定时器关掉

直接用该IO驱动板子,看继电器会不会因为电磁干扰导致IO控制不住

可以试试

使用特权

评论回复
6
txcy| | 2013-2-28 18:34 | 只看该作者
加驱动看看

使用特权

评论回复
7
shenmu2012| | 2013-3-4 18:15 | 只看该作者
看下继电器处的驱动电压跟电流够不够的

使用特权

评论回复
8
smilingangel| | 2013-3-13 21:31 | 只看该作者
这些问题的是需要慢慢地一步步找的,终归会找出原因的

使用特权

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

本版积分规则

175

主题

2496

帖子

1

粉丝