標籤:紅外感應器 單片機 c語言
什麼是捕獲?
捕獲就是捕捉某一瞬間的值,通常用它來測量外部某個脈衝的寬度或周期。使用捕獲功能可以非常準確的測量脈衝寬度或周期,他的工作原理是:單片機內部有兩組寄存器,其中一組的內部數值是按照固定的機器周期遞增或遞減,通常這組寄存器就是定時器的計數器寄存器(TLX,THX),當與捕獲功能相關的外部某引腳有一個負跳變時,捕獲便會立即將此時第一組寄存器中的數值準確地擷取,並且存入另一組寄存器中,這組寄存器通常被稱為“陷阱寄存器”(RCAPXL,RCAPXH),同時向CPU申請中斷,以方便軟體記錄。當給引腳的下一次負跳變來臨時,便會產生另外一個捕獲,再次向CPU申請中斷,軟體記錄兩次捕獲之間資料後,便可以準確的計算出該脈衝的周期。
定時器2控制寄存器T2CON
TF2 定時器2 溢出標誌位.定時器2 溢出時將置位.當TCLK 或RCLK 為1 時,將不會置位
EXF2 定時器2 外部標誌,當EXEN2=1, 並在引腳T2EX 檢測到負跳變時置位.如果定時器2
中斷被允許,將產生中斷.
RCLK 接收時鐘標誌,當串列口以方式1 或3 工作時,將使用定時器2 的溢出率作為串列
口接收時鐘頻率
TCLK 發送時鐘標誌,位當串列口以方式1 或3 工作時,將使用定時器2的溢出率作為串列
口接收時鐘頻率
EXEN2 定時器2 外部允許標誌,當EXEN2=1 時,在T2EX 引腳出現負跳變時將造成定時器2
捕捉或重裝,共置位EXF2,產生中斷
TR2 定時器運行控制位,置位時,定時器2 將開始工作,否則定時器2 停止工作
C/T2 定時器計數方式選擇位,如果C/T2=1,定時器2 將作為外來事件計數器,否則對內部
時鐘脈衝計數
CP/RL2 捕捉/重裝標誌位,當EXEN2=1,時如果CP/RL2=1,T2EX 引腳的負跳變將造成捕捉,
如果CP/RL2=0 ,T2EX 引腳的負跳變將造成重裝
機器周期:一個機器周期包含6個狀態周期,用S1、S、.......S6;共12個節拍S1P1 S1P2 ......S6P2
指令周期:執行一條指令所佔用的全部時間,以機器周期為單位。
12MHz晶振 單周期和雙周期指令的時間為1μ和2μs,乘法和除法指令為4μs
可以捕獲訊號
智能小車專用紅外反射式探頭\紅外避障\反射式紅外感測只要前方有東西擋住就可以將高電平轉換成低電平用數位管顯示 被遮住的次數下面是代碼:#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]=
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar shi,uchar ge)
{
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(5);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(5);
}
uint read()
{
uchar tl,th1,th2;
uint val;
while(1)
{
th1=TH0;
tl=TL0;
th2=TH0;
if(th1==th2)
break;
}
val=th1*256+tl;
return val;
}
void main()
{
uchar a,b;
uint num;
TMOD=0x05;
TH0=0;
TL0=0;
TR0=1;
while(1)
{
num=read();
if(num>=100)
{
num=0;
TH0=0;
TL0=0;
}
a=num/10;
b=num%10;
display(a,b);
}
}
52單片機定時器2