智能车制作

标题: 请大家帮我看下我写的这个定时器控制PWM输出程序那里出错了? [打印本页]

作者: Gian    时间: 2013-6-6 00:01
标题: 请大家帮我看下我写的这个定时器控制PWM输出程序那里出错了?
本人现在用52单片机学习智能车制作,现在编写程序遇到了一个问题,希望有人能伴我解答下,下面是我写的程序:
#include<reg52.h>
#include<intrins.h>

sbit ENA=P0^0;         //左电机使能端
sbit P01=P0^1;         //电机接口,左,INT1
sbit P02=P0^2;   //          左,INT2

sbit P03=P0^3;         //          右,INT4          
sbit P04=P0^4;   //          右,INT3
sbit ENB=P0^5;   //右电机使能端

unsigned char LPWM,RPWM;

unsigned char i=0,j=0,k=0;

/*
void delay(unsigned char ms)       
{                                               
        unsigned char i;
        while(ms--)
        {
                for(i=0;i<120;i++);
        }
}
*/
void init()
{
        P01=1,P02=0,P03=0,P04=1;
        ENA=0,ENB=0;
        TMOD=0x11 ;
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;

        TH1=(65536-(50000-RPWM))/256;
        TL1=(65536-(50000-RPWM))%256;
       
        RCAP2H=(65536-(50000-LPWM))/256;
        RCAP2L=(65536-(50000-LPWM))%256;
        TH2=RCAP2H;
        TL2=RCAP2L;

        EA=1;
    ET0=1;
    ET1=1;
        ET2=1;
    TR0=1;           //打开T0计时器
        TR1=0,TR2=0;
}

void main()
{
        //LPWM=1000,RPWM=4000;
        //LPWM=2000,RPWM=3000;
        //LPWM=2500,RPWM=2500;
        LPWM=3000,RPWM=2000;
        //LPWM=4000,RPWM=1000;
        init();
        while(1);
}

void timer0() interrupt 1
{
        i++;
        TR1=0,TR2=0;
        ENA=0,ENB=0;
    TH0=(65536-50000)/256;           //周期设为50ms
    TL0=(65536-50000)%256;

        TH1=(65536-(50000-RPWM))/256;
        TL1=(65536-(50000-RPWM))%256;
       
        TH2=(65536-(50000-LPWM))/256;
        TL2=(65536-(50000-LPWM))%256;
        TR1=1,TR2=1;              //打开T0、T1计时器
}

void timer1() interrupt 3                  //控制右电机
{
        j++;
        ENB=1;
        TR1=0;
}

void timer2() interrupt 5                  //控制左电机
{       
        TF2=0;
        k++;
        ENA=1;
        TR2=0;
}
现在问题是定时器T1和T2里面的语句都没运算,然后ENA、ENB的值都是0,请问这是什么原因?
作者: yukunlinykl    时间: 2013-6-6 00:39
自己检查吧,要不然你永远也不会调代码。
作者: Gian    时间: 2013-6-6 00:54
yukunlinykl 发表于 2013-6-6 00:39
自己检查吧,要不然你永远也不会调代码。

我已经检查好多遍了,甚至改成和另一个程序基本一样(只有控制T0和T1),那个程序能正常运行,而这个程序就是无发正常运行,老是无法执行T1中断程序,我是真的无语了才会来这里问的。。。。
作者: 日本島は中国の    时间: 2013-6-6 08:19
哈哈哈哈
作者: yukunlinykl    时间: 2013-6-6 11:24
Gian 发表于 2013-6-6 00:54
我已经检查好多遍了,甚至改成和另一个程序基本一样(只有控制T0和T1),那个程序能正常运行,而这个程序 ...

那你可以开始查汇编了,
我会说我曾经查出过XS128的指令流水bug吗?

作者: Gian    时间: 2013-6-6 13:47
yukunlinykl 发表于 2013-6-6 11:24
那你可以开始查汇编了,
我会说我曾经查出过XS128的指令流水bug吗?

......厉害




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