智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1715|回复: 5
打印 上一主题 下一主题

[咨询] 请大家帮我看下我写的这个定时器控制PWM输出程序那里出错了?

[复制链接]

14

主题

77

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1165
威望
593
贡献
266
兑换币
363
注册时间
2013-1-10
在线时间
153 小时
毕业学校
福建工程学院
跳转到指定楼层
1#
发表于 2013-6-6 00:01:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人现在用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,请问这是什么原因?

38

主题

1651

帖子

0

精华

功勋会员

Rank: 10Rank: 10Rank: 10

积分
8770
威望
4444
贡献
2638
兑换币
1818
注册时间
2010-12-29
在线时间
844 小时
2#
发表于 2013-6-6 00:39:44 | 只看该作者
自己检查吧,要不然你永远也不会调代码。
回复 支持 反对

使用道具 举报

14

主题

77

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1165
威望
593
贡献
266
兑换币
363
注册时间
2013-1-10
在线时间
153 小时
毕业学校
福建工程学院
3#
 楼主| 发表于 2013-6-6 00:54:19 | 只看该作者
yukunlinykl 发表于 2013-6-6 00:39
自己检查吧,要不然你永远也不会调代码。

我已经检查好多遍了,甚至改成和另一个程序基本一样(只有控制T0和T1),那个程序能正常运行,而这个程序就是无发正常运行,老是无法执行T1中断程序,我是真的无语了才会来这里问的。。。。
回复 支持 反对

使用道具 举报

16

主题

69

帖子

0

精华

高级会员

Rank: 4

积分
830
威望
399
贡献
151
兑换币
213
注册时间
2012-11-14
在线时间
140 小时
4#
发表于 2013-6-6 08:19:40 | 只看该作者
哈哈哈哈
回复 支持 反对

使用道具 举报

38

主题

1651

帖子

0

精华

功勋会员

Rank: 10Rank: 10Rank: 10

积分
8770
威望
4444
贡献
2638
兑换币
1818
注册时间
2010-12-29
在线时间
844 小时
5#
发表于 2013-6-6 11:24:02 | 只看该作者
Gian 发表于 2013-6-6 00:54
我已经检查好多遍了,甚至改成和另一个程序基本一样(只有控制T0和T1),那个程序能正常运行,而这个程序 ...

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

使用道具 举报

14

主题

77

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1165
威望
593
贡献
266
兑换币
363
注册时间
2013-1-10
在线时间
153 小时
毕业学校
福建工程学院
6#
 楼主| 发表于 2013-6-6 13:47:29 | 只看该作者
yukunlinykl 发表于 2013-6-6 11:24
那你可以开始查汇编了,
我会说我曾经查出过XS128的指令流水bug吗?

......厉害
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-8 08:54 , Processed in 0.045531 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表