打印

请教pwm,

[复制链接]
1366|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangqi412|  楼主 | 2007-3-26 12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include"reg51.h"

sbit pwmflag=P2^0;

#define uchar unsigned char

//*****************************pwm
//要先初始化定时器,并定义一个high全局,怎么做到不用全局变量?
//中断没法传参数
uchar high;

void time0() interrupt 1
{  //传递高电平时间,定时为百分之十周期,
static uchar count;      //百分数记数 中断一次记一次
static bit high_low,load;//高或低,装载标志 要静态。

if(!load)        //如果为0,要装载,标志变1
{
load=1;
if(!high_low)    //装载高还是装载低 为0装高电平
count=high;
else count=10-high;  //这个没有执行,为什么?if else语句有问题
}
high=~high_low;  //取反高低标志
count--;         //记数减1

if(!count)       //电平时间是否到?
{
load=0;          //要求装数
pwmflag=~pwmflag;//取反引脚电平 
}
}
//**********************
//如果是2khz,周期0.5ms ,十分之一周期50us ,误差不大。
//没办法做到百分之一精度。
dsh()      //定时器初始化
{
TMOD=0x01;
TH0=0xff;
TL0=0xce;
EA=1;
ET0=1;
TR0=1;    
}

void main()  //主
{
high=3;      //高电平百分比 0到10
dsh();
for(;;)
;
}

现在问题,1怎么样作到不要全局变量,
2,为什么我的if else没有起作用。if(!high_low)    //装载高还是装载低 为0装高电平
count=high;
else count=10-high;  //这个没有执行,为什么?if else语句有问题

谢谢。

相关帖子

沙发
huangqi412|  楼主 | 2007-3-26 12:33 | 只看该作者

第二个问题撤

第二个问题自己原来写错了。high=~high_low;  //取反高低标志

只问第一个问题,

使用特权

评论回复
板凳
ayb_ice| | 2007-3-26 13:15 | 只看该作者

随便说说

  如果你能做到与中断函数传递信息而不使用全局变量,估计你是神,而非常人...

使用特权

评论回复
地板
huangqi412|  楼主 | 2007-3-26 13:49 | 只看该作者

哦,谢谢。

使用特权

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

本版积分规则

622

主题

24960

帖子

18

粉丝