找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1123|回复: 1
打印 上一主题 下一主题
收起左侧

用超声波测距控制舵机转动,我这个单片机代码怎么没反应,各位大佬能否帮我看看

[复制链接]
跳转到指定楼层
楼主
ID:1091511 发表于 2023-8-18 10:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include<intrins.h>
#include<stdio.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit Trig = P2^0;
sbit Echo = P2^1;
sbit Servo = P2^7;//
uchar flag=0;
uchar control=15;
uchar servorTime=0;

void delay(uchar z)
{
        uchar i,j;
        for(i = z;i>0;i--)
                for(j=114;j>0;j--);
}


void Delay10us()                //@11.0592MHz
{
        unsigned char data i;

        _nop_();
        i = 25;
        while (--i);
}

void Delay20ms()                //@11.0592MHz
{
        unsigned char data i, j;

        i = 216;
        j = 37;
        do
        {
                while (--j);
        } while (--i);
}


void Timer0_Init()                //100??@11.0592MHz
{
                        
        TMOD |= 0x11;         
        TL0 = 0;                                
        TH0 = 0;
        ET0 = 1;        
}


void Timer1_Init()                //100??@11.0592MHz
{
        TMOD |= 0x11;                        
        TL1 = 0xAE;                                
        TH1 = 0xFB;               
        TF1 = 0;
        TR1 = 1;
        EA = 1;
        ET1= 1;
}


void main()
{
        uint time,distance;
        Timer0_Init();
        Timer1_Init();
        Echo = 0;
        Trig = 0;
        servorTime=0;
        while(1)
        {
                Trig = 1;
                Delay10us();
                Trig = 0;
                while(Echo==0);
                        TR0 = 1;
                while(Echo);
                        TR0 = 0;
                time = TH0*256+TL0;
                distance = (int)(time*0.017);
                TH0 = 0;
                TL0 = 0;
                if(distance < 30)
                {
                        control=15;
                        servorTime = 0;
                        TR1 = 1;
                        Delay20ms();
                        Delay20ms();
                        TR1 = 0;
                }
                else
                {
                        control=5;
                        servorTime = 0;
                        TR1 = 1;
                        Delay20ms();
                        Delay20ms();
                        TR1 = 0;
                }
        }
}
void Timer0() interrupt 1
{
        TH0 = 0;
        TL0 = 0;
}
void Timer1() interrupt 3
{
        TH1 = 0xFB;
        TL1 = 0xAE;        
        servorTime++;
        if(servorTime <= control)
                Servo = 1;
        else
                Servo = 0;
        if(servorTime==200)
        {
                servorTime = 0;
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2023-8-18 17:37 | 只看该作者
1。
TH1 = 0xFB;
TL1 = 0xAE;   
的定时时间是1ms

2。
舵机要稳定的PWM信号才会保持角度
你的代码运行舵机的PWM 40ms 然后就停了
PWM信号就不稳定了
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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