智能车制作

标题: s12按键控制占空比的程序 各位看看哪里有问题哈 谢谢了 [打印本页]

作者: mxj1005071012    时间: 2012-12-15 22:59
标题: s12按键控制占空比的程序 各位看看哪里有问题哈 谢谢了
                          /*************************************************************************************************/
//功能说明:MC9S12XS128--PWM
//实现功能:电机按键加速、减速  通道3--(PTP3)输出
//程序设计:马小俊
//设计时间:2012.12.14
/*************************************************************************************************/
#include <hidef.h>         /* common defines and macros */
#include "derivative.h"    /* derivative-specific definitions */
/********************初始化函数*******************************/
void PLL_Init(void)        //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
{                          //锁相环时钟=2*16*(2+1)/(1+1)=48MHz
REFDV=1;                   //总线时钟=48/2=24MHz
SYNR=2;
while(!(CRGFLG&0x08));
CLKSEL=0x80;               //选定锁相环时钟
}
/******************PWM 初始化子程序*****************************/
void PWM_Init(void)
{
  PWME_PWME3=0;            // Disable PWM 禁止
  PWMPRCLK=0x11;           // 时钟预分频寄存器设置------0011 0011 A=B=24M/2=12M
  PWMSCLA=15;              // 时钟设置------------------SA=A/(2*15)=400k
  PWMSCLB=15;              // 时钟设置------------------SB=B/(2*15) =400k
}
/******************PWM3 初始化子程序*****************************/
void PWM3_Init(void)
{
PWMCLK_PCLK3=1;            // 时钟源的选择--------------PWM3-----SB
PWMPOL_PPOL3=1;            // 极性设置------------------开始输出高电平
PWMCAE_CAE3=0;             // 对齐方式设置--------------左对齐
PWMCTL=0x00;               // 控制寄存器设置------------无级联
PWMPER3=50;                // 周期寄存器设置------------Frequency=SB/50=8K
}
void Dly_ms(int ms)
{
   int i,j;
   if (ms<1)
   ms=1;
   for(i=0;i<ms;i++)
     for(j=0;j<110;j++);   
}
/********************主函数************************************/
void main(void)
{
unsigned char i=10;
unsigned char a,b;
PLL_Init();
PWM_Init();
PWM3_Init();
PWME_PWME3=1;                    //使能PWM  
PWMDTY3=i;                       //设置占空比            
DDRB=0XFC;                       //1111 1100 1 2输入
for(;;)
  {  
       a=PORTB_PB0;
       b=PORTB_PB1;
     if(a==0)                    //1111 1110
       {
         Dly_ms(5);
         a=PORTB_PB0;
         if(a==0)
         {
          i=40;
          PWMDTY3=i;                 //设置占空比
          PWME_PWME3=1;              //使能PWM
         }
       }
     else
       if(b==0)
       {
         Dly_ms(5);
         b=PORTB_PB1;
         if(b==0)
         {
          i=0;
          PWMDTY3=i;         //设置占空比
          PWME_PWME3=1;              //使能PWM
         }
       }
   
     while(PORTB!=0xFF);
  }
EnableInterrupts;
}

作者: 1627252997    时间: 2012-12-15 23:03

作者: mxj1005071012    时间: 2012-12-15 23:04
1627252997 发表于 2012-12-15 23:03

问题在哪啊   怎么就读不到按键的低电平呢
作者: 洋葱圈    时间: 2012-12-15 23:04
至少提供以下编译结果哦。
还有EnableInterrupts; 为啥要放循环外呢
作者: xiaoxinyan    时间: 2012-12-16 21:24
你的延时函数是51的:o
作者: mxj1005071012    时间: 2012-12-17 13:32
洋葱圈 发表于 2012-12-15 23:04
至少提供以下编译结果哦。
还有EnableInterrupts; 为啥要放循环外呢

我觉得它放在哪都行 而且编译通过  谢谢
作者: mxj1005071012    时间: 2012-12-17 13:33
xiaoxinyan 发表于 2012-12-16 21:24
你的延时函数是51的

是啊 不都是一样吗 都是延时 请问你有什么建议 延时怎么写啊  谢谢了
作者: xiaoxinyan    时间: 2012-12-17 18:08
频率不一样当然不能用一个延时函数了  xs128比51快多了,所以执行一条语句的速度肯定也快多了,可是128的指令周期和时钟周期是什么关系我也不知道呢  你知道的话告诉我一下吧
作者: mxj1005071012    时间: 2012-12-24 15:27
xiaoxinyan 发表于 2012-12-17 18:08
频率不一样当然不能用一个延时函数了  xs128比51快多了,所以执行一条语句的速度肯定也快多了,可是128的指 ...

指令周期是时钟周期的12到48倍不等





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2