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