找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1174|回复: 6
打印 上一主题 下一主题
收起左侧

单片机如何发出两路方波信号?

[复制链接]
回帖奖励 30 黑币 回复本帖可获得 10 黑币奖励! 每人限 1 次
跳转到指定楼层
#
芯片: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, 下载次数: 9)

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

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

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

42.5 KB, 下载次数: 3

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

6#
ID:1048438 发表于 2022-10-21 19:09 | 只看该作者
pwm的方法来编程,然后可以考虑用外围的芯片
回复

使用道具 举报

5#
ID:25310 发表于 2022-10-21 10:12 | 只看该作者
要PWM控制两路方波易如反掌,不占用硬件资源,定时器做的都不能用到稍微复杂的产品只是些演示版。
回复

使用道具 举报

地板
ID:123289 发表于 2022-10-21 09:23 | 只看该作者
选择两个IO口,如P1.1、P1.2。
按你的时序要求,改变IO口的状态,就可以了。
回复

使用道具 举报

板凳
ID:121859 发表于 2022-10-20 08:40 | 只看该作者
要实现占空比不一样的波形,你需要PWM控制的方法来编程。
回复

使用道具 举报

沙发
ID:593706 发表于 2022-10-19 21:37 | 只看该作者
用单片机产生两路方波,从不同的IO脚输出,这个很容易,但不管多高级的单片机,这样产生的二路信号都会有相位角差(时差)如果想产生二路没有相位角差的方波,简单的方法是用外围的硬件,比如反相器,这样产生的信号没有相位角差,具体硬件电路就不介绍了,可以自己在网上找相似的电路做参考。
回复

使用道具 举报

楼主
ID:213173 发表于 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. }
复制代码



评分

参与人数 1黑币 +12 收起 理由
jony1122 + 12 很给力!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表