计算机硬件及网络任务三流水灯定时控制课件.pptVIP

  • 27
  • 0
  • 约9.34千字
  • 约 84页
  • 2018-08-06 发布于贵州
  • 举报

计算机硬件及网络任务三流水灯定时控制课件.ppt

计算机硬件及网络任务三流水灯定时控制课件

3.1.3 中断服务函数 C51编译器支持在C语言源程序中直接编写8051单片机的中断服务函数,从而减轻使用汇编语言的繁琐程度,提高了开发效率。 1.中断服务函数的一般形式 void 函数名(void) interrupt m [unsing n] 代表中断号,是一个常量,取值范围是0-31。 C51编译器允许32个中断,从8m+3处产生中断向量 代表中断函数将要选择使用的寄存器组,也是一个常量,取值范围是0~3。 程序存储器ROM 0000H:复位后,程序的入口地址(PC=0000H) 0023H:串行口中断入口(中断号m=4) 0003H:外部中断0入口(中断号m=0) 000BH:定时器/计数器0中断入口(中断号m=1) 0013H:外部中断1入口(中断号m=2) 001BH:定时器1 /计数器中断入口(中断号m=3)    002BH MCS-51单片机中断入口 8字节 关于USING的说明 using不仅可以用于中断服务函数的定义中,也可以用于普通的内部函数,但不能用于外部函数。 就中断服务函数而言 如果不使用using,则在进入中断服务函数的时候,中断函数中所用到的全部工作寄存器都要入栈,函数返回之前所有的寄存器内容出栈; 如果使用using,则在进入中断服务函数的时候,只将当前工作寄存器组入栈,用using指定的工作寄存器组的内容不变也不入栈,函数返回之前将被保护的工作寄存器组出栈。 提 示 (1)使用using可缩减中断服务函数的入栈操作时间,因此可以使中断得到更及时的处理;但同时,使用using要十分小心,要保证寄存器组切换在所控制的区域内,否则会导致错误。 (2)中断函数的编写包括两部分:中断源的初始化函数和中断服务函数。概括地说,中断源初始化函数就是对中断源所需要的一些变量进行设置,其形式与其他普通函数一样——一般在主函数里实现;而中断服务函数就是规定系统在发生相应的中断的时候要执行哪些操作。 (3)中断函数的调用过程与一般函数调用相似,但一般函数是程序中事先安排好的;而何时调用中断函数事先无法确定,调用中断函数的过程是由硬件自动完成的。 中断函数的类型及参数都为void类型 中断函数既不能进行参数传递,也没有返回值,因此,中断函数的形式参数列表和函数类型标识符名均为void。 定时器0的定义方式: void intr_time0(void) interrupt 1 { } 2.中断函数的编写 (1)中断的初始化 所谓初始化,是对将要用到的MCS-51系列单片机内部部件或扩展芯片进行初始工作状态设定。针对中断来说,就是对IE,IP进行初始化编程,实现如下要求: 1)CPU开中断与关中断。 2)某个中断源中断请求的允许和禁止(屏蔽)。 3)各中断源优先级别的设定。 4)外部中断请求的触发方式。 (2)中断服务函数 中断服务函数就是规定系统在发生相应的中断的时候要执行哪些操作。 实例 【实例3-4】P1.3外接一个扬声器,当与P3.3(外部中断1输入引脚)变为低电平时,扬声器发声。 实例3-4 #includereg51.h sbit p13=P1^3; void main() { IT0=0; EA=1;EX1=1; p13=1; while(1); } void isr_int1() interrupt 2 {int i; p13=~p13; for(i=1000;i0;i--); } 实例3-5:电平触发与跳变触发的比较 #includereg51.h #includestdio.h void serial_init(); void isr_int0(); main() { serial_init(); IT0=0;EA=1;EX0=1; while(1); } void isr_int0() interrupt 0 { printf(External interrupt 0 responded\n); } void serial_init() { SCON=0X52; MOD=(TMOD0X0F)|0X20; TH1=221; TR1=1; } 电平触发的输出情况 跳变触发输出情况 main() { serial_init(); IT0=1; EA=1;EX0=1; while(1); } 案例4:蒸汽锅炉参数越限报警控制 液位上、下限SL1、SL2开关取自“色带指示报警仪”,分别接P1.3,P1.2。 蒸汽压力下限SP开关接P1.1。 炉堂温度上限ST开关接P1.0。 P1.7~P1.4输出接发光二极管,与4个参数对应,越限时则相应的LED点亮。 #includereg51.h

文档评论(0)

1亿VIP精品文档

相关文档