智能车制作
标题:
做出了一个定时程序(解释很全,供初级交流),大家一起交流下
[打印本页]
作者:
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