普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 4792|回复: 2

关于计时器的问题

 关闭 [复制链接]

6

主题

22

帖子

105

积分

注册会员

Rank: 2

积分
105
发表于 2018-2-19 13:10:31 | 显示全部楼层 |阅读模式
在写关于小车壁障的代码时,因为可能用到PWM所以加入了计时器,但是加入计时器后发现delay的延迟函数延迟时间都很长,调试时发现计时函数占用了运行时间,请问这种情况如何解决,(我暂时是想干脆那两块单片机
回复

使用道具 举报

20

主题

1344

帖子

8375

积分

论坛元老

Rank: 8Rank: 8

积分
8375
发表于 2018-2-22 14:00:36 | 显示全部楼层
一般而言,用了定时器,就不用软件延时了。
给你一个我的例子——寻迹,很”砖“,自己造玉吧。
#include <reg51.h>

sbit ZLDJ10=P2^3;//L298N模块IN1
sbit ZLDJ11=P2^2;//L298N模块IN2
sbit ZLDJ20=P2^1;//L298N模块IN3
sbit ZLDJ21=P2^0;//L298N模块IN4

sbit LXJ=P2^5;//左寻迹光电口
sbit RXJ=P2^4;//右寻迹光电口

unsigned char TT=0;

void Time0int (void)
{
    TMOD=0x02;
                       
        TH0=0xff;//定时1us
    TL0=0xff;
    EA=1;
    ET0=1;
    TR0=1;
}

void main(void)
{
        unsigned char i=30;
        unsigned char j=0;
        bit RR=0,LL=0;
        LXJ=1;RXJ=1;
        Time0int ();
        while (1)
        {
                if (TT>=100)
                {
                        TT=0;
                }
                if (TT>=i)
                {
                        ZLDJ10=0;
                        ZLDJ11=0;
                        ZLDJ20=0;
                        ZLDJ21=0;
                }
                if ((LXJ==1)&&(RXJ==1)&&(TT<=i))
                {
                        j=0;
                        ZLDJ10=1;
                        ZLDJ11=0;                                         //前进
                        ZLDJ20=0;
                        ZLDJ21=1;
                }
                if ((LXJ==0)&&(RXJ==0)&&(TT<=i))
                {
                        if (LL==1)
                        {
                                ZLDJ10=0;
                                ZLDJ11=1;
                                ZLDJ20=0;//车向前时:右轮前进
                                ZLDJ21=1;
                                j++;
                                if (j==2)
                                {
                                        j=0;
                                        ZLDJ10=0;
                                        ZLDJ11=0;
                                        ZLDJ20=0;
                                        ZLDJ21=0;
                                }
                        }
                        if (RR==1)
                        {
                                ZLDJ10=1;
                                ZLDJ11=0;
                                ZLDJ20=1;
                                ZLDJ21=0;
                                j++;
                                if (j==2)
                                {
                                        j=0;
                                        ZLDJ10=0;
                                        ZLDJ11=0;
                                        ZLDJ20=0;
                                        ZLDJ21=0;
                                }
                        }
                }
                if ((LXJ==1)&&(RXJ==0)&&(TT<=i))
                {
                        RR=0;LL=1;j=0;
                        ZLDJ10=0;
                        ZLDJ11=0;
                        ZLDJ20=0;//车向前时:右轮前进
                        ZLDJ21=1;
                }
                if ((LXJ==0)&&(RXJ==1)&&(TT<=i))
                {
                        RR=1;LL=0;j=0;
                        ZLDJ10=1;//车向前时:左轮前进
                        ZLDJ11=0;
                        ZLDJ20=0;
                        ZLDJ21=0;
                }
        }
}

void Time0 (void) interrupt 1
{
        TT++;
}

回复 支持 反对

使用道具 举报

6

主题

22

帖子

105

积分

注册会员

Rank: 2

积分
105
 楼主| 发表于 2018-2-25 21:07:11 | 显示全部楼层
HC6800-ES-V2.0 发表于 2018-2-22 14:00
一般而言,用了定时器,就不用软件延时了。
给你一个我的例子——寻迹,很”砖“,自己造玉吧。
#include ...

谢谢,很抱歉没能及时回复!
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-24 01:09 , Processed in 0.087488 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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