標(biāo)題:
52單片機(jī)的光電編碼計(jì)數(shù)問題
[打印本頁]
作者:
heyang619834109
時(shí)間:
2018-5-11 15:54
標(biāo)題:
52單片機(jī)的光電編碼計(jì)數(shù)問題
在做光電編碼器的項(xiàng)目,通過D觸發(fā)器識別正轉(zhuǎn)和反轉(zhuǎn),分別觸發(fā)外部中斷0和1,此步是實(shí)現(xiàn)了的,但是,加入計(jì)數(shù)器來計(jì)數(shù)輸入脈沖時(shí)LCD一直顯示為0,請大神們幫忙看看我哪兒寫錯(cuò)了哦
#include <reg51.h>
#include<intrins.h>
#include<LCD1602.h>
#include "stdio.h" //定義浮點(diǎn)運(yùn)算模塊
#define uint unsigned int
#define uchar unsigned char
int data k=1; //標(biāo)志位
unsigned char TempBuffer[16]; //定義一個(gè)10位數(shù)組用于存放液晶顯示的數(shù)字
uint count,counter=0;
//中斷初始化函數(shù)
void INT_Init(){
IT0=1; //設(shè)置下降沿中斷 外部中斷0和1
IT1=1;
TMOD=0X05; //T0為16位計(jì)數(shù)方式
IE=0X87; //開中斷
TH0=0;
TL0=0; //預(yù)置初值
}
//延時(shí)函數(shù)
void DelayMs(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//中斷處理函數(shù)(3.2) //反計(jì)數(shù)
void service_int0()interrupt 0 using 0
{
k--;//標(biāo)志位減l
TR0=0;//停止計(jì)數(shù)
TH0=-TH0;
TL0=-TL0;//把計(jì)數(shù)器重新復(fù)值,此時(shí)相當(dāng)于減
TR0=1;//開始計(jì)數(shù)
}
//中斷處理函數(shù)(3.3) //加計(jì)數(shù)
void service_intl()interrupt 2 using 1
{
k++;//標(biāo)志位加l
TR0=0;//停止計(jì)數(shù)
TH0=-TH0;
TL0=-TL0;//把計(jì)數(shù)器重新復(fù)值,此時(shí)相當(dāng)于加
TR0=1;//開始計(jì)數(shù)
}
void timer0(void) interrupt 1 using 2 //計(jì)數(shù)器
{
uchar a,b,m,n;
uint c;
if(k==0) //反向計(jì)數(shù)滿 在這里我假設(shè)旋轉(zhuǎn)一圈的脈沖數(shù)為600,只要超過600就重新計(jì)數(shù)
{
a=TH0;
b=TL0;
a=TH0<<8;
c=a|b;
counter=1001011000-c; //600-當(dāng)前值,即減法
if(counter<0)
{
TH0=0;
TL0=0;
}
}
if(k==1) //正向計(jì)數(shù)滿
{
m=TH0;
n=TL0;
m=m<<8;
counter=m|n;
if(counter>600)
{
TH0=0;
TL0=0;
}
}
}
void main(){
DelayMs(255);//等待電源穩(wěn)定,液晶復(fù)位完成
LCD_Initial(); //初始化液晶
INT_Init();
GotoXY(0,0); //定義顯示行(第一行)
Print(" BIAN MA QI"); //顯示的內(nèi)容
GotoXY(0,1); //定義顯示行(第二行)
Print(" Q"); //顯示的內(nèi)容
while(1)
{
EA=0;
count=counter;
sprintf(TempBuffer,"%d",count); //數(shù)據(jù)轉(zhuǎn)換為數(shù)組TempBuffer,"%10表示數(shù)組長度為10位
GotoXY(0,1); //定義顯示行(第二行)
Print(&TempBuffer[0]); //從第一個(gè)數(shù)值開始顯示
EA=1;
}
}
復(fù)制代碼
作者:
heyang619834109
時(shí)間:
2018-5-11 16:01
我的矩形脈沖接到T0口來觸發(fā)計(jì)數(shù)的
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1