找回密码
 立即注册

QQ登录

只需一步,快速开始

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

新手关于单片机呼吸灯PWM程序的调试问题

[复制链接]
跳转到指定楼层
楼主
ID:848140 发表于 2020-12-9 22:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   新手仿照网上教程写了个PWM点亮一个LED小灯(sbit led = P1^2)程序。当我把一个LED小灯换成直接换成整个P1(连接8个led小灯)口,结果只有P1.0口的小灯由暗到亮,再从亮到暗,其余7个灯常亮,PWM一次只能驱动一位吗?还望高手指教。

单片机源程序如下:
/***********************
PWM-呼吸灯
*************************/
#include<reg52.h>

//sbit led = P1^2;

unsigned char t_count ; //累计每个周期中断次数的个数,满20清零,20*100us=2ms(pwm的周期)
unsigned int count ;  //累计占空比需要修改(增加还是减少)的中断次数的个数        1200*100us=120ms
unsigned char t ;  //累计高电平的个数
bit flag ; //标志位 0增加,1减少

void timer0init(void)
{
    EA = 1;
        TMOD = 0X02;
        TH0 = 0Xa3;
        TL0 = 0Xa3;
        ET0 = 1;
        TR0 = 1;
}

void main(void)
{
        t_count = 0;
        count = 0;
        t =10;           //占空比总50%开始
//        led = 1;

        timer0init();
    while(1);
}
/*每100us进入一次中断*/
void timer0() interrupt 1
{
   t_count++;
   count++;

   if(t_count == t)        
    {
             P1 = 0;
    }
        if(t_count == 19)
        {
           t_count = 0;
           P1 = 1;
        }


        if((count == 1200)&&(flag == 0))
         {
               count = 0;
               t++;
               if(t == 19)        //增加最大占空比 95%
                 {
                   flag = 1;
                 }
         }

        if((count ==1200)&&(flag == 1))
         {
                count = 0;
                     t--;
                    if(t ==10)        //减小到最低占空比 50%
                   {
                         flag = 0;
                   }
     }

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

使用道具 举报

沙发
ID:213173 发表于 2020-12-10 05:37 | 只看该作者
错误写法:P1 = 0; P1 = 1;
正确写法:P1 = 0x00; P1 = 0xff;
回复

使用道具 举报

板凳
ID:517466 发表于 2020-12-10 10:10 | 只看该作者
本帖最后由 suncat0504 于 2020-12-10 10:14 编辑

楼上正解。楼主没搞懂P1口赋值和P1口的位赋值的区别;
led=1,表示对P1口Bit2管脚赋值1。
P1=1,表示对整个P1口赋值,二进制值=00000001B,相当于对P1口的Bit0管脚赋值1,其它位赋值0。
回复

使用道具 举报

地板
ID:293363 发表于 2020-12-10 15:40 | 只看该作者
1楼正解,P1指的是8位,也就是P1.0-P1.7  正确的赋值是 P1=0x00;P1=0xff;
回复

使用道具 举报

5#
ID:848140 发表于 2020-12-10 22:47 | 只看该作者
对一位赋值和对一个字节赋值确实不一样,修改后跟预期的效果一样,感谢楼上几位的回复。
回复

使用道具 举报

6#
ID:390416 发表于 2020-12-31 15:23 | 只看该作者
这是我分享到51hei的  STC89单片机 定时器做PWM程序, http://www.51hei.com/bbs/dpj-200820-1.html
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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