导航:首页 > 操作系统 > 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单片机中断程序编写相关的资料

热点内容
地谷轮压缩机与艾默生 浏览:261
太力真空压缩袋好吗 浏览:911
中老年程序员写代码 浏览:14
加密货币白皮书怎么写 浏览:472
中文版的pdf 浏览:105
else在python的用法 浏览:547
if命令cmd 浏览:685
花书pdf 浏览:272
wps合成pdf文件 浏览:807
python教程pdf免费下载 浏览:959
程序员需求表 浏览:642
为什么安卓不能用qq登录 浏览:692
公开密钥加密哪年 浏览:831
程序员向 浏览:471
鼠标指针压缩包下载 浏览:764
登录认证失败请检查账号服务器地址 浏览:739
解压游戏覆盖方式 浏览:535
遗传算法的变异算子怎么实现 浏览:687
spring如何添加app 浏览:664
python循环import 浏览:552