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

[复制链接]
3480|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 | 显示全部楼层
看不懂啊
jisyu_cy 发表于 2011-5-10 20:50 | 显示全部楼层
板主能给个电机的PWM控制程序吗,我程序导进去没戏。现在好迷茫,不知道是程序的问题还是原理图的问题
coody 发表于 2011-5-10 21:25 | 显示全部楼层
LZ难道是指ADC0811?
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

粉丝
快速回复 在线客服 返回列表 返回顶部