导航:首页 > 操作系统 > 128单片机中断程序编写

128单片机中断程序编写

发布时间:2024-04-25 18:19:53

单片机c语言写两个中断,两个中断怎么写

//任务6 显示按键按下的次数(中断方式)
//任务6 显示按键按下的次数(中断方式)
#include <reg51.h> //1 包含特殊功能寄存器定义头文件reg51.h
#define ledport P2 //2 宏定义:ledport代表P2(发光二极管接P2口)
#define uchar unsigned char //3 宏定义:uchar代表unsigned char
#define ulong unsigned int //3 宏定义:ulong代表unsigned long
#define unsigned int j;
uchar m=0xef; //5 定雀和义变量m:m用来保存显示控制数据,初值为0xfe
ulong i;
sfr p1=0x90;
sbit led1=P1^0; //led引脚定义
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;

void fun1_int() interrupt 0 using 1//5 定义中断服务函数:中断号为0,用第1组寄存器组
{
while(1) //while循环(永远为真,死循环)
{ //循环睁凳体开始
led1=~led1; //发光二级管的显示状态取反
led2=~led2;
led3=~led3;
led4=~led4;

for(j=0;j<12500;j++); //for循环,循环体为空,耗时 //延时500ms
}
} //循环体结束

void fun2_int() interrupt 1 using 2//5 定义中断服务函数:中断号为0,用第1组寄存器组
{

while(1) //7 while循环,条件表达式为1,永远为真,死循环
{ //8 while循环体开始
P1=m; //9 P1口输出当前显示控制数据
m=(m<<1)|(m>>7); //10 显示数据m向左循环移1位,为下次显示输出作准备
for(i=0;i<60000;i++); //11 for循环实现1s延时,循环体为空语句
} //12 while循环体结束
}

//8 中断服务函数结束
void main(void) //9 main函数
{
EA=1;
EX0=0; //12 开外部中断0
EX1=0;
IT1=1;
IT0=1; //11 设置外部中断0的触发方式:下降沿触发。见代码说明

while(1)
; //14 死循环,循环体为空顷早盯语句
} //15 main函数结束
//任务1 控制1只发光二极管闪烁显示上面的注释可以省略不看,

这个需要设置不同的寄存器,注意依稀俺这里就可以了的,然后查一下数据手册。

㈡ 单片机中断初始化程序 编程

void INT_init()//初始化
{
IT0 = 0;//外部中断0低电平触发
IT1 = 1;//外部中断1低电平触发
PX0 = 1;//外部中断0分配高优先级
PX1=0;
IE = 0x85;//使能全局中断,外部中断0,外部中断1
}
void EX_INT0() interrupt 0//外部中断0
{
//添加自己的功能代码
IE0=0;//清零中断标志位
}

void EX_INT1() interrupt 2//外部中断1
{
//添加自己的功能代码
IE1=0;
}

㈢ 单片机中断程序

结构很规矩,这个程序。

首先单片机上电复位,运行死循环前面的程序(,你这里就是init_timer(); // 应该叫初始化定时器,才合适,让定时器按照你需要的定时长度工作,或叫产生中断 )
接下来单片机主程序就是一直在死循环了。我们的主要任务一般在这里处理。
中断,就是在处理一些特殊任务,比如按键,或定时处理的程序,或外部一个不知道什么时间发生的任务,或通信任务等等。你在主循环的时候,无论在什么时候,中断请求来了(可以理解为需要处理比较紧急任务,优先处理的任务),就会暂停主循环,进入对应中断服务程序。运行完,在回主循环的暂停地方,继续执行死循环的任务。
定时器中断,就是每过一定时间,运行一下中断服务程序。常用来计时和产生脉冲信号。

初始化定时器,就是给定时器的寄存器,设置工作模式,时钟源,溢出的计数值。设置好了,定时器就能根据每个时钟源的频率,进行计数,直至溢出,然后产生一个中断请求。如果不饿能自动加载计数初值的定时器,在中断处理函数(服务函数)必须手动加载初值。

㈣ 单片机中断代码

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;

}

楼上说的是,要放在具体程序中才知道,貌似红外或者无线数据解码,不过解码方式比较笨重,呵呵

阅读全文

与128单片机中断程序编写相关的资料

热点内容
java视屏 浏览:932
电脑中如何给程序加密 浏览:238
java排序容器 浏览:942
职称证书在哪个app下载 浏览:362
四九算法算男女 浏览:659
javawindows8 浏览:496
2021世界程序员节 浏览:484
php翼支付 浏览:882
盈通服务器ip地址 浏览:789
3des算法的c语言实现 浏览:873
网上怎样购买服务器地址 浏览:813
新氧app都在哪个城市 浏览:731
十二大加密货币图片 浏览:315
数据库日志自动压缩 浏览:929
手机表格文档用哪个app 浏览:77
找人开发app的公司怎么样 浏览:652
android蓝牙发送数据 浏览:428
范文澜中国通史pdf 浏览:755
php常用的设计模式 浏览:889
安卓手机怎么一个一个的截图 浏览:980