智能车制作

 找回密码
 注册

扫一扫,访问微社区

12
返回列表 发新帖
楼主: longforljy
打印 上一主题 下一主题

[编程类] 继续求救~~~已经出来雏形了,大家帮忙啊

[复制链接]

8

主题

306

帖子

0

精华

高级会员

Rank: 4

积分
806

优秀会员奖章

QQ
威望
565
贡献
191
兑换币
0
注册时间
2010-1-10
在线时间
25 小时
11#
 楼主| 发表于 2010-1-11 22:34:51 | 只看该作者
貌似有D高深,现在要赶着复习,后天再仔细看看
回复

使用道具 举报

8

主题

306

帖子

0

精华

高级会员

Rank: 4

积分
806

优秀会员奖章

QQ
威望
565
贡献
191
兑换币
0
注册时间
2010-1-10
在线时间
25 小时
12#
 楼主| 发表于 2010-1-11 22:36:40 | 只看该作者
对了,还有个重要的模数计数器~~帮忙帮忙
回复

使用道具 举报

8

主题

306

帖子

0

精华

高级会员

Rank: 4

积分
806

优秀会员奖章

QQ
威望
565
贡献
191
兑换币
0
注册时间
2010-1-10
在线时间
25 小时
13#
 楼主| 发表于 2010-1-12 01:17:26 | 只看该作者
#include /* common defines and macros */
#include /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"

// PLL初始化子程序   BUS Clock=40M
void setbusclock(void)
{   
    CLKSEL=0X00;    //disengage PLL to system
    PLLCTL_PLLON=1;   //turn on PLL
    SYNR=4;         
    REFDV=1;          //pllclock=2*osc*(1+SYNR)/(1+REFDV)=80MHz;
    _asm(nop);          //BUS CLOCK=40M
    _asm(nop);
    while(!(CRGFLG_LOCK==1));   //when pll is steady ,then use it;
    CLKSEL_PLLSEL =1;          //engage PLL to system;
}
//PWM
void InitPWM(void)
{
    PWME=0x00;//PWM输出禁止
    PWMCTL=0xf0;//高八位置1,PWM通道级连,PWM1、PWM3、PWM5、PWM7为对应16bPWM输出
    PWMPOL=0xaa;//对应通道输出
    PWMCAE=0x00;//输出波形左对齐,即从周期原点开始计时
   
    PWMPRCLK=0x44;//预分频  CLOCKA=40MHZ/16=2.5MHZ,CLOCKB=40MHZ/16=2.5MHZ
   
    PWMSCLA=0x64;//CLOCKSA=CLOCKA/(2*100)=12.5kHZ
    PWMSCLB=0x64;//CLOCKSB=CLOCKB/(2*100)=12.5kHZ
    //0,1要求是100hz,则输出频率=时钟频率/(x+1)=100hz,得x=124,换成16进制0x7c
    PWMPER1=0x7c;
    PWMDTY1=0x3c;    //设置占空比=(PWMPERx-PWMDTYx)/(PWMPERx+1)
    //3,5要求是10khz,得x=249,即0xF9,7不做要求
    PWMPER3=0xF9;
    PWMPER5=0xF9;
    PWMDTY1=0x3c;
    PWMDTY1=0x3c;    //设置占空比=(PWMPERx-PWMDTYx)/(PWMPERx+1)   
    PWMCLK=0x82;//PWM1选择CLOCKSA,PWM5选择CLOCKA,PWM3选择CLOCKB,PWM7选择CLOCKSB        
    PWME=0x2a;//1,3,5输出使能
    PACTL=0x50;// 脉冲累加器使能,事件计数模式,上升沿计数,中断禁止,对PT7口计数

//实时中断RTI
//------------------------------------------------------------
void InitRTI(void)
{
    RTICTL=0x6c;   //时间T=(1/40MHZ)*(12.5*2^15)=10.24ms,12.5取13,所以得T=10.64ms
    CRGINT=0x80;    //开实时中断
}



//模数计数器
void SetMDC(void)
{
MCCTL = MCCTL&0Xfb; //模数计数器禁止运行
ICSYS=0x03;       //防止溢出
MCCLT=0x5f;
MCCNT = 0xF424; //预分频2*分频常数16=32,所以(32/40M)*62500 = 50ms  大概是这样计算吧....
}
//模数计数器中断
void interrupt 26 MDC_ISR(void)
{
i++;
PulseCnt=PACNO;//记录脉冲数??
MCFLG=0x80;  //清楚标志????
if(i==20)
{
number++;          //20次,即每1s变量number++
i=0;
}
asm cli;     //重新开中断???????
}
unsigned int number=0,i=0,PulseCnt=0;   //定义两个全局变量
void main(void)
{
asm sei;//关闭中断
TIOS=0x00;//ECT通道0为IC工作方式
TSCR1=0x80;//定时器使能,正常工作
TSCR2=0x01;//预分频系数=2;

//***************zzzz
TCLT=0x02;//仅捕捉下降沿  
TIE=0x01;//允许通道0中断
TFLG1=0x01;//产生中断?????????????
DLYCT=0x01;//输入延迟
//******************

asm cli;//开中断
}

不管啦
最后看书查资料写出来的是这份啦,日后再修改了.
谢谢大家了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-27 15:47 , Processed in 0.039800 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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