文档介绍:红外摇控HS5104解码程序
现在市面上,风扇摇控器都用HS5104作编码芯片,关键是以低格占据市场。用过HS5104的朋友都知道,它的工作电压比较高,在低电压3V以下工作时,经常会出错,很多朋友都说HS5104的接收程序不稳定。其实,大多数是HS5104工作不稳定引起的,只要你接收程序合理,多接收几次作比较,码宽的变动变化率允许大一点(我的程序允许码宽变动在百分之三十),然后再保证HS5104的工作电压在3V以上,那肯定是没问题的。
下面一段程序,之所以接收程序会那么复杂,是针对HS5104不稳定而设计的。它放在中断里进行,希望能给使用合泰C开发的朋友提供参考,或者下载后稍作修改便可实现功能调试。
//***********红外摇控 ht48r05A-1 & HS5104
//***********Make in QUSUN at 2008-01-18
//**********LCSOME**********************
#include <HT48R06A->
#pragma vector isr_4 @ 0x4
#pragma vector isr_8 @ 0x8
#define uchar unsigned char
#define ulint unsigned long int
#pragma rambank0
unsigned char rf_addr1;
unsigned char rf_addr2;//12位地址码
unsigned char rf_addr1_old;//
unsigned char rf_addr2_old;
unsigned char rf_cont;//接收次数,判断长按
unsigned char rf_bitsum;//接收到的数据位的计数器
unsigned char rf_0_sum;//接收到0的个数计数器
unsigned char rf_mksum;//码宽计数器
uchar time_s;//秒计数器
uchar time_ms;//毫秒计数器
uchar time_us;//微秒计数器
//*
bit rf_sta;//起始位有效标志1=有效
bit rf_bdata;//前一个接收检测电平
bit rf_ture;//接收成功标志1=有效
bit rf_6ms ;//6毫秒低电平指示,1有效
#define rf_in _pc1 //接收数据输入端
#define rf_1_sum rf_0_sum
#define SPEAKER _pb2
//***********************************************
void isr_4()
{//外部中断子程序
........................
}//外部中断子程序
//**********************************************
void isr_8(){//计数器0中断子程序
if(!rf_sta)//如果起始位无效
{//00
rf_1_sum++;
if(rf_1_sum>100)rf_cont=0;//如果释放按键则清计数器
if(!rf