利用上一篇的过零检测电路,过零信号接51单片机外部中断1(下降沿触发),单片机延时触发可控硅导通实现调速。
*感谢郭隆红网友帮我找出错误
部分程序:
/*********************************************************************
函数名称: void ISR_Int1OverZeroDetect() interrupt IE1_VECTOR
函数功能: 外部中断1过零信号捕获中断服务程序
入口参数:
返回 值:
*********************************************************************/
void ISR_Int1OverZeroDetect() interrupt IE1_VECTOR
{
switch(g_uchWindSpeed)//设置定时器延时
{
case 0:
{
TH1 = (65536 - 1800) / 256;
TL1 = (65536 - 1800) % 256;
break;
}
case 1:
{
TH1 = (65536 - 6000) / 256;
TL1 = (65536 - 6000) % 256;
break;
}
case 2:
{
TH1 = (65536 - 7000) / 256;
TL1 = (65536 - 7000) % 256;
break;
}
}
TR1 = 1; // 启动定时器1
/*********************************************************************
函数名称: void ISR_Timer1TriacsTrigger() interrupt TF1_VECTOR
函数功能: 定时器0触发可控硅中断服务程序
入口参数:
返回 值:
*********************************************************************/
void ISR_Timer1TriacsTrigger() interrupt TF1_VECTOR
{
TH1 = 0xFF; //定时器0延时200
TL1 = 0x38;
if(g_bTirggerFlag)
{
P2_5 = 1;
g_bTirggerFlag = 0;
TR1 = 0; // 关闭定时器0
}
else
{
P2_5 = 0;
g_bTirggerFlag = 1;
}
}
/*********************************************************************
函数名称: void Init_System(void)
函数功能: 系统初始化
入口参数:
返回 值:
*********************************************************************/
void System_Init(void)
{
TMOD = 0x11; //定时器0,1工作模式1, 16位定时方式
ET1 = 1; //使能定时器1溢出中断
EX0 = 1;
IT0 = 1;
EX1 = 0; //外部中断1禁止
IT1 = 1; //外部中断1下降沿触发中断
EA = 1; //全局中断使能
}
用户1553569 2009-10-21 00:49
用户1079511 2009-4-7 09:20
用户184440 2009-4-1 11:53
用户1079511 2009-3-24 10:36
用户184440 2009-3-23 22:26
用户1079511 2009-3-23 16:33
用户184440 2009-3-22 19:48
echo2005 2008-6-3 21:39
用户1079511 2008-6-2 09:06
用户919309 2008-6-1 23:15