标题: 单片机管脚定义问题 [打印本页]

作者: dj3365191    时间: 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);        //改变这个参数可以调整电机转速
                 }
          }
}



作者: xuyaqi    时间: 2020-6-5 18:58
这句话 P1=B_Rotation[i]; 说明驱动在P1口,根据数组定义知道在低4位。
作者: odfggf    时间: 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]
作者: xu2509674896    时间: 2020-6-5 19:55
“0x”代表十六进制数,4位二进制可以表示一个十六进制数,0x02对应的二进制数是“0000 0010”,正好对应51单片机的一个P端口。这样应该就理解了。
实际上上面的程序操作的整个P1端的8位都被操作了。想要只操作其中某一位,看看C语言的位操作语句,百度一些例子,你就知道了。
当然,“sbit”关键字也可以。
作者: liyongan_1985    时间: 2020-6-5 20:32
P1=B_Rotation[i];  //输出对应的相 可以自行换成反转表格
修改此处的P1就可以实现
作者: LUQIMAI    时间: 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}

作者: 红领巾    时间: 2020-6-5 22:19
P1=B_Rotation[i]; 这句话是用的总线知识,P1口连接的是电机的相即(B_Rotation[i]),通过上面的数组将16进制赋值给P1口(P1口的8个引脚构成 16进制),从而驱动电机
作者: dj3365191    时间: 2020-6-6 17:20
谢谢各位指点的很细,学到了很多,非常感谢!
作者: TTQ001    时间: 2020-6-7 08:44
数组定义用于P1端口,0x02表示引脚1或P1.1,0x04表示P1.2,0x08表示P1.3,0x10表示P1.4。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1