找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2511|回复: 8
收起左侧

单片机管脚定义问题

[复制链接]
ID:143767 发表于 2020-6-5 16:39 | 显示全部楼层 |阅读模式
请问下面程序怎样知道它定义的是P1.1-P1.4呢,如果我想定义P2.0-P2.4或P3.0-P3.4怎样去设置呢,谢谢!

/*
1、本程序用于测试4相步进电机常规驱动
2、需要用跳帽或者杜邦线把信号输出端和对应的步进电机信号输入端连接起来
3、速度不可以调节的过快,不然就没有力矩转动了
可以按照给的原理图接线
  接P1.1-P1.4
*/
#include <reg52.h>

unsigned char code F_Rotation[4]={0x02,0x04,0x08,0x10};//正转表格
unsigned char code B_Rotation[4]={0x10,0x08,0x04,0x02};//反转表格

void Delay(unsigned int i)//延时
{
        while(--i);
}

main()
{
        unsigned char i;

        while(1)
        {
                  for(i=0;i<4;i++)      //4相
             {
                     P1=B_Rotation[i];  //输出对应的相 可以自行换成反转表格
                     Delay(500);        //改变这个参数可以调整电机转速
                 }
          }
}


回复

使用道具 举报

ID:94031 发表于 2020-6-5 18:58 | 显示全部楼层
这句话 P1=B_Rotation[i]; 说明驱动在P1口,根据数组定义知道在低4位。
回复

使用道具 举报

ID:642838 发表于 2020-6-5 19:51 | 显示全部楼层
code F_Rotation数组02,04,08,10换成2进制就是对应的P1.1-P1.4。
定义P2.0-P2.4,把数组unsigned char code F_Rotation[5]={0x01,0x02,0x04,0x08,0x10}
再把 P1=B_Rotation[i]改成P2=B_Rotation[i]
回复

使用道具 举报

ID:538157 发表于 2020-6-5 19:55 | 显示全部楼层
“0x”代表十六进制数,4位二进制可以表示一个十六进制数,0x02对应的二进制数是“0000 0010”,正好对应51单片机的一个P端口。这样应该就理解了。
实际上上面的程序操作的整个P1端的8位都被操作了。想要只操作其中某一位,看看C语言的位操作语句,百度一些例子,你就知道了。
当然,“sbit”关键字也可以。
回复

使用道具 举报

ID:295874 发表于 2020-6-5 20:32 | 显示全部楼层
P1=B_Rotation[i];  //输出对应的相 可以自行换成反转表格
修改此处的P1就可以实现
回复

使用道具 举报

ID:591219 发表于 2020-6-5 21:53 | 显示全部楼层
首先,你要了解这段括号内的二进制
B_Rotation[4]={0x10,0x08,0x04,0x02}
0x10:0001 0000
0x08:0000 1000
0x04:0000 0100
0x02:0000 0010
之后,理解这段
P1=B_Rotation[i];
i从0开始,就是把 0x10(0001 0000)赋值给 P1,即P1.4 = 1;
i递增,把剩下的全都赋值给P1,使得P1.4到P1.1逐渐置1,实现反转
所以 想要修改到P2口,首先修改P2=B_Rotation[i];
之后,根据你想用的P2口,在修改   B_Rotation[4]={0x10,0x08,0x04,0x02}  中的值
例如 你想用的P2.0到P2.3(四相电机,需要四个i/o口)
B_Rotation[4]={0x08,0x04,0x02,0x01}

评分

参与人数 1黑币 +30 收起 理由
admin + 30 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:348250 发表于 2020-6-5 22:19 | 显示全部楼层
P1=B_Rotation[i]; 这句话是用的总线知识,P1口连接的是电机的相即(B_Rotation[i]),通过上面的数组将16进制赋值给P1口(P1口的8个引脚构成 16进制),从而驱动电机
回复

使用道具 举报

ID:143767 发表于 2020-6-6 17:20 | 显示全部楼层
谢谢各位指点的很细,学到了很多,非常感谢!
回复

使用道具 举报

ID:420836 发表于 2020-6-7 08:44 | 显示全部楼层
数组定义用于P1端口,0x02表示引脚1或P1.1,0x04表示P1.2,0x08表示P1.3,0x10表示P1.4。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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