单片机中断代码

单片机中断代码,第1张

void init0(void)interrupt 0 using 1 //init0方式1,采用中断方式

{

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//中断服务函数

{ ==

==要服务链弊友的程序

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12526256.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存