注册 登录
编程论坛 单片机编程

有关51定时器使用的问题

dfxu123 发布于 2009-08-15 09:40, 1275 次点击
#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后产生中断的程序,无效果,不知道问题出在哪些方面,烦请指教。。。
3 回复
#2
飞翔的猪2010-08-18 16:29
新手来顶一下
#3
xiaopengwan2010-11-18 19:37
TF1是自动置0的, TMOD=0xE2;            //设置模式为1110 0010,开定时器0和计数器1//
                 TCON=0x00;    ----    有误
1