打印

一个关于脉宽调制的C51程序设计的问题

[复制链接]
2350|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
borlane|  楼主 | 2007-5-22 11:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
手头上有一个11个INPUT的8位串口输出的A/D转换芯片,在其某个输入端接上电位器作为输入源,要求输出一个周期自己定义,但是占空比大小要随着电位器调节而变化的脉冲信号,要在示波器上演示.我自己的编写程序的思路比较简单,看下下面的主程序清单:



 while(1)

 { ADRead(0,&tmp);
   Interval = tmp<<2;//左移两位乘四
   PortWrite(0,Uptime);}

void timer0(void) interrupt 1
{
 TR0=0; //stop timer0
  TH0=0xf2; //@ 40.32mhz,1ms cycle
  TL0=0xe0;
 
 TimerMeter++;
 if (TimerMeter<Interval)
 {
  Uptime = 1;
  TR0=1;  
  return;
 }
 else
 {
  Uptime = 0;
  if( TimerMeter >= 1024 )//一个输出波形的周期为1.024s
   TimerMeter=0;  //1秒钟进入一次
  TimeToReset++;
 }
 TR0=1;
}

主循环所做的就是ADREAD()读AD结果,并对输出的端口置数,定时器设置为1MS,通过INTERVAL与TIMERMETER比较不断对端口置数,也就是对UPTIME置0或者置1,硬件的驱动是已经写好的,应该不存在问题,但是今天把程序刷到板子上之后用示波器缺看不到有信号,请高手指点下可能存在的问题,谢谢

相关帖子

沙发
古道热肠| | 2007-5-22 13:11 | 只看该作者

变量长度查查、软件仿真测测

    我做电机的PWM调速时都用硬件PWM,很方便的,CPU不用疲于生成PWM波。
  哈哈,忘了告诉你用Philips的P89C51RA2上仿真调试,在STC12C5412上做成品,2小时完成。
   用的什么芯片做AD呀,告诉我一声(偷偷的),下次好参考。

使用特权

评论回复
板凳
yongzai| | 2011-5-10 12:07 | 只看该作者
没人指点啊,我也看不懂

使用特权

评论回复
地板
songjiqiu| | 2011-5-10 17:55 | 只看该作者
看不懂啊

使用特权

评论回复
5
jisyu_cy| | 2011-5-10 20:50 | 只看该作者
板主能给个电机的PWM控制程序吗,我程序导进去没戏。现在好迷茫,不知道是程序的问题还是原理图的问题

使用特权

评论回复
6
coody| | 2011-5-10 21:25 | 只看该作者
LZ难道是指ADC0811?

使用特权

评论回复
7
lorkey_email| | 2011-5-10 23:19 | 只看该作者
while(1)

{ ADRead(0,&tmp);
   Interval = tmp<<2;//左移两位乘四
   PortWrite(0,Uptime);}

void timer0(void) interrupt 1      
;你这句语法错误吧, 我记得应该是这样的吧:void timer0(void) interrupt 1 using N; N为0-3.
{
TR0=0; //stop timer0
  TH0=0xf2; //@ 40.32mhz,1ms cycle
  TL0=0xe0;

TimerMeter++;
if (TimerMeter<Interval)
{
  Uptime = 1;
  TR0=1;  
  return;
;你这个return放的位置也有问题吧; 当程序中断进到这里, 在这里就返回了; 下面中断都不开就出去了, 还咋个二次中断?
}
else
{
  Uptime = 0;
  if( TimerMeter >= 1024 )//一个输出波形的周期为1.024s
   TimerMeter=0;  //1秒钟进入一次
  TimeToReset++;
}
TR0=1;
}

使用特权

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

本版积分规则

2

主题

2

帖子

0

粉丝