关于用51单片机通过可控硅来调光和过零检测问题的问题???求解,感激不尽!

我用可控硅通过延时改变导通角来调压,可是过零检测电路单独检测时有100hz的信号,接到单片机外部中断0就检测不到信号了,怎么回事?

源程序:
#include<reg51.h>
typedef unsigned char unchar;
//void int0(void) ;//同步信号
sbit sw=P1^0; //开关
sbit keyjia=P1^1; //亮++
sbit keyjian=P1^2; //暗--
sbit signal=P2^0; //可控硅信号
unchar liangdu=30; // 调光等级计数
sbit led=P1^7;
bit flag1=1;
bit flag2=1;
int count=0;
int flag=0;

void delaykt(void) //导通延时
{
unchar a;
for(a=2;a>0;a--);
}
void delay(int z) //可调延时
{
unsigned x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void keyscan() //键盘判断
{
if(sw==0)
{
delaykt();
if(sw==0)signal=0;while(!sw);
}
if(keyjia==0) //加键判断
{
delaykt();
if(keyjia==0)
{
if(flag1==1)
{
flag1=0;
liangdu++;
if(liangdu==95)
liangdu=30;
}
}
}
else if(keyjia!=0)
{
delaykt();
if(keyjia!=0)
flag1=1;
}
if(keyjian==0) //减键判断
{
delaykt();
if(keyjian==0)
{
if(flag2==1)
{
flag2=0;
liangdu=60;
if(liangdu==30)
liangdu=95;
}
}
}
else if(keyjian!=0)
{
delaykt();
if(keyjian!=0)
flag2=1;
}
}
void timepd() //同步标志判断与定时器设置
{
if(flag==1)
{
flag=0;
TMOD=0x01;
TH0=(65536-100*(100-liangdu))/256;
TL0=(65536-100*(100-liangdu))%256;
ET0=1;//打开T0中断
TR0=1;//启动定时器
}
}
void int0() interrupt 0 //外部中断100hz,10ms一个外部中断
{
//EX0=0;//关闭外部中断
//ET0=1;
//TR0=1;
flag=1;
led=~led;
}
void time0() interrupt 1 //定时中断程序
{
count=1;

}
void chufa() //可控硅触发
{
if(count==1)
{
count=0;
signal=0;
delaykt();
signal=1;
//delay9ms();
//signal=0;
//delaykt();
//signal=1;
}
//EX0=1;//开启外部中断
}

void main(void)
{
TMOD=0X11;
EA=1;//全局中断
IT0=1;//外部中断触发方式,高电平到低电平跳变
ET0=1;//定时器0中断允许位
EX0=1;//外部中断0中断允许位 EX0=1 开启外部中断

sw=1;//开关
keyjia=1;//亮++
keyjian=1;//亮--
liangdu=30;//亮度
flag=0;
signal=1;//触发信号
//led=1;
while(1)
{
keyscan();
timepd();
chufa();
}
}
求各位大神指点一下!

第1个回答  2015-05-17
使用另外的信号,检测0中断。。。。。。。使用表检测过0是否有信号 。。。。。。。。。追问

现在还是停留在仿真上不行,将一个时钟信号发生器接入外部中断,可以。接入外部中断的信号如果是脉冲信号就不可以,时钟信号可以。不知道哪里原因

本回答被网友采纳

关于用51单片机通过可控硅来调光和过零检测问题的问题???求解,感激...
源程序:#include<reg51.h>typedefunsignedcharun... 我用可控硅通过延时改变导通角来调压,可是过零检测电路单独检测时有100hz的信号,接到单片机外部中断0就检测不到信号了,怎么回事?源程序:#include<reg51.h>typedef unsigned char unchar;\/\/void int0(void) ;\/\/同步信号sbit sw=P1^0; \/\/开关 sbit keyji...

51单片机控制可控硅
用对继电器控制适合于功率不大的设备,1KW以内还可以,也不用过零检测。控制的设备功率再大了最是要过零检测了。用继电器可以免去隔离了,而且控制也容易,单片机控制一个三极管,再由三极管去驱动继电器,如果继电器很多的话,用三极管有点麻烦,就用ULN2803,一片可以控制8个继电器。要是用可控硅控制最好...

用51单片机 调光
你的电路构思不太好,目的一样但是电路构成的方法有很多的,你这种办法比较耗费元件,并且因为过多的原件而导致可靠性下降。实现你的要求有简单的办法,就是采用单片机产生可控的PWM(PWM(Pulse Width Modulation)控制——脉冲宽度调制技术。 通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形...

怎样利用51单片机发生PWM,通过调节PWM的占空比控制可控硅调节电机转速...
需要利用交流电的作触发信号,单片机生成延迟脉冲,不必使用pwm 注意是调节过零后的延迟时间,再出脉冲。

你好 我用单片机 通过过零检测产生中断 控制可控硅 但是 灯总是闪_百...
还有看你程序似乎是:(moc30=0)先开启可控硅然后根据dw的数值去决定延时多少再关控制信号(moc30=1),但是有一点是,可控硅若不是可控关断的话,就有问题了,普通可控硅是开通之后只要有电流就不会关断,它只会在交流电过零时自动关断.要想达到调光效果,可以这样控制:过零检测后开始延时(根据dw的数值...

可控硅过零检测的问题
就是把它冷冻到零度以下还能正常工作

过零检测可控硅调光,为什么要过零检测呢?可不可以就用pwm控制,改变高低...
所以希望开、关动作在电源电压值降为0或趋于0时进行。日常中我们未发现问题是因为所使用的电器功率相对偏小的,还不会出大问题,但是其所产生的电磁干扰就一直存在,尤其是可控硅开关,还周期性地随意通断,制造电磁污染;所以过零检测的意义和作用就在于此。不含过零检测功能的电路是无法控制可控硅,...

可控硅过零触发单片机控制的触发时刻要求?
回答问题的同志可能对可控硅整流、逆变不太懂吧。这个和你的负载有关。在可控硅调压应用中,特别电力系统应用,过零检测很重要,因为导通角的控制基准就是你的零点。触发脉冲有多种模式:1种是脉冲宽度较宽,1种是多脉冲串触发;而后一种方式效果比较好。可控硅本身是利用导通角来进行控制,在使用中...

51单片机怎么控制可控硅?
CON接51单片机IO口,低电平可控硅开通,高电平可控硅在交流电过零时自动关断。

单片机高手进!!我想用51单片机实现可控硅移相调压。
void timer0() interrupt 1 { TH0=(65536-3000)\/256;TL0=(65536-3000)%256;time=0;TR0=1;}

相似回答