7643|58

86

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

51单片机pwm波求助 [复制链接]

9芯积分
#include

#define uint unsigned int
#define uchar unsigned char

//参数定义
sbit pwm=P1^0;
sbit key_plus=P3^6;
sbit key_reduce=P3^7;
sbit duan=P2^6;
sbit wei=P2^7;

uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint i;
char j,k=50;

//子函数声明
void timer_init();
void delayms(uint x);
void show(int a);
void adjust_pwm();

//主函数
void main()
{
  timer_init();
  while(1)
  {
    adjust_pwm();
  }
}

//定时器0初始化
void timer_init()
{
  TMOD=0x01;
  TH0=(65536-1000)/256;
  TL0=(65536-1000)%256;
  ET0=1;
  TR0=1;
  EA=1;
}

//定时器0服务函数
void timer0() interrupt 1
{
  TH0=(65536-1000)/256;
  TL0=(65536-1000)%256;
//  if(i==10)         //100HZ
//  {
//   i=0;
//   j++;
//   if(j==100) j=0;
//  }
   j++;           //1000HZ
  if(j==100) j=0;
  if(j   {
   pwm=1;
  }
  else
  pwm=0;
}

//延时函数 x 毫秒
void delayms(uint x)
{
   uint i,j;
   for(i=x;i>0;i--)
   for(j=110;j>0;j--);
}

//数码管显示
void show(int a)
{
  int shi,ge;
  shi=a/10;
  ge=a%10;

  //显示十位
  duan=1;
  P0=tab[shi];
  duan=0;
  P0=0xff;
  wei=1;
  P0=0xfe;
  wei=0;
  delayms(3);

  //显示个位
  duan=1;
  P0=tab[ge];
  duan=0;
  P0=0xff;
  wei=1;
  P0=0xfd;
  wei=0;
  delayms(3);
}

//按键控制速度
void adjust_pwm()
{
if(key_plus==0)
{
  delayms(5);
  if(key_plus==0)
  {
    k++;
   if(k>99)
   {
           k=0;
   }
   while(!key_plus);
  }
}
if(key_reduce==0)
{
  delayms(5);
  if(key_reduce==0)
  {
   k--;
   if(k<0)
   {
           k=99;
   }
   while(!key_reduce);
  }
}
   show(k);
}



此帖出自51单片机论坛

最新回复

路过,学习了  详情 回复 发表于 2015-7-19 17:24
点赞 关注
 

回复
举报

86

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
这是一个占空比可调0-99级的pwm波,每个中断是10us,一共100个中断,应该是1000us,也就是1000hz,为什么示波器显示200多hz
此帖出自51单片机论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
求大神帮忙看一下
此帖出自51单片机论坛
 
 
 

回复

1万

帖子

2853

TA的资源

管理员

4
 
本帖最后由 okhxyyo 于 2015-7-11 18:52 编辑

不好意思看错了还以为你这个j只有个全局设定
此帖出自51单片机论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 

回复

1万

帖子

2853

TA的资源

管理员

5
 
本帖最后由 okhxyyo 于 2015-7-11 18:55 编辑

你的全局的那个j变量初始值不确定吧?你初始下再看看对不对?
此帖出自51单片机论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 

回复

606

帖子

20

TA的资源

一粒金砂(高级)

6
 
STC15系列1T周期,12M晶振
void Timer0Init(void)                //10微秒@12.000MHz
{
        AUXR |= 0x80;                //定时器时钟1T模式
        TMOD &= 0xF0;                //设置定时器模式
        TL0 = 0x88;                //设置定时初值
        TH0 = 0xFF;                //设置定时初值
        TF0 = 0;                //清除TF0标志
        TR0 = 1;                //定时器0开始计时
}
如果用11.0592的晶振,10us定时,会有0.37%误差。
不知道楼主用的是哪款芯片,晶振是多少?
此帖出自51单片机论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(中级)

7
 
okhxyyo 发表于 2015-7-11 18:36
你的全局的那个j变量初始值不确定吧?你初始下再看看对不对?

好的我先试一下
此帖出自51单片机论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(中级)

8
 
ketose 发表于 2015-7-11 19:43
STC15系列1T周期,12M晶振
void Timer0Init(void)                //10微秒@12.000MHz
{
        AUXR | ...

我的是89C52,还不是1T,晶振11.0592的,问题是示波器才200多hz
此帖出自51单片机论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(中级)

9
 
okhxyyo 发表于 2015-7-11 18:31
不好意思看错了还以为你这个j只有个全局设定

在前面j有初始值的啊,char j,k=50,为什么还不行=-=求助
此帖出自51单片机论坛
 
 
 

回复

1万

帖子

2853

TA的资源

管理员

10
 
automomaek 发表于 2015-7-11 20:11
在前面j有初始值的啊,char j,k=50,为什么还不行=-=求助

没有哦,你这里只给k赋值了j没有赋值哦
此帖出自51单片机论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 

回复

86

帖子

0

TA的资源

一粒金砂(中级)

11
 
okhxyyo 发表于 2015-7-11 20:22
没有哦,你这里只给k赋值了j没有赋值哦

您方便给一下初值吗,我调了j=20还是不行呢
此帖出自51单片机论坛
 
 
 

回复

1万

帖子

2853

TA的资源

管理员

12
 
我前面说得可能是没赋初值的原因并不是这个原因,我后来又去确认了下全局变量的话是不赋初值的话会默认为0的,并不是随机的。
此帖出自51单片机论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 

回复

10

帖子

0

TA的资源

一粒金砂(初级)

13
 
你定义的j为char,char最大只能为256,这里超出了范围了
此帖出自51单片机论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(中级)

14
 
cwq 发表于 2015-7-11 20:53
你定义的j为char,char最大只能为256,这里超出了范围了

j最大是100啊,char不行吗
此帖出自51单片机论坛
 
 
 

回复

1万

帖子

2853

TA的资源

管理员

15
 
请问你的示波器测频率你怎么计算的?是不是有示波器时间轴单位弄错了?
此帖出自51单片机论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 

回复

86

帖子

0

TA的资源

一粒金砂(中级)

16
 
不是,我是直接用示波器测量的数值,不用数单位
此帖出自51单片机论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(中级)

17
 
okhxyyo 发表于 2015-7-11 20:57
请问你的示波器测频率你怎么计算的?是不是有示波器时间轴单位弄错了?


不是,我是直接用示波器测量的数值,不用数单位
此帖出自51单片机论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(中级)

18
 
cwq 发表于 2015-7-11 20:53
你定义的j为char,char最大只能为256,这里超出了范围了

而且我把char j,k=50改为int j,k=50也不行,示波器频率还是200hz多一点
此帖出自51单片机论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(中级)

19
 
求回复啊=-=
此帖出自51单片机论坛
 
 
 

回复

1万

帖子

2853

TA的资源

管理员

20
 
本帖最后由 okhxyyo 于 2015-7-11 21:51 编辑

我是说是不是水平衰减了?你示波器直接看数值出来的是真正的最后的值了么?还是要乘以衰减?
此帖出自51单片机论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表