|
通過T0計數(shù)器對減速直流電機軸的轉(zhuǎn)動圈數(shù)進(jìn)行累計(直流電機帶有編碼器),轉(zhuǎn)到一定圈數(shù)后讓電機停止,但不知道為什么,程序運行后,電機一直轉(zhuǎn),不會停,不知道為什么?求大俠們幫忙指點指點:
單片機源程序如下:
#include "reg52.h"
typedef unsigned int u16; //對系統(tǒng)默認(rèn)數(shù)據(jù)類型進(jìn)行重定義
typedef unsigned char u8;
sbit MOTOR1_A=P0^0; //直流電機的正極
sbit MOTOR1_B=P0^1; //直流電機的負(fù)極
u16 s1=10; //設(shè)定電機旋轉(zhuǎn)圈數(shù)
u16 count=0; //電機圈數(shù)
/*******************************************************************************
* 函 數(shù) 名 : delay_ms
* 函數(shù)功能 : ms延時函數(shù),ms=1時,大約延時1ms
* 輸 入 : ten_us
* 輸 出 : 無
*******************************************************************************/
void delay_ms(u16 ms)
{
u16 i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
/*******************************************************************************
* 函 數(shù) 名 : time0_init
* 函數(shù)功能 : 定時器0中斷配置函數(shù),通過設(shè)置TH和TL即可確定計數(shù)值
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void counter0_init(void)
{
TMOD|=0X05; //選擇為計數(shù)器0模式,工作方式1
TH0=0xFC; //電機編碼器867個脈沖,減速器軸轉(zhuǎn)一圈,初值設(shè)置為FC9D
TL0=0x9D;
TF0=0;
TR0=1; //打開計數(shù)器
ET0=1; //打開計數(shù)器0中斷允許
EA=1; //打開總中斷
}
/*******************************************************************************
* 函 數(shù) 名 : contor0
* 函數(shù)功能 : 定時器0中斷函數(shù),通過設(shè)置TH和TL即可確定計數(shù)值,并對減速器軸圈數(shù)進(jìn)行累加
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void conter0() interrupt 1 //定時器0中斷函數(shù)
{
TH0=0xfC; //給計數(shù)器賦初值
TL0=0x9D;
count++; //對電機轉(zhuǎn)動圈數(shù)進(jìn)行累加
}
/*******************************************************************************
* 函 數(shù) 名 : main
* 函數(shù)功能 : 主函數(shù)
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void main()
{
u16 k; //緩沖變量
k=count;
counter0_init(); //計數(shù)器0中斷配置
MOTOR1_A=1; //直流電機開始正轉(zhuǎn)
MOTOR1_B=0;
do
{
;
}
while(k<s1); //檢測編碼器計數(shù)是否達(dá)到設(shè)定值s1
TR0=0; //計數(shù)器停止計數(shù)
MOTOR1_A=1; //電機停止
MOTOR1_B=1;
delay_ms(5000);
}
|
|