電機(jī)轉(zhuǎn)速信號(hào)的單片機(jī)測(cè)量程序
掃描二維碼
隨時(shí)隨地手機(jī)看文章
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
//定義8253的寄存器地址
#defineCOMXBYTE[0x6000]//定義8253的控制字寄存器地址
#defineC0XBYTE[0x0000]//定義8253的計(jì)數(shù)器0寄存器地址
#defineC0IXBYTE[0x1000]
sbitP1_7=P1^7;
uintBUF810;
ucharh,l,a,b,c,sendflag,FREQ;
//主函數(shù),初始化定時(shí)器和片外寄存器
voidmain(void)
{
EA=1;PT0=1;
ET0=1;
IT0=1;IT1=1;
EX0=1;EX1=1;ET2=1;
T2CON=0x08;
TMOD=0x21;//用定時(shí)器0產(chǎn)生2s的中斷信號(hào),為8253計(jì)數(shù)提供門控。
TH0=-1000/256;
TL0=-1000%256;
//向8253R中的控制字寄存器中選擇計(jì)數(shù)器0,并對(duì)其幅初值0;
COM=0x30;
C0=0;C0=0;
TR0=1;
sendflag=1;
while(1){}
}
/*定時(shí)計(jì)數(shù)器0的中斷服務(wù)子程序*/
voidtimer0(void)interrupt1using1
{
TH0=-1000/256;//定時(shí)器T0的高四位賦值
TL0=-1000%256;
FREQ=FREQ+1;//定時(shí)器T0的低四位賦值
if(FREQ==1000)//1秒判斷
{
FREQ=0;
P1_7=!P1_7;//信號(hào)輸出端口取反
COM=0x00;//計(jì)數(shù)器0閂鎖操作
l=C0;//分別讀取高、低8位的數(shù)據(jù)
h=C0;
BUF810=-(h*256+l);
COM=0x30;
C0=0;C0I=0;
}
}





