打印

困死早里头了。。

[复制链接]
1796|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
冯冯冯冯|  楼主 | 2010-11-6 16:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <at89x52.h>

sbit PWM_PIN=P0^3;             //PWM引脚

#define  PWM_HIGH 300    //高电平持续时间                 
#define PWM_LOW  700    //低电平持续时间,占空比30%;
//初始化
void PWM_Init(void)
{
        TMOD=0x10;                                   //定时器1方式1,16位手动装载模式;
        TH1 =(65536-PWM_HIGH)/256 ;
        TL1 =(65536-PWM_HIGH)%256 ;
        PWM_PIN=1;                                   //初始化先输出高电平;
        ET1  = 1;                                   //开定时器1中断;
        EA= 1;                                                 //全局中断开
        TR1= 1;                                           //启动定时器1;
}
//名称: T1中断函数       
void Timer1_ISR(void) interrupt 3
{   //每次取反后重新设置新值
        if(PWM_PIN)  
        {
        PWM_PIN = 0;
           TH1 = (65536 - PWM_LOW) / 256 ;
           TL1 = (65536 - PWM_LOW) % 256 ;
        }
        else   
        {
                PWM_PIN = 1;
                   TH1 = (65536 - PWM_HIGH) / 256 ;
                   TL1 = (65536 - PWM_HIGH) % 256 ;
        }  
}

//名称: 主函数                 
       
void main()
{               
        PWM_Init();
        while(1)
        {         
               
        }
}



我想请教大家帮忙看看,只要把PWM_HIGH和PWM_LOW宏定义改成unsigned int ,运行出来的PWM波就错的不知道那里去了。这时候为什么呢?

相关帖子

沙发
dong_abc| | 2010-11-6 16:57 | 只看该作者
PWM_HIGH和PWM_LOW  都超过256了,可以是unsigned int。

我没看懂你想干什么?

使用特权

评论回复
板凳
liang7143| | 2010-11-6 18:10 | 只看该作者
在中断中使用的变量,加关键字volatile试试。

使用特权

评论回复
地板
chen3bing| | 2010-11-6 18:50 | 只看该作者
我用伟福仿真了一下,两种情况TH1和TL1的值是一样的。
但是用PROTEUS仿真,占空比却不一样。搞不懂!

使用特权

评论回复
5
冯冯冯冯|  楼主 | 2010-11-8 07:34 | 只看该作者
2# dong_abc


我要出PWM波,上面是原来的程序,一切OK,但是只要把define改成unsigned int,波形出错。。就这个意思。。

使用特权

评论回复
6
冯冯冯冯|  楼主 | 2010-11-8 07:36 | 只看该作者
4# chen3bing

嗯嗯,啊,真的,我就是PROTUES仿真的,但是只要改成UNSIGNED INT 波形就错了,跟设定的就差远了。

使用特权

评论回复
7
冯冯冯冯|  楼主 | 2010-11-8 07:36 | 只看该作者
3# liang7143



我试试啊

使用特权

评论回复
8
ayb_ice| | 2010-11-8 10:42 | 只看该作者
这应该是PROTUES的问题,
这样试试
TH1 =(uint)(65536-PWM_HIGH)/256 ;
  TL1 =(uint)(65536-PWM_HIGH)%256 ;

使用特权

评论回复
9
冯冯冯冯|  楼主 | 2010-11-8 11:16 | 只看该作者
8# ayb_ice


(⊙o⊙)嗯,O(∩_∩)O谢谢,现在仿真好了,之前我在keil里追踪TH1和TL1里的值也是在程序修改之后写不进去,O(∩_∩)O谢谢。

使用特权

评论回复
10
hwq362202| | 2010-11-9 16:46 | 只看该作者
:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

659

帖子

1

粉丝