欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
此程序下載到單片機后為什么電機會亂轉?
[打印本頁]
作者:
Maryzy
時間:
2020-4-5 16:06
標題:
此程序下載到單片機后為什么電機會亂轉?
預想功能:按下按鍵,電機反轉5S后,延時一會,再以相同速度正轉5S,停止
現在的現象:下載程序后電機亂轉的,求求大佬了
單片機源程序如下:
#include"reg51.h"
#define uint16 unsigned int
#define uint8 unsigned char
#define GPIO_MOTOR P1
sbit k1=P3^1;
unsigned char code FFS[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};//·′×a
unsigned char code FFN[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};//Õy×a
typedef unsigned int u16;
unsigned char Direction,Speed;
void Delay(unsigned int t);
void Motor();
void Motor()
{
unsigned char i;
for(i=0;i<8;i++)
{
if(Direction==1)
GPIO_MOTOR=FFS[i]&0x1f;
if(Direction==0)
GPIO_MOTOR=FFN[i]&0x1f;
Delay(Speed);
}
}
void Delay(unsigned int t)//t=5000Ñó3ù4s
{
unsigned int k;
while(t--)
{
for(k=0;k<80;k++)
{}
}
}
void main(void)
{
TMOD=0x10;
TH1=0x3C;
TL1=0xB0;
EA=1;
ET1=1;
TR1=0;
while(1)
{
if(k1==1)
{
Delay(1);
if(k1==1)
{
TR1=1;
Direction=1;
Speed=10;
}
}
else
{
Delay(5000);
TR1=0;
}
}
}
void timer() interrupt 3
{
static u16 i;
TH1=0x3C;
TL1=0xB0;
i++;
if(i==100)
{
Delay(5000);
Delay(5000);
Delay(5000);
Direction=0;
Speed=10;
i=0;
}
Motor();
}
復制代碼
作者:
wysh_2004
時間:
2020-4-5 21:15
從程序看,你的電機是一個步進電機,FFS[]、FFN[]數組分別是正反轉數組;我暫時還不知道電機為什么會亂轉,但從程序本身來看還是有點問題的。首先,我看不出程序是怎么實現“電機反轉5S后,延時一會,再以相同速度正轉5S,停止”的;其次,在中斷服務函數中不應有Delay(5000)這樣的長延時函數。
從我的角度來處理,我會先把程序最小化,只在主函數中保留 Motor()函數,其他的按鍵、定時中斷均先屏蔽掉, Motor()函數也只留FFS數組,單獨試電機是否能正轉,再換成FFN數組,試電機能否反轉,再加入按鍵功能,延時正反轉功能。最終實現既定功能。
作者:
faguiq
時間:
2020-4-7 00:06
這代碼寫得也太亂了吧,你自己改延時函數應該 就行了,
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1