|
這個(gè)是我自己用的,你參考一下,速度不是很快,但正常使用是可以的,定時(shí)器掃描速度提高一點(diǎn),可以讀取得快一點(diǎn)
/*──────────────────────────────────────────────────────────────────────────────────────────────────
EC11_T0.c
編寫:YGG
完成日期:20211118
功能:通過T0定時(shí)器來完成EC11編碼開關(guān)的檢測(cè)
適用于STC8051單片機(jī)T0定時(shí)器編碼開關(guān)函數(shù)
完成狀態(tài):已經(jīng)完成
──────────────────────────────────────────────────────────────────────────────────────────────────*/
#include "Stc8a.h"
#include "EC11_T0.h"
sbit sa=P2^2; //編碼開關(guān)的兩個(gè)端口
sbit sb=P2^1; //編碼開關(guān)的兩個(gè)端口
sbit over=P3^2; //過流檢測(cè)IO
sbit buzz=P4^0; //用于蜂鳴器控制
bit fa; //用于標(biāo)記編碼開關(guān)兩個(gè)端口狀態(tài)
bit fb; // 0 為沒有記錄,1 為已經(jīng)記錄
unsigned char turn_f=0x00,turn_r=0x00; //用于存放旋轉(zhuǎn)變量的,一個(gè)是正反兩個(gè)方向
//──────────────────────────────────────────────────────────────────────────────────────────────────
void Timer0Init(void) //T0定時(shí)器初始化,1毫秒@11.0592MHz
{
AUXR |= 0x80; //定時(shí)器時(shí)鐘1T模式
TMOD &= 0xF0; //設(shè)置定時(shí)器模式
TL0 = 0x66; //設(shè)置定時(shí)初始值
TH0 = 0xEA; //設(shè)置定時(shí)初始值
TF0 = 0; //清除TF0標(biāo)志
ET0 = 1; //T0定時(shí)器中斷開啟
TR0 = 1; //定時(shí)器0開始計(jì)時(shí)
P_SW2=0x80; //
P2PU|=0x06; //P2.1,P2.2上拉電阻啟用
P_SW2=0x00; //
}
//──────────────────────────────────────────────────────────────────────────────────────────────────
//──────────────────────────────────────────────────────────────────────────────────────────────────
void timer0() interrupt 1 //T0定時(shí)器中斷
{
static unsigned char bm_data; //用于保存兩個(gè)端口讀取到的數(shù)據(jù)
TL0 = 0x66; //設(shè)置定時(shí)初始值
TH0 = 0xEA; //設(shè)置定時(shí)初始值
if(!over)buzz=!buzz; //檢測(cè)到低電平,蜂鳴器響
else buzz=0;
//──────────────────────────────────────────────────────────────────────────────────────────────
if(sa&&sb) //如果兩個(gè)端口都是1,就表示編碼開關(guān)位于"靜止"
{
if(bm_data==0x12)
{
turn_f++;
}
else if(bm_data==0x21)
{
turn_r++;
}
bm_data=0; //長(zhǎng)期靜止?fàn)顟B(tài),端口數(shù)據(jù)要清除
fa=1;
fb=1;
}
//──────────────────────────────────────────────────────────────────────────────────────────────────
else if((fa!=sa)||(fb!=sb)) //如果標(biāo)志位的上次的一樣,就不記錄端口數(shù)據(jù)
{
bm_data=(bm_data<<1)|sa;
bm_data=(bm_data<<1)|sb;
fa=sa;
fb=sb;
}
}
//──────────────────────────────────────────────────────────────────────────────────────────────────
|
|