找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机中输出PWM信号时采用全局变量为何会造成输出失真

[复制链接]
跳转到指定楼层
楼主
ID:79077 发表于 2015-5-6 15:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注:我用的是Proteus仿真,
#include<reg51.h>                                           //头文件
sbit pulse=P1^0;//脉冲输出口
sbit pulse2=P1^1;
int pwm1;  //此处为要输入的全局变量,为何设置全局变量pwm1和pwm2然后放到中断中让其输出,产生的频率会直接把计算式放到中断不同,而且是错误的?
int pwm2; //如果这样,要想从外部输入定时器信息怎么办?这些变量就算直接放到中断中,也会造成输出信号紊乱
  int pwm3;  
int pwm4;
void t0sss() interrupt 1        //定时器中断0为确定输出频率
{
          TH0=pwm1;//重新赋值,500就代表高低电平的半周期,TH和TL中的是计数器初值,中断则是计数器从初值到溢出之后发生的,输出一个信号,如果要产生脉宽,则设置第二个定时器中断,输出相反信号
    TL0=pwm2;

   pulse=~pulse;
   TR1=1;                                         //启动定时器中断1,类似于嵌套结构
   
}
void t1sss() interrupt 3        //定时器中断1,输出特定脉宽
{

      TH1=pwm3;//重新赋值,
    TL1=pwm4;
   pulse=~pulse;
   TR1=0;                         //

}
main()
{
   TMOD=0x11;//使用模式1
   TH0=pwm1;//重新赋值,这里是
   TL0=pwm2;
   TH1=pwm3;//重新赋值,
   TL1=pwm4;
   ET0=1;
   EA=1;
   TR0=1;
   ET1=1;

while(1);         //
   {
           pwm1=(65536-500)/256;//计划pwm信号改变值从这里开始,后期拟吧这个变量改变成外界直接输入
           pwm2=(65536-500)%256;
        pwm3=(65536-100)/256;
        pwm4=(65536-100)%256 ;

}
}

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

使用道具 举报

沙发
ID:79137 发表于 2015-5-6 23:11 | 只看该作者
你把pwm1   2  3  4  的值先初始化一下

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:79137 发表于 2015-5-6 23:12 | 只看该作者
你把pwm1   2  3  4  的值先初始化一下
回复

使用道具 举报

地板
ID:79077 发表于 2015-5-7 15:40 | 只看该作者
王怀宇 发表于 2015-5-6 23:12
你把pwm1   2  3  4  的值先初始化一下

好的,我试试,谢谢!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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