智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2441|回复: 8
打印 上一主题 下一主题

s12按键控制占空比的程序 各位看看哪里有问题哈 谢谢了

[复制链接]

21

主题

892

帖子

0

精华

常驻嘉宾

爱板者

Rank: 8Rank: 8

积分
3857

活跃会员奖章优秀会员奖章在线王奖章论坛元老奖章

威望
1833
贡献
1048
兑换币
736
注册时间
2012-12-4
在线时间
488 小时
跳转到指定楼层
1#
发表于 2012-12-15 22:59:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
                          /*************************************************************************************************/
//功能说明: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;
}

46

主题

521

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1819
威望
1227
贡献
168
兑换币
161
注册时间
2012-2-7
在线时间
212 小时
毕业学校
山东
2#
发表于 2012-12-15 23:03:20 | 只看该作者
回复 支持 反对

使用道具 举报

21

主题

892

帖子

0

精华

常驻嘉宾

爱板者

Rank: 8Rank: 8

积分
3857

活跃会员奖章优秀会员奖章在线王奖章论坛元老奖章

威望
1833
贡献
1048
兑换币
736
注册时间
2012-12-4
在线时间
488 小时
3#
 楼主| 发表于 2012-12-15 23:04:17 | 只看该作者
1627252997 发表于 2012-12-15 23:03

问题在哪啊   怎么就读不到按键的低电平呢
回复 支持 反对

使用道具 举报

59

主题

1029

帖子

0

精华

版主

有什么需帮助的?

Rank: 9Rank: 9Rank: 9

积分
15163

热心会员奖章论坛元老奖章优秀会员奖章在线王奖章

威望
11088
贡献
1415
兑换币
1728
注册时间
2011-12-18
在线时间
1330 小时
4#
发表于 2012-12-15 23:04:53 | 只看该作者
至少提供以下编译结果哦。
还有EnableInterrupts; 为啥要放循环外呢
回复 支持 反对

使用道具 举报

1

主题

39

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1277
威望
664
贡献
367
兑换币
310
注册时间
2012-7-25
在线时间
123 小时
5#
发表于 2012-12-16 21:24:34 | 只看该作者
你的延时函数是51的:o
回复 支持 反对

使用道具 举报

21

主题

892

帖子

0

精华

常驻嘉宾

爱板者

Rank: 8Rank: 8

积分
3857

活跃会员奖章优秀会员奖章在线王奖章论坛元老奖章

威望
1833
贡献
1048
兑换币
736
注册时间
2012-12-4
在线时间
488 小时
6#
 楼主| 发表于 2012-12-17 13:32:46 | 只看该作者
洋葱圈 发表于 2012-12-15 23:04
至少提供以下编译结果哦。
还有EnableInterrupts; 为啥要放循环外呢

我觉得它放在哪都行 而且编译通过  谢谢
回复 支持 反对

使用道具 举报

21

主题

892

帖子

0

精华

常驻嘉宾

爱板者

Rank: 8Rank: 8

积分
3857

活跃会员奖章优秀会员奖章在线王奖章论坛元老奖章

威望
1833
贡献
1048
兑换币
736
注册时间
2012-12-4
在线时间
488 小时
7#
 楼主| 发表于 2012-12-17 13:33:50 | 只看该作者
xiaoxinyan 发表于 2012-12-16 21:24
你的延时函数是51的

是啊 不都是一样吗 都是延时 请问你有什么建议 延时怎么写啊  谢谢了
回复 支持 反对

使用道具 举报

1

主题

39

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1277
威望
664
贡献
367
兑换币
310
注册时间
2012-7-25
在线时间
123 小时
8#
发表于 2012-12-17 18:08:09 | 只看该作者
频率不一样当然不能用一个延时函数了  xs128比51快多了,所以执行一条语句的速度肯定也快多了,可是128的指令周期和时钟周期是什么关系我也不知道呢  你知道的话告诉我一下吧
回复 支持 反对

使用道具 举报

21

主题

892

帖子

0

精华

常驻嘉宾

爱板者

Rank: 8Rank: 8

积分
3857

活跃会员奖章优秀会员奖章在线王奖章论坛元老奖章

威望
1833
贡献
1048
兑换币
736
注册时间
2012-12-4
在线时间
488 小时
9#
 楼主| 发表于 2012-12-24 15:27:43 | 只看该作者
xiaoxinyan 发表于 2012-12-17 18:08
频率不一样当然不能用一个延时函数了  xs128比51快多了,所以执行一条语句的速度肯定也快多了,可是128的指 ...

指令周期是时钟周期的12到48倍不等
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-26 16:37 , Processed in 0.077718 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表