欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
為什么我用單片機操作SG90時,單片機會復位
[打印本頁]
作者:
完后余生9375
時間:
2020-4-2 13:35
標題:
為什么我用單片機操作SG90時,單片機會復位
我的單片機和SG90 9g舵機是用的一個電源。信號線接在了P1^0上面。但是我用按鍵控制舵機方向的時候。遇到了以下問題。困擾許久,還請51黑的大神不吝賜教。
我在程序里采用count來定時。每0.5ms進入一次中斷。count == 40為一個周期20ms。用PWM_count 控制方向。初始值為1(轉向0度)。2(轉向45度)3轉向90度。分別用s2 s3 s4按鈕對其PWM_count進行修改。但是我在使用中發現。我按下s4后舵機會正常的轉到90度,然后會自己又轉回到單片機初始值的設置值1也就是0度。按下s3也是轉45度又回到0度。通過調試發現是PWM_count的值自動變為了1造成的。這種情況是單片機復位造成的嗎?
一個星期了,還是沒有解決。下面是程序,大佬們幫看看。
#include<reg52.h>
sbit SG_PWM=P1^0;
unsigned char count=0;
unsigned char PWM_count=1; //初始值 1--0度,2--45度,3--90
unsigned char a=0;
sbit s2 = P3^0;
sbit s3 = P3^1;
sbit s4 = P3^2;
sbit led1 = P1^2;
sbit led2 = P1^3;
void Timer_Init()
{
TMOD=0X01; //T0定時方式1
TH0=0xfe;
TL0=0x33; //計數初值設置為0.5ms
ET0=1; //打開定時器0的中斷
TR0=1; //打開定時器0
EA=1; //開總中斷
}
/**
* 延時函數
**/
void delay(unsigned int i)
{
unsigned int x,y;
for(x = i; x > 0; x--)
for(y = 120; y > 0 ; y--);
}
void Timer() interrupt 1 //特別注意此處,0--外部中斷0,1--定時器中斷0,2--外部中斷1,3--定時器中斷1,4--串行口中斷1
{
TR0=0;
TH0=0xfe;
TL0=0x33; //重新賦計數初值為0.5ms
if(count<=PWM_count)
{
SG_PWM=1;
}
else
{
SG_PWM=0;
}
count++;
if(count>=40)
{
count=0;
a++;
}
TR0=1;
}
void main()
{
Timer_Init();
while(1){
if(s2 == 0){
delay(100);
if(s2 == 0){
count = 0;
PWM_count = 1;
}
}
if(s3 == 0){
delay(100);
if(s3 == 0){
count = 0;
PWM_count = 2;
}
}
if(s4 == 0){
delay(100);
if(s4 == 0){
count = 0;
PWM_count = 3;
}
}
if(PWM_count == 1){
led1 = 0;
led2 = 1;
}
if(PWM_count == 3){
led1 = 1;
led2 = 0;
}
}
}
復制代碼
作者:
王天星
時間:
2020-4-2 18:24
從代碼上看沒什么異常,你判斷是單片機復位導致的,你可以在單片機上電時串口發送一個數據,如果舵機旋轉過程中出現單片機復位,那一定會有串口數據。你這種情況導致單片機復位的可能性是有的。舵機使用外接5V電壓和單片機共地就可以解決。
作者:
完后余生9375
時間:
2020-4-8 15:29
王天星 發表于 2020-4-2 18:24
從代碼上看沒什么異常,你判斷是單片機復位導致的,你可以在單片機上電時串口發送一個數據,如果舵機旋轉過 ...
感謝!確實是舵機和單片機共用電源所致。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1