資源簡介
PIC16f877解碼6221紅外遙控C 程序 1602顯示
代碼片段和文件信息
#include????????//調(diào)用頭文件,可以去PICC軟件下去查找PIC16F87XA單片機的頭文件
__CONFIG(XT&WDTDIS&LVPDIS);????//定義配置字,晶振類型:XT,關(guān)閉開門狗,禁止低電壓編程
#define?RSPIN??RB5?//Data?or?Instrument?Select
#define?RWPIN??RB4?//Write?or?Read
#define?EPIN??RB3?//6800?mode?Enable?single
unsigned?char?tmr_times;
unsigned?char?code_data;
unsigned?char?code;
unsigned?char?int_times;
unsigned?char?buf1;
bit?head_ok;??
bit?code_ok;
bit?clrbit;
//---------------------------------------
//名稱:?T0初始化函數(shù) ?
//作者:cby
//網(wǎng)站:寧波單片機開發(fā)網(wǎng)
//網(wǎng)址:www.nbdpj.com
//郵箱:nbdpj@nbdpj.com
//日期:20110201??
//-----------------------------------------
void?init_timer0(void)
{
T0CS=0;??????//TMR0工作于
PSA=1;???????//TMR0不分頻器?
????TMR0IF=0;????//T0中斷標志位清零
????TMR0IE=1;????//T0中斷允許
????TMR0=5;??????//賦初值,以使T0250US中斷
????GIE=1;??? ?//開總中斷
}
//---------------------------------------
//名稱:?解碼錯誤處理函數(shù) ?
//作者:cby
//網(wǎng)站:寧波單片機開發(fā)網(wǎng)
//網(wǎng)址:www.nbdpj.com
//郵箱:nbdpj@nbdpj.com
//日期:20110201??
//-----------------------------------------
void?wrong(void)??//如果有錯誤,將相應寄存器清零,準備下一次接收
{
?? int_times=0;
?? tmr_times=0;
?? head_ok=0;
?? code_data=0;??
?? code_ok=0;
}
//---------------------------------------
//名稱:?0或1判斷函數(shù) ?
//作者:cby
//網(wǎng)站:寧波單片機開發(fā)網(wǎng)
//網(wǎng)址:www.nbdpj.com
//郵箱:nbdpj@nbdpj.com
//日期:20110201??
//-----------------------------------------
unsigned?char?one_zero(void)
{??
//參看遙控器芯片HT6221的說明書,0編碼的脈沖周期為1.12ms
//本例中,時間中斷為0.25ms所以我們判定取大于0.75ms小于1.5ms的脈沖均為0編碼
?? if((tmr_times>3)&(tmr_times<6))
?? {
???? return?0;
?? }
//參看遙控器芯片HT6221的說明書,1編碼的脈沖周期為2.24ms
//本例中,時間中斷為0.25ms所以我們判定取大于1.75ms小于2.75ms的脈沖均為0編碼
?? else?if((tmr_times>7)&(tmr_times<11))
?? {
???? return?1;
?? }
//如果脈沖周期不在0.75-1.5ms或者1.75-2.75ms區(qū)間的,我們認為是錯碼,返回2
?? return?2;
}
//---------------------------------------
//名稱:?CCP2初始化函數(shù) ?
//作者:cby
//網(wǎng)站:寧波單片機開發(fā)網(wǎng)
//網(wǎng)址:www.nbdpj.com
//郵箱:nbdpj@nbdpj.com
//日期:20110201??
//-----------------------------------------
void?ccp2_int(void)
{
CCP2CON=0x04; //捕捉模式,捕捉每個下降沿
T1CON=0x00; //CCP要使用捕捉特性,T1必須運行在定時工作或者同步計數(shù)器模式下
TRISC1=1;???????????????//RC1設置為輸入狀態(tài),該引腳接到了紅外接收頭的數(shù)據(jù)引腳上
CCP2IF=0;???????????????//捕捉中斷標志位清零
CCP2IE=1; //該捕捉允許中斷
TMR1ON=1; ????????????//T1啟動
}
//---------------------------------------
//名稱:?中斷處理函數(shù) ?
//作者:cby
//網(wǎng)站:寧波單片機開發(fā)網(wǎng)
//網(wǎng)址:www.nbdpj.com
//郵箱:nbdpj@nbdpj.com
//日期:20110201??
//-----------------------------------------
void?interrupt?ISR(void)????//中斷處理函數(shù)
{
?? if(TMR0IF==1)???????????//如果是T0中斷標志位為1,即250US時間到并引發(fā)中斷
?? {
TMR0=13;????????????//給TO賦初值,以便下一個循環(huán)開始
?? TMR0IF=0;???????????//清除TO中斷標志位??
?? tmr_times++; ????//記錄中斷的次數(shù),依據(jù)此來判斷接收編碼的狀態(tài)
?? }
?if(CCP2IF==1)??????????//外部中斷標志位如果為1,即為CCP2捕捉中斷,轉(zhuǎn)入處理程序
?{
CCP2IF=0;????????????//清除CCP2捕捉中斷標志位??????
GIE=0;? ?//全局中斷關(guān)掉,以避免解碼過程進入其他中斷 ?
?? int_times++;?? ?//捕捉中斷計次
?? if(head_ok==0)?????? //如果還沒接收到頭碼,那么先判斷脈沖編碼是否為頭碼
?? {
//參看遙控器芯片HT6221的說明書,發(fā)射代碼的頭碼由一個9ms的起始碼和一個4.5ms的結(jié)果碼組成
//本例中,時間中斷為0.25ms所以我們判定大于12.5ms小于14.5ms的脈沖均為13.5ms的頭碼編碼
???? if
- 上一篇:模擬退火遺傳算法 源程序
- 下一篇:lenet_mnist_model.pth
評論
共有 條評論