有关51定时器使用的问题
#include<reg52.h>#include<absacc.h>
#define VALUE 65512 //(65536-24)设定初值.因为走50cm,要产生23个脉冲,因为低电平计数有效,所以顾产生24个时再溢出。
unsigned char jishu_count; //此为外部脉冲接口,51的T1计数器从p3.5接入?
int t;
sbit P35 = P3^5;//外部脉冲输入
void timer_init()
{
TMOD=0xE2; //设置模式为1110 0010,开定时器0和计数器1//
TCON=0x00;
TH1=VALUE; //计数24后溢出//
TL1=TH1; //预置计数器为24
EA=1; //全中断允许//
ET1=1; //允许计数器中断
TR1=1; //启动计数器,等待外部高脉冲到来,启动计数器//
ET0=1; //定时器开中断
TR0=1; //启动定时器//
}
void car_ahead()
{
PB5=0;
PB4=1;
PB3=0;
PB2=1;
}
void car_left()
{
PB5=0;
PB4=1;
PB3=1;
PB2=1; //原地的左转不行,因为另一轮反转。圆心转可以,但是实际情况时,直线调整时间长。故选用左轮自由,右轮正转。//
//由于,电机现在为全速状态,所以使用自由时,很容易冲出,所以,仍改回圆心式转弯,既右边刹车。左边正转
}
///--计数器1中断程序--///
void timer1 ()interrupt 0 //不是0,看资料。
{
TF1=0; //要从新置回0,否则中断不知道。
P35 = jishu_count;
if(jishu_count!=0)
{
t++;
if(t<=24)
car_left();
}
else
car_ahead;
}
void main()
{
timer_init(); //初始化定时器及计数器
while(1)
{
car_ahead();
}
}
以上是我写的有外部脉冲输入单片机,计数24后产生中断的程序,无效果,不知道问题出在哪些方面,烦请指教。。。