项目5应用外部中断生产线工件计数显示装置设计控制要求:每当生产线上有白色工件经过时,显示值加1•交叉开关的使用,交叉开关的分配•了解中断的概念,外部中断的使用本设计系统的知识点硬件系统的设计1.工件的检测2.工件计数的显示3.外部中断的使用确定方案工件的检测工件计数的显示系统的原理图CPU正在执行原程序,突然被意外事情打断,转去执行新程序。CPU执行新程序结束后,又回到原程序中继续执行。这样的过程就叫中断什么是中断?中断系统-----------中断的概念包括:中断源及中断请求:中断请求是要求CPU中止当前工作,进行中断处理的信号,中断源是产生中断请求的设备。中断响应:CPU暂时中止当前工作,转去调用中断服务程序的过程。中断服务:对中断事件的处理过程。中断返回:事件处理完毕,返回断点的过程。主程序某指令中断请求中断服务程序中断调用RETI断点中断返回主程序子程序调用子程序子程序调用RET断点子程序返回中断的作用:1.用中断方式可以提高CPU工作效率,解决快速CPU与慢速外设之间的矛盾;2.中断能使几个外设并行工作;3.中断可以根据现场随时变化的各种参数、信息,做出实时处理。4.故障处理,对突发事故,做出紧急处理。1、外部中断源C8051F005支持的外部中断有6个,外部中断0()和外部中断1()外,还有外部中断4~7四个外部中断源。2、内部中断源单片机内部,能发出中断请求的电路,就是内部中断源。片内定时器、串行口、片内ADC等都是允许的内部中断源。C8051F允许的中断源及中断入口地址0INT1INT与中断有关的特殊功能寄存器1.中断的允许与禁止在中断源与CPU之间有二级中断允许控制逻辑电路,类似开关,其中第一级为一个总开关,第二级为分开关,由IE、EIE1、EIE2来控制。IE:EA:总中断允许位。该位允许/禁止所有中断。EA=0:禁止所有中断请求。EA=1:开放中断。EAIEGF0ET2ESET1EX1ET0EX0IEGF0:通用标志位。ET2:T2中断允许位。ES:UART中断允许位。ET1:T1中断允许位。EX1:外部中断1中断允许位。ET0:T0中断允许位。EX0:外部中断0中断允许位。若为“1”,允许若为“0”,不允许注:外部中断0、1请求管腿须经交叉开关分配。IE可以位寻址。前面提到的打印机程序中,主程序的初始化处理部分应该有这样几条ORLXBR1,#00000100B;将/INT0连到I/O引脚ORLXBR2,#40H;交叉开关允许SETBEX0;允许外部中断0SETBEA;开放总中断I/O引脚的再分配1.默认情况下,P0.0~P3.7是P0口~P3口对应引脚.2.需要时,可以通过软件将P0.0~P2.7分配给片内其他数字资源如计数器等,作为这些资源的引脚.3.分配方法:通过XBR0~XBR2例如将P0.0分配给片内计数器T0,作为计数输入端,需要:软件设置XBR2.6=1,XBR1.1=1引脚分配示意:(c)交叉开关设为允许后,并为T0分配管腿的状态,XBR1.1=1,XBR2.6=1P0端口I/O单元(a)复位后的状态,XBR1.1=0,XBR2.6=0输出锁存器定时器/计数器T0P0.7K0K1XBR1.1P0端口P0.0XBR2.6P0.7输出锁存器定时器/计数器T0P0.0K1P0端口可编程交叉开关XBR1.1XBR2.6K1P0.0引脚(b)交叉开关设为允许后的状态,XBR1.1=0,XBR2.6=1K0K1P0.7P0.0P0.0引脚K1K0可编程交叉开关P0端口I/O单元P0.0引脚输出锁存器定时器/计数器T0XBR1.1XBR2.6K1P0端口可编程交叉开关P0端口I/O单元ORLXBR2,#01000000B;交叉开关允许ORLXBR1,#00000010B;给T0分配管腿XBR0~XBR2的定义,以XBR1为例D7D6D5D4D3D2D1D0SYSCKET2EXET2EINT1ET1EINT0ET0ECP1OENT0E:=0,不为T0分配管腿;=1,为T0分配管腿例如:XBR0.7=1,为比较器CP0分配引脚XBR0.6=1,为PCA0分配引脚例:MOVXBR0,#00000100B;为UART分配管腿MOVXBR1,#00000010B;为T0分配管腿MOVXBR2,#01000000B;交叉开关允许问题:以上设置只指出了为谁分配管腿,没有说明分配给哪个管腿引脚分配的优先级分配原则:(1)从左至右,P0.0最高,P0.1次之,依此类推(2)从上至下,SDA最高,SCL次之,依此类推(3)打黑点者为可分配管腿MOVXBR0,#00000100B;为UART分配TX,RX管腿MOVXBR1,#00000010B;为T0分配管腿MOVXBR2,#01000000B;交叉开关允许思考:以上程序的管腿分配管腿再分配的具体方法如下:(1)设置特殊功能寄存器XBR0~XBR2,声明要为某个资源分配管腿。(2)置交叉开关允许位XBR2.6,保证交叉开关闭合。(3)按照优先级确定具体管腿。例:某系统要求为外部并行数字设备分配6个输入管腿,9个输出管腿,为定时器T0、T1各分配1个管腿,为外部中断0分配1个管腿,为串行口UART分配2个管腿。写出配置指令,并确定各自的管腿号。9个输出要求采用推挽方式。按照优先级,TX——P0.0;RX——P0.1;T0——P0.2;——P0.3;T1——P0.4;其余管腿都可用来做端口I/O。至于哪个做输入,哪个做输出,可自由选择。例如选择P1.0~P1.5做输入管腿,P2.0~P2.7、P0.7做输出管腿。2.中断的请求标志:中断源通过中断请求标志位向CPU申请中断。每一个中断源都有1个中断标志相对应。发生中断时,相应的中断标志被自动置1。IT0IE0IT1IE1TR0TF0TR1TF1TCONTF1——T1的溢出中断标志硬件置1,硬件清0(也可软件清0)TF0——T0的溢出中断标志。IE1——外部中断1(/INT1)请求标志。外部有中断请求时,硬件使IE1置1,硬件清0。IE0——外部中断0(/INT0)请求标志。IT1——外部中断1(/INT1)触发类型控制位。IT1=0,低电平触发。IT1=1,下降沿触发。IT0——外中断0(/INT0)触发类型控制位,用法同IT1。PRT1IF------------------------IE4IE5IE6IE7IE7:外部中断7中断请求标志IE7=0:P1.7引脚没有检测到下降沿IE7=1:当检测到P1.7引脚下降沿时,该标志由硬件置1IE6:外部中断6中断请求标志IE6=0:P1.6引脚没有检测到下降沿IE6=1:当检测到P1.6引脚下降沿时,该标志由硬件置1IE5:外部中断5中断请求标志IE5=0:P1.5引脚没有检测到下降沿IE5=1:当检测到P1.5引脚下降沿时,该标志由硬件置1IE4:外部中断4中断请求标志IE4=0:P1.4引脚没有检测到下降沿IE4=1:当检测到P1.4引脚下降沿时,该标志由硬件置13.中断入口地址C8051为每一个中断源分配了一个,只要发生中断,而且中断被允许,它会自动跳到该地址处执行程序。因此在该地址处写一跳转指令即可。例:打印机通过外部中断0向CPU申请中断,中断服务程序的名字叫“DAYIN”。写程序如下:ORG0000HAJMPMAINORG0003HAJMPDAYINORG0100HMAIN:……CHULI:……LJMPCHULI;--------------------中断服务程序DAYIN:MOVP1,40HRETIEND0003H被称为的外部中断0入口地址。中断入口地址也称中断向量或中断矢量,是发生中断后程序计数器PC要跳向的地址。见表6.1软件系统设计根据硬件电路图画出程序流程编写代码开始初始化是否按下启动键N是否按下停止键NY结束Y启动测量开中断显示测量值是否满YN报警中断服务程序开始计数器+1结束OGR0000HLJMPMAINORG0003HLJMPTONGJIORG0100HMAIN:MOVWDTCN,#0DEHMOVWDTCN,#0ADHMOVSP,#60HMOVPRT0CF,#0FFHMOVXBR2,#40HMOVXBR1,#04HJBP0.5,$SETBEASETBEX0EAIEGF0ET2ESET1EX1ET0EX0IT0IE0IT1IE1TR0TF0TR1TF1TCONIECLRIT0AI0:JBP0.6,JIXUSJMPJIESHUJIXU:LCALLXIANSHICJNER1,#99,JIXUMOVR1,#00HSJMPAI0TONGJI:INCR1RETIEND例.C8051F005单片机引脚P0.0上连接一个按键开关,要求每按一次按键,P1口连接的8个发光二极管点亮位置左移一次(初态P1.0亮)。分析:令XBR1=04H,将P0.0分配给外部中断0,令XBR2=40H,交叉开关允许。则每按一次按键,向CPU申请中断。在中断服务程序中使P1口连接的二极管左移。其他的中断及应用外部中断1,外部中断4~7特殊功能寄存器寄存器EIE2EXVLD--------EX7EX6EX5EX4EADC0ET3EXVLD:外部时钟源有效(XTLVLD)中断允许位。0:禁止XTLVLD中断1:允许XTLVLD中断D6:保留。必须写入0,读出为0EX7:外部中断7允许位。0:禁止外部中断7。当被禁止时,P1.7为普通I/O管腿。1:允许外部中断7。当被允许时,P1.7自动作为外部中断7中断请求管腿。EX6:外部中断6允许位。0:禁止外部中断6。当被禁止时,P1.6为普通I/O管腿。1:允许外部中断6。当被允许时,P1.6自动作为外部中断6中断请求管腿。EX5:外部中断5允许位0:禁止外部中断5。当被禁止时,P1.5为普通I/O管腿。1:允许外部中断5。当被允许时,P1.5自动作为外部中断5中断请求管腿EX4:外部中断4允许位0:禁止外部中断4。当被禁止时,P1.4为普通I/O管腿。1:允许外部中断4。当被允许时,P1.4自动作为外部中断4中断请求管腿EADC0:ADC0转换结束中断允许位。0:禁止ADC0转换结束中断1:允许ADC0转换结束中断ET3:定时器3中断允许位。0:禁止定时器3中断1:允许定时器3中断注意:EIE2不能位寻址。例、将一个按键接在C8051F005单片机引脚P1.7上,一个发光二极管接在P1.6上。编写程序,要求每按一次按键,P1.6所接发光二极管状态取反。分析:这个任务可以用查询和中断两种方式实现。(1)查询方式:不断检测P1.7上的输入,只要P1.7从1变0,说明键被按下,取反P1.6。(2)中断方式:将按键看做1个外部中断请求设备。每当键被按下,P1.7产生1个下跳沿,向CPU申请1次中断。中断发生后,在中断服务程序中把P1.6发光二极管状态取反。例、编写程序,在主程序中使P0口连接的8个发光二极管点亮位置循环左移。P1.7引脚上的按键每按一次,P2口连接的共阴极数码管显示数字加1,加到10时重新从0开始计数。(内部振荡频率2MHz)分析:应设置XBR2=40H,允许交叉开关,确保信号能输出到P0和P2口的显示器,此外还应设置P0口、P2口为推挽输出主程序完成二极管点亮位置循环左移任务。P1.7作为外部中断7的输入。每按一次按键,CPU发生中断,在中断服务程序中,将P2口连接的共阴极数码管显示数字加1。逻辑运算类指令逻辑操作类指令共有25条,有与、或、异或、求反、左右移位、清0等。一、循环逻辑操作指令循环左移、右移指令:RLARLCARRARRCA注:左移一位相当于乘2;右移一位相当于除2。A7A0CA7A0CA7A0CA7A0C例:原来(A)=34H=00110100B,(C)=1RLA;(A)=01101000B=68H,(C)不变;RRA;(A)=00011010B=1AH,(C)不变;RLCA;(A)=01101001B=69H;(C)=0;RRCA;(A)=00011010B=1AH;(C)=0。3.求反指令(1条)CP