智能车制作

标题: 做出了一个定时程序(解释很全,供初级交流),大家一起交流下 [打印本页]

作者: justing88    时间: 2009-11-7 12:42
标题: 做出了一个定时程序(解释很全,供初级交流),大家一起交流下
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */

#define uchar unsigned char
#define uint unsigned int
uchar Pulsecnt;
uchar  m=0;   

#pragma CODE_SEG NON_BANKED

void interrupt 16 Time_Over(void)     //中断号16,是时间溢出的中断的号,可以在derivative.h里找到的
{  
  DisableInterrupts;  //关中断
  m++;                               //进入一次中断,m加一
  if(m==20)                          //进入5次,则
  {
    DDRB=0XFF;                 //应该可以不用重新再赋值了
    Pulsecnt=~Pulsecnt;   //进入后,B口取反
   PORTB=Pulsecnt;
//  PORTB=~Pulsecnt;    注意:这条语句不行,B口永远赋值不进去,不要以为可以代替上面两条语句,不行的
    m=0;                 //我们一直弄不出来的原因就是使用了这条语句
  }
  TCNT=65535-50000;     //设置初始值
// TFLG2_TOF=1;         //每次都将标志位清零,如果是TSCR1=0X90的话,那么这句就不用了。我这个程序就不用了
// EnableInterrupts;
}
  
#pragma CODE_SEG DEFAULT


void main(void) {
  /* put your own code here */  

   TIOS=0x00;             //设置输入的通道工作为输入捕捉,其实默认的就全是0
   TSCR2=0x83;           //设置定时器溢出中断,并且分频系数为8,开始不知道总线的频率是多少,后来测出来是8M
   TIE=0x02;            //允许中断(这里TIE可以随便,你也可以是TIE=0X00)
  TFLG2_TOF=1;        //定时器溢出中断标志位清零
  TCNT=65535-50000;   //设置初始值(你也可以分别设高低位)
  Pulsecnt=0xF0;     //设置变量为0xf0,最终输出给B口
  DDRB=0XFF;         //设置B口为输出方式
  PORTB=Pulsecnt;   //设置初始值B
// TSCR1_TEN=1;     //开定时器
   TSCR1=0X90;     //TSCR1第4位TFFCA=1,则TFLG2_TOF位每次中断后=1(自动清零),也可以是
                     //TSCR1=0X80,或者TSCR1_TEN=1,但是每次到中断程序中都得重新置位
  EnableInterrupts;     


  for(;;) {
   _FEED_COP(); /* feeds the dog */
  } /* loop forever */
  /* please make sure that you never leave main */


}
作者: Michael_Fei    时间: 2009-11-8 11:00
"m=0;                 //我们一直弄不出来的原因就是使用了这条语句"
呵呵,细节很重要。
作者: CCGOGO    时间: 2011-2-22 16:37
有收获~
作者: chen4013874    时间: 2011-2-27 19:22
我找到你了
作者: xiao19890501    时间: 2011-3-8 16:24
多谢了,及时雨呀!!!!!!
作者: dashier    时间: 2011-11-26 15:09
很有用
作者: 清明    时间: 2011-11-26 18:53
谢谢。




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