#include <reg52.h>
#include <lcd.h>
#include <epprom.h>
unsigned int temp_low_pulse1;
unsigned int temp_low_pulse0;
unsigned int temp_high_pulse1;
unsigned int temp_high_pulse0;
unsigned int count;
unsigned char write_enable;
sbit led8=P0^7;
sbit key=P0^0;
sbit key1=P0^1;
sbit key2=P0^2;
/********* 延时1S ******************************************/
void delay_1s()
{
unsigned int i,j;
for(i=5;i>0;i--)
for(j=110;j>0;j--);
}
void initial()
{
EA=1; //开启总中断
EX1=1; //开启外部中断1
IT1=1; //外部中断1为下降沿有效
TMOD=0x19; //定时器1,2 方式为1,且T0 GATE位有效
TH0=0x00;
TL0=0x00;
TH1=0x00;
TL1=0x00;
count=0;
}
void main()
{
unsigned char temp,temp_ge,temp_shi,temp_bai,num_ge,num_shi,num_bai,num_qian;
unsigned int count_qian,count_bai,count_shi,count_ge,num;
initial();
init();
lcd_int();
num=0;
while(1)
{
if(key==0)
{
num++;
if(num==2048)
num=0;
while(!key);
}
if(key1==0)
{
if(num==0)
num=2048;
num--;
while(!key1);
}
if(count>=2048)
count=0;
temp=read_add(num);
temp_bai=temp/100;
temp_shi=temp%100/10;
temp_ge=temp%10;
num_qian=num/1000;
num_bai=num%1000/100;
num_shi=num%100/10;
num_ge=num%10;
count_qian=count/1000;
count_bai=count%1000/100;
count_shi=count%100/10;
count_ge=count%10;
write_com(0x80);
write_date(0x30+temp_bai);
write_com(0x81);
write_date(0x30+temp_shi);
write_com(0x82);
write_date(0x30+temp_ge);
write_com(0x84);
write_date(0x30+num_qian);
write_com(0x85);
write_date(0x30+num_bai);
write_com(0x86);
write_date(0x30+num_shi);
write_com(0x87);
write_date(0x30+num_ge);
write_com(0x89);
write_date(0x30+count_qian);
write_com(0x8a);
write_date(0x30+count_bai);
write_com(0x8b);
write_date(0x30+count_shi);
write_com(0x8c);
write_date(0x30+count_ge);
if (write_enable==1)
{
write_add(count,5); //将红外信号的低电平的值写入储存器COUNT地址内
delay_1s();
write_add(count+1,6); //将红外信号的低电平的值写入储存器COUNT+1地址内
delay_1s();
write_add(count+2,7); //将红外信号的高电平的值写入储存器COUNT+2地址内
delay_1s();
write_add(count+3,8); //将红外信号的高电平的值写入储存器COUNT+3地址内
delay_1s();
write_enable=0;
}
}
}
void int1() interrupt 2
{
EX1=0; //关外部中断1
TR0=0; //关闭定时器0
TR1=0; //关闭定时器1
temp_low_pulse1=TH1-TH0; //将TH1减去TL0的值(即红外信号的低电平)赋予temp_low_pulse1
temp_low_pulse0=TL1-TL0; //将TL1减去TL0的值(即红外信号的低电平)赋予temp_low_pulse0
temp_high_pulse1=TH0; //将TH0值(即红外信号的高电平值)赋予temp_high_pulse1
temp_high_pulse0=TL0; //将TL0值(即红外信号的高电平值)赋予temp_high_pulse0
write_enable=1;
TH0=0x00; //TH0清零
TL0=0x00; //TL0清零
TH1=0x00; //TH1清零
TL1=0x00; //TL1清零
TR0=1; //启动定时器0
TR1=1; //启动定时器1
led8=!led8;
count=count+4;
EX1=1; //开外部中断1
}
本人编写了一个红外接收的程序,红外接收管接收端接单片机中断1,接收的红外波形以后,开启T0,T1定时器,对红外波形的高低电平及时,其中中断下降沿开启T1计时,电平升高后开启T0计时,T1-T0的时间就是红外波形的低电平时间,我利用AT24C16芯片保存定时时间,根据写的程序,在两次中断间隙时间过短了,没有足够的时间写进存储芯片,怎么解决啊?
顶
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |