跪求高手帮忙修改,想用串口助手读出红外遥控的按键值,问题是串口助手啥都没收到,先谢过了!!!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跪求高手帮忙修改,想用串口助手读出红外遥控的按键值,问题是串口助手啥都没收到,先谢过了!!!相关的知识,希望对你有一定的参考价值。
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbit IR=P3^2; //红外接口标志
unsigned char irtime;//红外用全局变量
bit irpro_ok,irok;
unsigned char IRcord[4];
unsigned char irdata[33];
void Ir_work(void);
void Ircordpro(void);
void tim0_isr (void) interrupt 1 using 1
irtime++; //用于计数2个下降沿之间的时间
void EX0_ISR (void) interrupt 0 //外部中断0服务函数
static unsigned char i; //接收红外信号处理
static bit startflag; //是否开始处理标志位
if(startflag)
if(irtime<63&&irtime>=33)//引导码 TC9012的头码,9ms+4.5ms
i=0;
irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1
irtime=0;
i++;
if(i==33)
irok=1;
i=0;
else
irtime=0;
startflag=1;
void TIM0init(void)//定时器0初始化
TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
TH0=0x00; //重载值
TL0=0x00; //初始化值
ET0=1; //开中断
TR0=1;
void EX0init(void)
IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2)
EX0 = 1; //使能外部中断
EA = 1; //开总中断
void Ir_work(void)//红外键值散转程序
SBUF=IRcord[2];
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
irpro_ok=0;//处理完成标志
void Ircordpro(void)//红外码值处理函数
unsigned char i, j, k;
unsigned char cord,value;
k=1;
for(i=0;i<4;i++) //处理4个字节
for(j=1;j<=8;j++) //处理1个字节8位
cord=irdata[k];
if(cord>7)//大于某值为1
value|=0x80;
if(j<8)
value>>=1;
k++;
IRcord[i]=value;
value=0;
irpro_ok=1;//处理完毕标志位置1
void main(void)
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
EA=1; //打开总中断
TR1=1; //打开计数器
EX0init(); //初始化外部中断
TIM0init();//初始化定时器
while(1)//主循环
if(irok) //如果接收好了进行红外处理
Ircordpro();
irok=0;
if(irpro_ok) //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等
Ir_work();
uint8 code trdata1[]=0,0,24,160,1,236;
void Txd2_num(void)
uint8 i=0;
for(i=0;i<6;i++)
Usart1.RxdBuf[i]=trdata1[i];
SBUF =Usart1.TxdBuf[0];
Usart1.TxdCnt=0;
Usart1.TxdNum =6;
Usart1.TxdBusy=1;
/*****************************************
*串口1中断
*****************************************/
void RXD_Int_Service() interrupt 4
uint8 ch;
if(RI)
RI=0;
Usart1.RxdDly=6; //超过0.3S清空计数
Usart1.RxdBuf[Usart1.RxdCnt]=ch;
Usart1.RxdCnt++;
if(Usart1.RxdCnt>=10)
Usart1.RxdTrue=1; //接收正确。
Usart1.RxdNum=Usart1.RxdCnt;
Usart1.RxdCnt=0;
if(TI)
TI=0;
if(Usart1.TxdBusy)
Usart1.TxdCnt++;
if(Usart1.TxdCnt<Usart1.TxdNum) //发送计数。
SBUF=Usart1.TxdBuf[Usart1.TxdCnt];
else
Usart1.TxdBusy=0; //发送完成一帧数据,标志位。
我的红外摇控接收程序如下,可作参考
//*********************************************
//中断接收摇控头的信号.
unsigned int code comp[5]=6000,2000,500,200,500; //分别代表9mS,4.5mS,1.5mS,0.56mS,1.5mS.
//此时晶振为12MHz
unsigned char Cnt;
void Ex_Int0_InSevice() interrupt 0
unsigned char j=0,i=0,ch[4];
unsigned int comp_data=0;
ch[0]=0;
ch[1]=0;
ch[2]=0;
ch[3]=0;
if(red_rxd==0 && !rxd_ture && RedDly==0)
while(red_rxd==0)comp_data++; //等高电平的到来
if(comp_data>comp[0]) //9mS的低电平
comp_data=0;
while(red_rxd==1)
comp_data++; //等低电平的到来
if(comp_data>5000)
return;
if(comp_data>comp[1]) //4.5mS的低电平
while(i<4)
for(j=0;j<8;j++)
while(red_rxd==0); //等高电平的到来
comp_data=0;
while(red_rxd==1)
comp_data++; //等低电平的到来
if(comp_data>1500)
return;
ch[i]=ch[i]>>1;
if(comp_data>comp[2])
ch[i]=ch[i]|0x80;
i++;
Cnt++;
if(Cnt>3)Cnt=0;
if(ch[0]==0x00&&ch[1]==0xff&&(ch[2]+ch[3])==0xff)
IR_key=ch[2];
rxd_ture=1;
RedDly=3;
追问
这个是什么程序,好像和红外无关阿!
能请你帮忙修改下吗,我一定把财富补上
本回答被提问者采纳跪求高手帮忙!!!!解决logparser的问题
我在logparser软件中查询服务器日志文件,需要查询服务器日志一天的点击量是多少,并且要算出一天中每个小时的点击率是多少?
参考技术A 每小时的点击量logparser "SELECT TO_LOCALTIME(QUANTIZE(TO_TIMESTAMP(date, time),3600)) AS Hours, COUNT(*) AS Hits INTO IISHC_RequestsPerHour.csv FROM *.log where To_Date(TO_LOCALTIME(TO_TIMESTAMP(date, time)))=TIMESTAMP('10/08/2010','MM/dd/yyyy' ) GROUP BY Hours ORDER BY Hours" -i:IISW3C -o:CSV -recurse:-1
将时间改成当天的时间就行。
每天的点击量
ogparser "SELECT To_Date(TO_LOCALTIME(TO_TIMESTAMP(date, time))) AS [Date1], c-ip AS CIP INTO IISHC_DistinctClientIPPerDay.csv FROM *.log GROUP BY [Date1], CIP" -i:IISW3C -o:CSV -recurse:-1
以上是关于跪求高手帮忙修改,想用串口助手读出红外遥控的按键值,问题是串口助手啥都没收到,先谢过了!!!的主要内容,如果未能解决你的问题,请参考以下文章