普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2301|回复: 0

51开发板(新手)

[复制链接]

1

主题

2

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2023-3-9 20:46:22 | 显示全部楼层 |阅读模式
1金钱
小白刚开始学,可不可以来个大佬帮我看看为啥我用串口通信控制步进电机不成功啊?

#include"reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;

sbit IN1_A=P1^0;
sbit IN2_B=P1^1;
sbit IN3_C=P1^2;
sbit IN4_D=P1^3;

#define STEPMOTOR_MAXSPEED        1
#define STEPMOTOR_MINSPEED        5

void delay_10us(u16 ten_us)
{
        while(ten_us--);
}

void delay_ms(u16 ms)
{
        u16 i,j;
        for(i=ms;i>0;i--)
                for(j=110;j>0;j--);
}

void step_motor_28BYJ48_send_pulse(u8 step,u8 dir)
{       
        u8 temp=step;
        if(dir==0)
                temp=7-step;
        switch(temp)
        {
                case 0: IN1_A=1;IN2_B=0;IN3_C=0;IN4_D=0;break;
                case 1: IN1_A=1;IN2_B=1;IN3_C=0;IN4_D=0;break;
                case 2: IN1_A=0;IN2_B=1;IN3_C=0;IN4_D=0;break;
                case 3: IN1_A=0;IN2_B=1;IN3_C=1;IN4_D=0;break;
                case 4: IN1_A=0;IN2_B=0;IN3_C=1;IN4_D=0;break;
                case 5: IN1_A=0;IN2_B=0;IN3_C=1;IN4_D=1;break;
                case 6: IN1_A=0;IN2_B=0;IN3_C=0;IN4_D=1;break;
                case 7: IN1_A=1;IN2_B=0;IN3_C=0;IN4_D=1;break;
                default: IN1_A=0;IN2_B=0;IN3_C=0;IN4_D=0;break;
        }
}

void uart_init(u8 baud)
{
        TMOD|=0X20;
        SCON=0X50;
        PCON=0X80;
        TH1=baud;
        TL1=baud;
        ES=1;
        EA=1;
        TR1=1;
}

void main()
{
        u8 dir=0;
        u8 step=0;
        u8 speed=STEPMOTOR_MAXSPEED;
        u8 reg_data=0;
        uart_init(0XFA);
       
        while(1)
        {
                reg_data=SBUF;
//                switch(reg_data)
//                {
//                        case 0x11:step_motor_28BYJ48_send_pulse(step++,dir);break;
//                        case 0x22:dir=!dir;break;
//                        case 0x33:if(speed>STEPMOTOR_MAXSPEED) speed-=1;break;
//                        case 0x44:if(speed<STEPMOTOR_MINSPEED) speed+=1;break;
//                }       
                if(reg_data==0xff)
                {
                        dir=!dir;
                }
                else if(reg_data==0x22)
                {
                        if(speed>STEPMOTOR_MAXSPEED) speed-=1;
                }
                else if(reg_data==0x11)
                {
                        if(speed<STEPMOTOR_MINSPEED) speed+=1;
                }
                if(reg_data)
                        step_motor_28BYJ48_send_pulse(step++,dir);
                if(step==8)step=0;
                delay_ms(speed);
                reg_data=0;
        }
}

void uart() interrupt 4
{
        u8 reg_data;
        RI=0;
        reg_data=SBUF;
        SBUF=reg_data;
        while(!TI);
        TI=0;
}

我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励10 金钱 , 目前已有0人回答

回复

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2024-4-26 11:06 , Processed in 0.083170 second(s), 29 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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