{
EA=0 // 关掉总中断,防止外部中断再来
TH0=0xff
TL0=0x14 // 给定时器赋值,以便计数
int_times++// int_times自增
if(head_ok==0) /带册槐/ 检测同步头
{
if(tmr_times>0x31&tmr_times<0x37) // 如果头的时间在这个范围内,那么就标志头检测到了
{
head_ok=1// 检测到头了
int_times=0 // 清零定时器
tmr_times=0
lanth=0 // 清零lanth
}
else
{
wrong() // 超蠢友出0X31 - 0X37则表示检测的头不对
}
}
else // 如果之前已经检测到头了,那么就检测数据位
{
one_zero() //姿亩 调用这个函数不知道要干啥
code_data=code_data>>1 // 检测到的数据位组合起来,原来的数据往低位移动
if(lanth==1)
{
code_data|=0x80
}
else
{
code_data&=0x7f
}
tmr_times=0
lanth=0
if(int_times==8) //如果数值为8,则接收到的是地址码
{
address=code_data
}
else if(int_times==16) // 地址反码
{
if(code_data+address!=0xff) wrong() // 判断是否是地址反码
}
else if(int_times==24)
{
code_data1=code_data
}
else if(int_times==32)
{
int_times=0
head_ok=0
if(code_data1==~code_data)
{
flagf=1
shuju=code_data1
beep=0
}
else
{
flagf=0
}
}
}
EA=1
}
楼上说的是,要放在具体程序中才知道,貌似红外或者无线数据解码,不过解码方式比较笨重,呵呵
#include <reg52.h>sbit k1=P3^3
sbit led0=P0^0
unsigned char detetim = 0
/********************************************************/
void main(void)
{
P0=0xff
k_old=0x00
IT1=1 //低电平触发
EA=1
EX1=1
while(1)
{
if (detetim == 0)
{
led1 = 0
}
else
{
led1 = 1
}
}
}
/********************************************************
* INT1中断函数 *
********************************************************/
void counter(void) interrupt 2
{
EX1=0
if (detetim == 0)
{
detetim=1
}
else
{
detetim=0
}
EX1=1
}
#include <reg51.h>void init(void)//声明中断初始化
{EA=1//中断总开关
EX0=1//开中断0开关。中断1为,EX1=1;
IT1=1//采用边沿触发,下降沿有效。IT1=0为低电平触发中断。
}
main()
{ init()调用中断初始化函数
==
===主程卜昌序;棚槐
}
void in_0(void)interrupt 0//中断服务函数
{ ==
==要服务链弊友的程序
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)