如何实现单片机输出信号中的频率变化
4个回答
展开全部
给你个程序你自己瞧去,
// 晶振使用12M
#include <AT89X51.h>// 单片机为AT89S51或52
void delay_ms(unsigned char xms)
{
unsigned char i;
while(--xms)
{
i=168;
while(--i);
}
}
/**************************************************
功能:串口中断服务程序
**************************************************/
void int_t0(void) interrupt 1
{
P1_2=!P1_2; // 频率输出IO,12M晶振时频率为500K/(256-TH0)
}
void main(void)
{
TMOD = 0x02;// T0设置为8位定时器
ET0 = 1; // 开T0中断
TH0 = TL0 = 0;// 填充初值
EA = 1;// 开总中断
TR0 = 1;// 打开T0定时器
while(1)
{
if(!P1_0)// 按下P10的按键时频率升高
{
delay_ms(100);
if(!P1_0)
{
++TH0;
while(!P1_0);
}
}
else if(!P1_1) // 按下P11的按键时频率下降
{
delay_ms(100);
if(!P1_1)
{
--TH0;
while(!P1_1);
}
}
}
}
// 晶振使用12M
#include <AT89X51.h>// 单片机为AT89S51或52
void delay_ms(unsigned char xms)
{
unsigned char i;
while(--xms)
{
i=168;
while(--i);
}
}
/**************************************************
功能:串口中断服务程序
**************************************************/
void int_t0(void) interrupt 1
{
P1_2=!P1_2; // 频率输出IO,12M晶振时频率为500K/(256-TH0)
}
void main(void)
{
TMOD = 0x02;// T0设置为8位定时器
ET0 = 1; // 开T0中断
TH0 = TL0 = 0;// 填充初值
EA = 1;// 开总中断
TR0 = 1;// 打开T0定时器
while(1)
{
if(!P1_0)// 按下P10的按键时频率升高
{
delay_ms(100);
if(!P1_0)
{
++TH0;
while(!P1_0);
}
}
else if(!P1_1) // 按下P11的按键时频率下降
{
delay_ms(100);
if(!P1_1)
{
--TH0;
while(!P1_1);
}
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
告你一个简单的方法,定时器2可以直接输出频率信号在P1.0口,改变定时器赋值就可以,52,55的单片机都有定时器2,可以有这个功能改变输出频率
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
改变定时时间不就能改变频率了,定义一个变量来控制定时时间,若手动就检测到按键后加一个值或减一个值。若自动 就按变化速度加或减。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询