标题: 单片机如何发出两路方波信号? [打印本页]

作者: jony1122    时间: 2022-10-19 19:12
标题: 单片机如何发出两路方波信号?
芯片:STC89C52
晶振:11.0592M

程序:

  1. #include<reg51.h>
  2. #include<math.h>
  3. typedef unsigned int u16;
  4. typedef unsigned char u8;

  5. u16 i;

  6. sbit Waveout1=P2^0; /*P2.0口输出方波*/
  7. sbit Waveout2=P0^0;
  8.                                  
  9. u8 TIMER1_L,TIMER1_H;

  10. void delay(u16 i)
  11. {
  12.     while(i--);
  13. }


  14. void main()
  15. {  
  16.     TMOD=0X01;//选择定时器T1,工作方式1,仅用TR1打开启动
  17.     ET1=1;        //开定时器T1中断
  18.     TR1=1;        //启动定时器T1
  19.     EA=1;        //开总中断
  20.       TIMER1_L=0xd8;                        //定时变量,定时器1初始时间高8位赋值,具体定时时间自己查资料                                10000         
  21.       TIMER1_H=0xff;      
  22.     while(1)
  23.     {
  24.     delay(50);
  25.     Waveout1=!Waveout1;   
  26.     delay(50);
  27.     Waveout2=!Waveout2;   
  28.     }                                             //方波初始频率 = 500Hz
  29. }

  30. //定时器T1的中断服务函数
  31. void T1_time() interrupt 3//定时器T1的中断序号为3
  32. {   
  33.     TH1=TIMER1_H;        //2^16=65536  2^8=256  TH0=0Xdc
  34.     TL1=TIMER1_L;          //取余                          TL0=0x00
  35.     Waveout1=!Waveout1;        //取反,产生方波
  36. }
复制代码

想实现图片中的两路方波,要做哪些修改呢,谢谢大家。

51hei图片_20221019190807.jpg (129.79 KB, 下载次数: 35)

想实现黄色和蓝色的两路方波

想实现黄色和蓝色的两路方波

51单片机发出两路正交信号.rar

42.5 KB, 下载次数: 3


作者: wulin    时间: 2022-10-19 21:21


  1. #include<reg51.h>

  2. typedef unsigned int u16;
  3. typedef unsigned char u8;

  4. u8 i;

  5. sbit out1=P2^0; /*P2.0口输出方波*/
  6. sbit out2=P2^1; /*P2.1口输出方波*/

  7. void main()
  8. {   
  9.         TMOD |= 0x10;                //设置定时器模式
  10.         TL1 = 0x18;                //设置定时初始值
  11.         TH1 = 0xFC;                //设置定时初始值
  12.         TF1 = 0;                //清除TF1标志
  13.         TR1 = 1;                //定时器1开始计时
  14.         ET1=1;        //开T1中断
  15.         EA=1;        //开总中断
  16.         while(1);
  17. }

  18. //定时器T1的中断服务函数
  19. void T1_time()  interrupt 3//定时器T1的中断序号为3
  20. {   
  21.         TL1 = 0x66;
  22.         TH1 = 0xFC;
  23.         if(i==0)out1=~out1;
  24.         if(i==1)out2=~out2;
  25.         i=++i%2;
  26. }
复制代码




作者: lsgzq    时间: 2022-10-19 21:37
用单片机产生两路方波,从不同的IO脚输出,这个很容易,但不管多高级的单片机,这样产生的二路信号都会有相位角差(时差)如果想产生二路没有相位角差的方波,简单的方法是用外围的硬件,比如反相器,这样产生的信号没有相位角差,具体硬件电路就不介绍了,可以自己在网上找相似的电路做参考。
作者: zhxiufan    时间: 2022-10-20 08:40
要实现占空比不一样的波形,你需要PWM控制的方法来编程。
作者: yzwzfyz    时间: 2022-10-21 09:23
选择两个IO口,如P1.1、P1.2。
按你的时序要求,改变IO口的状态,就可以了。
作者: pcbboy    时间: 2022-10-21 10:12
要PWM控制两路方波易如反掌,不占用硬件资源,定时器做的都不能用到稍微复杂的产品只是些演示版。
作者: ay247    时间: 2022-10-21 19:09
pwm的方法来编程,然后可以考虑用外围的芯片




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1