51单片机中如何利用I/O口产生一定频率的方波

如题所述

可以用定时器中断实现这样的处理,这种方法重点在于根据你的晶振频率计算出定时器中断的参数,然后就可以很好的控制定时器中断触发的时间了。只要在中断处理过程里不断的让I/O口取反,就可以实现这样的方波了。

// 常数定义
#define TimeL 0x07 //定时器低位
#define TimeH 0xFE //定时器高位
// I/O口定义
sbit Sound= P1^6; //喇叭

// 主函数
main()
{
// 初始化中断

TMOD = 0x20; //00100000

TL0 = TimeL; //设置定时器0的中断产生周期,低位
TH0 = TimeH; //设置定时器0的中断产生周期,高位
ET0 = 1; //允许定时器0中断产生
TR0 = 1; //打开定时器0
EA = 1; //开总中断
// 进入死循环

while(1){
// 这里可以放置其他过程的处理

}
}

// 定时器中断的处理过程,这个过程关键在 interrupt 1 using 1 这里
// 这是根据MCU说明指定的参数,前面的完全可以自己定制名称,反正是无返回无参数就可以了
// 这里我用了类似VB事件的写法写了过程名称,不过怎么写名称无所谓
// 只要符合函数名规范就可以
void Timer0_Event(void) interrupt 1 using 1
{
TL0 = TimeL;
TH0 = TimeH;
Sound =! Sound;

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-14
用定时中断,比如1ms定时,然后在中断里面对IO口进行取反操作,如 P1.1 = ! P1.1 ,这样就可以输出方波了,且频率为500HZ

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网