智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3185|回复: 4
打印 上一主题 下一主题

[编程类] 一个简单程序,但输不出预期结果,烦请哪位帮忙看一下

[复制链接]

0

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
377
威望
214
贡献
113
兑换币
0
注册时间
2009-1-15
在线时间
25 小时
跳转到指定楼层
1#
发表于 2009-2-13 16:26:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <hidef.h>      /* common defines and macros */
#include <mc9s12dg128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"

void main(void) {
  
  
DDRB=0xFF;//PORTB设定为输出
PORTB=0xf0;//PORTB初始化为全高
  
TSCR1=0x90;//定时器使能且TFLG1能被自动清除
TSCR2=0x07;//定时器预分频系数设定  Prescale Factor=128
TIE=0x01;//定时器通道0使能
TIOS_IOS0=1;//定时器通道0设定为输出比较
TCTL1=0X00;
TCTL2=0X03 ;
TC0=0x0100;  
  EnableInterrupts;//开中断
  for(;;) {} /* wait forever */
  /* please make sure that you never leave this function */
}
/*
***************************************************************************
*语法格式:interrupt void Timer(void)
*实现功能:
*程序描述:
**************************************************************************/

void  interrupt   Timer(void) //8为定时器通道0的中断标号
{
DisableInterrupts;  //关中断

PORTB=0b11110011;//
EnableInterrupts;//

}
结果无法进入中断程序

4

主题

76

帖子

0

精华

高级会员

Rank: 4

积分
513
威望
369
贡献
92
兑换币
56
注册时间
2009-2-2
在线时间
26 小时
2#
发表于 2009-2-13 21:03:37 | 只看该作者
应该将中断程序放进中断向量表吧。
打开.prm文件【如果用BDM就打开它对应的PRM】,在最后一行加上VECTOR ADDRESS 0xFFEE Timer
再试试吧!
还有,B口全高该是00吧,打错了?
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

注册会员

Rank: 2

积分
128
威望
176
贡献
22
兑换币
0
注册时间
2007-11-14
在线时间
3 小时
3#
发表于 2009-2-14 11:50:28 | 只看该作者
/*****************/
//说明:利用定时器输出比较功能产生定时中断,

/**********变量定义***********/
static unsigned int waittime = 0;

/*********初始化函数***********/
/*时钟初始化*/
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;
}
/*定时器初始化*/
void ECT0_Init(void)
{
  TIOS_IOS0=1;    //定时器通道0设置为输出比较
  TCTL2=0x02;     //输出低电平  
  TSCR2_TOI=0;    //溢出中断禁止
  TSCR2_PR=6;     //24M/64=2.67微秒,计一个数用2.67微秒
  TC0=0x00FF;     //给输出比较通道0赋初值,当TCNT从0计数到此值时第一次进入中断
  //TSCR1_TFFCA=1;  //定时器标志快速清零
  TIE_C0I=1;      //通道0输出比较中断允许
  TSCR1_TEN=1;    //使能定时器
}
/*******主函数********/
void main(void)
{
  PLL_Init();
  ECT0_Init();
  DisableInterrupts;
  DDRB=0xff;
  PORTB=0x00;
  //PTT_PTT0=0;
  for(;;)
  {
    EnableInterrupts;
  }
}
/********中断函数处理***********/
#pragma CODE_SEG NON_BANKED
void interrupt 8 Timer0_ISR(void) //8为定时器通道0的中断标号
{
  unsigned int m;
  TFLG1_C0F=1;//清中断标志位
  DisableInterrupts;
  m=TCNT;
  TC0=m+37500; //定时时间100毫秒后进入中断, 8/3*375=1000微秒  3750--10毫秒 37500--100毫秒
  waittime++;
  if(waittime>=200)
  {
    waittime=0;
  }
  PORTB=waittime;
}


看看这个吧
回复 支持 反对

使用道具 举报

0

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
377
威望
214
贡献
113
兑换币
0
注册时间
2009-1-15
在线时间
25 小时
4#
 楼主| 发表于 2009-2-14 17:12:20 | 只看该作者
多谢两位,新手上路,在此谢过了!
回复 支持 反对

使用道具 举报

0

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
377
威望
214
贡献
113
兑换币
0
注册时间
2009-1-15
在线时间
25 小时
5#
 楼主| 发表于 2009-2-14 18:39:18 | 只看该作者
我试了,还是不行,不过我按照楼下的格式修改了一下,可以通过。 2# lucev
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-18 03:17 , Processed in 0.047912 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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