欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機通過編碼器脈沖值控制小車行駛距離 源程序
[打印本頁]
作者:
blinker
時間:
2019-8-6 20:02
標題:
51單片機通過編碼器脈沖值控制小車行駛距離 源程序
大一時使用51單片機進行控制小車走過的距離,現整理一下發個帖子湊一下黑幣,不喜輕噴。。
主要思路是利用單片機的外部中斷來讀出編碼器脈沖值,進而通過獲得的脈沖值來控制行駛距離。
首先利用外部中斷測得車輪轉一圈獲得的脈沖,并測出車輪一圈長度。再利用以上思路便能得出距離從而控制。
在控制小車轉過的角度時基本也是以上思路。
單片機源程序如下:
#include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器
typedef unsigned int u16;
typedef unsigned char u8;
u16 Encodercout=0;//輪子轉一圈大概產生270個脈沖,輪子周長為154mm,走過30度產生58個脈沖
u16 wheelcount=0;
u16 distance=1000;//定義變量為行駛距離,單位為mm
u16 time=0; // 定義占空比的變量
sbit PWM1=P2^0; //P2.0輸出右輪pwm
sbit PWM2=P2^1; //輸出左輪pwm 右輪較快
sbit motorl1=P2^2;
sbit motorl2=P2^3;//右輪
sbit motorr1=P2^4;
sbit motorr2=P2^5;//左輪
void motor();
//void delay(u16 a)
//{
// while(a--);
//}
void Int0Init()
{
//設置INT0
IT0=1;//跳變沿出發方式(下降沿)
EX0=1;//打開INT0的中斷允許。
EA=1;//打開總中斷
}
void TimeInt()
{
TMOD=0x01;//定時器0工作方式1
TH0=0xfc;//(65536-10)/256;//賦初值定時
TL0=0x18;//(65536-10)%256;//1ms
EA=1;//開總中斷
ET0=1;//開定時器0中斷
TR0=1;//啟動定時器0
}
//void UsartInit()
//{
// SCON=0X50; //設置為工作方式1
// TMOD=0X20; //設置計數器工作方式2
// PCON=0X80; //波特率加倍
// TH1=0XF3; //計數器初始值設置,注意波特率是4800的
// TL1=0XF3;
// ES=1; //打開接收中斷
// EA=1; //打開總中斷
// TR1=1; //打開計數器
//}
//void Usart() interrupt 4
//{
// u8 receivedata;
// receivedata=SBUF;//接收寄存器
// RI=0; //接受位清零
// SBUF = Encodercout; //發送寄存器
// while(!TI); // 等待發送完成
// TI=0; //發送位清零
// receivedata = 0;
//}
void main()
{
while(1)
{
Int0Init();
// UsartInit();
TimeInt();
if(wheelcount<=(distance/154))
{
motor();
}
else if(Encodercout<=(distance%154)/154*270)
{
motor();
}
else
{
motorl1=0;
motorr1=0;
}
}
}
void motor()
{
motorl1=1;
motorl2=0;
motorr1=1;
motorr2=0;
}
void tim0() interrupt 1
{
TH0=0xfc;//(65536-10)/256;//賦初值定時
TL0=0x18;//(65536-10)%256;1ms
time++;
if(time>=100)
time=0;
else if(time<=50) //輪占空比%30,可改 21:28
{
PWM1=1;
PWM2=0;
}
else if(time>50&time<=99)
{PWM1=0;
PWM2=1;
}//左輪占空比
else if(time>99&time<100)
{
PWM1=0;
PWM2=0;
}
}
void Int0() interrupt 0 //外部中斷0的中斷函數
{
if(Encodercout>=270)
{
Encodercout=1;
Encodercout++;
wheelcount++;
}
else
{
Encodercout++;
}
}
復制代碼
作者:
a5a5a5ss
時間:
2019-10-16 18:54
為什么程序里有一部分內容加//隱藏掉了?
作者:
快樂眼淚
時間:
2023-8-30 22:06
謝謝樓主分享!先收藏了有時間研究一下!
作者:
xingzhe8
時間:
2023-8-31 07:44
a5a5a5ss 發表于 2019-10-16 18:54
為什么程序里有一部分內容加//隱藏掉了?
那是串口函數 因為用不到
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1