这是个51单片机的红外解码程序,用的是11.0592M晶振,我想改用22.1184M晶振应该怎么修改程序,大神帮个忙

//###################################################################################... //#################################################################################################
//文件:51单片机的红外遥控解码程序
//属性:使用外部中断0连接遥控头,接收红外遥控键值送P2口显示,12MHz外部晶振
//作者:新思科电子 2011-06
//资源:P3.2=接收头输入,P2=8LED
//#################################################################################################
#include"reg52.h"

#define uint unsigned int
#define uchar unsigned char

uchar led=0x00;

void io_init(void);
void int_init(void);

void main(void)
{
io_init();
int_init();
while(1);
}

void io_init(void)
{
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;
}

void int_init(void)
{
EX1=1;
EA=1;
}

void interrupt1()interrupt 2
{
uchar i=0,j=0,k=0,us=0;
uchar addr[4]={0};

EX1=0;

for(i=0;i<255;i++) //9ms内有高电平认为是干扰
{
if(P3&0x08) //255的值实际时间为800us
{
EX1=1;
return;
}
}
while(!(P3&0x08)); //等待9ms低电平过去
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
while(P3&0x08); //等待4.5ms高电平过去
while(!(P3&0x08)); //等待0.56ms低电平后面的高电平
while(P3&0x08) //计算这个高电平的时间
{
for(us=0;us<=32;us++); //100us的延时语句
//for(us=0;us<=16;us++);
if((k++)>=30) //高电平时间过长退出程序
//if((k++)>=15)
{
EX1=1;
return;
}
}
addr[i]=addr[i]>>1; //接收一位数据
if(k>=8)
addr[i]=addr[i]|0x80; //高电平大于0.56ms,则为1
k=0;
}
}

P2=~(addr[2]); //P2的LED显示二进制键值

EX1=1;
}
展开
 我来答
若以下回答无法解决问题,邀请你更新回答
懂事电子设计
2017-11-06 · TA获得超过1940个赞
知道小有建树答主
回答量:3020
采纳率:80%
帮助的人:316万
展开全部
那要对所有的延时函数进行重新调整.
懂事电子设计 Vgz
追问
可以大概的帮改一下吗,谢谢了,不过这个好像就一个延时语句吧,就是那个100us的?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式