找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求助!51单片机输出方波问题

[复制链接]
跳转到指定楼层
楼主
ID:708933 发表于 2020-3-15 17:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题目:12晶振   输出周期1s  占空比70%的方波;


我的代码:
#include "reg51.h"
#define uchar unsigned char        //数据类型宏定义
#define uint unsigned int
/*********************引脚定义********************/

#define TICK 10000
#define T100us 256-100
uchar C100us;
sbit out=P1^6;
/*********************主函数**********************/
void main(void)
{
        TMOD&=0xf0;
        TMOD|=0x02;
        TH0=T100us;
        TL0=T100us;
        TR0=1;
        EA=1;
        ET0=1;
        C100us=TICK;
        while(1);
}
void timer0int(void) interrupt 1
{
        C100us--;
        if(C100us==3000)
        {
                out=~out;       
        }
        if(C100us==0)
        {
                C100us=TICK;
                out=~out;
        }       
}



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

使用道具 举报

沙发
ID:708933 发表于 2020-3-15 17:00 | 只看该作者
仿真出来的方波是50%的,为什么会这样呢
回复

使用道具 举报

板凳
ID:234355 发表于 2020-3-15 18:22 | 只看该作者
#define TICK 10000 #define T100us 256-100 uchar C100us;
回复

使用道具 举报

地板
ID:234355 发表于 2020-3-15 18:23 | 只看该作者
#define TICK 10000  uchar C100us; TICK如何给 C100us赋值;数据类型不对
回复

使用道具 举报

5#
ID:384109 发表于 2020-3-15 19:45 | 只看该作者
uchar C100us;,变量类型错了吧,uchar应该最大只到255,应该要用uint
回复

使用道具 举报

6#
ID:275826 发表于 2020-3-15 19:54 | 只看该作者
改成
void timer0int(void) interrupt 1
{
        C100us--;
        if(C100us<=3000)
        {
                out=1;      
        }
       else out=0;

        if(C100us==0)
        {
          C100us=TICK;
               
        }      
}
回复

使用道具 举报

7#
ID:704545 发表于 2020-3-15 20:32 | 只看该作者
uchar C100us; 数据类型装不下10000,也比较不出3000,倒是可以比较0。改成uint吧
回复

使用道具 举报

8#
ID:642838 发表于 2020-3-15 22:17 | 只看该作者
out=~out;总在取反,占空比当然就是50%了,另外 C100us要定义成uint
回复

使用道具 举报

9#
ID:642838 发表于 2020-3-15 22:26 | 只看该作者
本帖最后由 odfggf 于 2020-3-16 08:40 编辑

改写成这样也行
uchar C100us=0;
void timer0int() interrupt 1
{
      
        if(C100us<3000)
            { out=1;  }   
              else
                { out=0; }
       C100us++;      C100us%=10000;
}
回复

使用道具 举报

10#
ID:213173 发表于 2020-3-16 08:14 | 只看该作者
2602482600 发表于 2020-3-15 17:00
仿真出来的方波是50%的,为什么会这样呢
  1. #include "reg51.h"
  2. #define uchar unsigned char        //数据类型宏定义
  3. #define uint unsigned int
  4. /*********************引脚定义********************/

  5. #define TICK 10000
  6. #define T100us 256-100

  7. sbit out=P1^6;
  8. uint C100us;

  9. /*********************主函数**********************/
  10. void main(void)
  11. {
  12.         TMOD&=0xf0;
  13.         TMOD|=0x02;
  14.         TH0=T100us;
  15.         TL0=T100us;
  16.         TR0=1;
  17.         EA=1;
  18.         ET0=1;
  19.         C100us=0;
  20.         while(1);
  21. }
  22. void timer0int(void) interrupt 1
  23. {
  24.         C100us++;
  25.         if(C100us<=7000)
  26.                 out=1;        
  27.         if(C100us>7000)
  28.                 out=0;
  29.         if(C100us==TICK)
  30.                 C100us=0;        
  31. }
复制代码
回复

使用道具 举报

11#
ID:708933 发表于 2020-3-19 18:22 | 只看该作者
谢谢大家,是类型不对
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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