一个单片机同时产生两个频率不同的方波.这个可能吗

如题所述

可以,只是频率不能太高 如定时100us中断一次,每中断一次将某一个管脚的电平状态态取反一次,就得到5kHZ方波,每中断2次或3次将另外一个管脚取反,就得到2·5KHZ或1·667kHZ的方波 如果定时很短,则中断很频繁,单片机就干不了其他工作了 因此产生方波频率不能太高
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-05-14
以51系列单片机为例,
用T0计时中断,由P1.0输出一个方波
用T1计时中断,由P1.1输出频率不同的另产生一个方波。
T0中断服务程序是:
CPL P1.0 ;定时至第一个方波半周期,P1.0输出电平反转,进入下半周期
MOV TH0, #XXH ;; 重装T0计数初值高字节
MOV TL0, #YYH ;; 重装T0计数初值低字节
RETI
T1中断服务程序是:
CPL P1.1 定时至第二个方波半周期,P1.1输出电平反转,进入下半周期
MOV TH1, #MMH ;; 重装T1计数初值高字节
MOV TL1, #NNH ;; 重装T1计数初值低字节
RETI本回答被网友采纳
第2个回答  2017-05-14
可以用单片机的定时器功能啊,你分别算出这两个方波的半周期,然后设置定时初值,到时就产生中断,然后进入中断程序,在中断程序中队输出口取反(开始的时候一定要置高或置低),总之要在1/2T内有电平的高低变换

一个单片机同时产生两个频率不同的方波.这个可能吗
可以,只是频率不能太高 如定时100us中断一次,每中断一次将某一个管脚的电平状态态取反一次,就得到5kHZ方波,每中断2次或3次将另外一个管脚取反,就得到2·5KHZ或1·667kHZ的方波 如果定时很短,则中断很频繁,单片机就干不了其他工作了 因此产生方波频率不能太高 ...

如何用51单片机输出不同频率的方波?
可以使用多个定时器,每个定时器输出不同的方波频率。每个定时器的计数器应配置为对应的频率,并使用每个定时器的比较寄存器生成方波。可以使用引脚分配多个方波,也可以使用外部设备(例如,模拟输出)。请确保编写程序以使用多个定时器,并且不会对其他功能造成影响。下面是一个使用51单片机同时输出不同频率方...

产生两种不同的方波信号:1khz与3khz,两种频率信号轮流切换;1khz频率...
改变定时器设置...如此周而复始的运行...

如何让单片机输出两组占空比相同、频率不同的方波,最好不使用定时器...
char PWM1=0,PWM2=0;while(1){ count1++;count2++;if(count1 == freq1){ count1 = 0;PWM1++;if(PWM1 <= 50)P1_0 = 1;else if(PWM1 <100)P1_0 = 0;else PWM1 = 0;} if(count2 == freq2){ count2 = 0;PWM2++;if(PWM2 <= 50)P1_1=1;else if(PWM2 <100)P...

有没有芯片能输出两个互补的方波信号?
用反相器啊!40系列的六反相器芯片4069。其中2个做振荡,剩下4个反相,一路用2个、一路用1个。还剩一个。

51单片机怎样用一个定时器输出两路方波
你的程序只有一处错误,我已通过测试,请将mian改为main.另外,如果方便请将#include <AT89X51.H>改为#include "regx52.h"请采纳,谢谢。

如何产生两个方波信号,一个是8KHZ,一个是大约125KHZ?
如果你精熟单片机,那么用最便宜的51单片机和一片晶振即可,这个方案硬件成本最低。如果你不熟悉单片机,那么用一片晶振、一片或几片计数器和与非门组成分频电路比较简单。

51单片机输出两路方波信号
interrupt void timer0(void) interrupt 1 { TH0=0xff;TL0=0xf8;P1&=0x01;} \/\/timer1\/counter1 interrupt void timer1(void) interrupt3 { TH1=0xf8;TL1=0xd9;P1&=0x02;} \/\/the main fun void main(void){ initTimer();TR0=1;ET0=1;TR1=1;ET1=1;EA=1;while(1);} ...

单片机如何产生多路不同频率的方波
如果将P1口的变化写成二进制的方式,你就容易理解了。P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 ...

C51 单片机输出两路方波 相位相差90度 怎么做啊
开一个定时器。定时周期为方波的1\/4。然后在定时器中断函数中 { static char status=0;status++;if (status>=4){status=0;} switch(status){ case 0:PORT_A=0;PORT_B=0;break;case 1:PORT_A=0;PORT_B=1;break;case 2:PORT_A=1;PORT_B=1;break;case 3:PORT_A=1;PORT_B=0;...

相似回答