单片机原理与应用及C51编程技术 教学课件 ppt 作者 高玉芹 第6章_AT89系列单片机的内部资源及应用
2019/5/26,1,单片机原理与应用电子课件,第 6 章,AT89系列单片机的内部资源及应用,2019/5/26,2,本章主要内容: 6.1 AT89系列单片机的并行口及其应用 6.2 AT89系列单片机的中断系统 6.3 AT89系列单片机定时/计数器 6 .4 AT89系列单片机的串行接口及串行通信,§6.1 AT89系列单片机的并行口及其应用,1.指示灯,例6-1 用51单片机的并行口P1口驱动8个发光二极管,使8个发光 二极管从上到下轮流点亮。,输出低电平0时,LED有电流通过发光, 输出高电平1时,无电流通过不发光,汇编语言如下: MOV A,#0FEH AGAIN:MOV P1,A LCALL DELAY RL A SJMP AGAIN DELAY:MOV R7,#20 MOV R6,#250 DJNZ R6,$ DJNZ R7,DELAY,C51语言程序如下: (1)查表法 #include Void main( ) unsigned char LED8=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f unsigned char i; unsigned int j; while1 for(i=0;i8;i+) P1=LEDi; for(j=0;j30000;j+); /延时 if (i= =8) i=0xff; /为了下一次循环LED灯从上到下点亮,置i为ffH ,(2)移位法 #include #include void main( ) unsigned char i,a=0xfe; unsigned int j; while1 P1=a; a=_crol_(a,1); /调用循环左移函数_crol_,变量a循环左移1位 for(j=0;j30000;j+); /延时 ,2.蜂鸣器,当P1.0引脚输出0时,三极管导通,在蜂鸣器两端 加工作电压,蜂鸣器发出声音,当P1.0引脚输出 1时,三极管截止,蜂鸣器不发声。,例6-2 编程使蜂鸣器响铃10次,每次响铃发出250Hz的声音, 持续时间为0.5s,静音1s,单片机使用12MHz的晶振。 实现该功能的程序如下:,MOV R3,#10 AA1:CLR P1.0 MOV R1,#250 AA2:LCALL DELAY2 ;调用延时2ms子程序 CPL P1.0 DJNZ R1,AA2 ;250Hz响铃0.5s SETB P1.0 MOV R2,#2 AA3:MOV R1,#250 AA4:LCALL DELAY2 DJNZ R1,AA4 DJNZ R2,AA3 ;静音1s DJNZ R3,AA1 RET,DELAY2:MOV R7,#10 ;延时2ms程序 AA5:MOV R6,#100 DJNZ R6,$ ;双周期指令,执行一次耗时 DJNZ R7,AA5 RET,6.2 AT89系列单片机的中断系统,6.2.1 中断的基本概念,二级中断嵌套过程,中断响应过程,6.2.2 AT89系列单片机的中断系统,89S52中断系统结构,1.89X52中断源,89X52有6个中断源,分别为两个外部事情中断请求源,和4个内部中断源分别为:定时计数器T0、T1、T2计数溢出事情 中断请求和串行口发送或者接受完一个字节数据中断请求源。 89S51有5个中断源,没有T2计数溢出中断。,(1)外部中断源,外中断0和外中断1的中断标志位和它们的触发方式控制位在 特殊功能寄存器定时器控制寄存器(TCON)中的低4位.,定时器控制寄存器TCON,IT0=0,外部中断0触发方式选择为电平触发方式。 IT0=1,外部中断0触发方式选择为边沿触发方式。,IT0 外部中断0触发方式控制位。,IT0=0,外部中断0触发方式选择为电平触发方式。 IT0=1,外部中断0触发方式选择为边沿触发方式。,IE0是外中断0的中断请求标志位 。 当外部中断源(P3.2)引脚上有有效的中断请求信号,则置位IE0, 向CPU请求中断,当CPU响应该中断时由硬件清“0”IE0。,IT1 外部中断1触发方式选择位。 IT1=0,外中断1为电平触发方式, IT1=1,外中断1为边沿触发方式。,IE1 外中断1的中断请求标志位。 IE1=1,外中断1向CPU请求中断,CPU响应中断请求后, 由硬件清“0”IE1位。,(2)内部中断源,TF0 定时计数器T0计数溢出中断标志位。 T0允许计数后,从计数初值开始加1计数,当计数计满后 (计数器所有位均为“1”),再加1,则计数溢出,此时由硬件 自动置“1”TF0,向CPU请求中断,一直保持到CPU响应该中断时 才由内部硬件清“0”。,TF1 定时计数器T1计数溢出中断标志位。 T1允许计数后,从计数初值开始加1计数,当计数溢出时, 硬件自动置“1”TF1,向CPU请求中断,一直到CPU响应中断时 由硬件清“0”。,89X52内部中断源定时计数器T2。 定时计数器T2中断:定时计数T2的计数溢出标志位TF2为“1”, 或者T2的外部中断标志位EXF2为“1”,作为有效的中断请求, 向CPU请求中断。CPU响应中断时不能自动清0,必须由软件清0。 串行口中断 串行口的接受中断标志RI(SCON.0)和发送中断标志TI(SCON.1) 逻辑或以后作为内部的一个中断源。当串行口发送缓冲器发送完 一个字符数据后,由硬件自动把发送中断标志位TI置“1”, 向CPU请求中断,需要注意的是,CPU响应中断后,发送中断标志 位TI不会自动清“0”,必须由用户在中断处理程序中用软件清“0”,2.中断控制,中断允许寄存器IE,EA AT89S系列单片机的CPU中断允许控制位。,EX0 外中断0的中断允许位。,EX1 外中断1的中断允许位。,ET1 定时器T1的中断允许位。,ES 串行口中断允许位。,ET2 定时器T2的中断允许位。,1 中断允许;0,中断屏蔽。,中断优先级寄存器IP,PX0 外部中断0的中断优先级控制位。 PT0 定时计数器T0中断优先级控制位。 PX1 外部中断1的中断优先级控制位。 PT1 定时计数器T1中断优先级控制位。 PS 串行口中断优先级控制位。 PT2 定时计数器T2中断优先级控制位。,中断源 中断优先级 外中断0 最高,定时器T0中断 外中断1 定时器T1中断 串行口中断 定时器T2中断 最低,在同一级别的中断源请求源中,中断优先顺序为:,中断源 入口地址 外部中断0 0003H 定时器T0 000BH 外部中断1 0013H 定时器T1 001BH 串行口中断 0023H 定时器T2 002BH,6.2.3 外部事件中断及应用,1.外部事件中断源的初始化,1)设置外部事件中断请求信号的触发方式。 如果外部中断触发方式采用电平触发方式,IT0或者IT1位清0, 如果用边沿触发方式,IT0或者IT1位置“1” 。 2)开放CPU中断允许位:SETB EA。 3)设置外部事件中断允许控制位:SETB EX0 或者SETB EX1。 4)设置中断源中断优先级。,2.外部中断应用举例,例6-3 如图6-9所示,P1.0P1.7为输出线,外接指示灯L0L7, 采用外部中断0电平触发方式改变指示灯L0L7的显示状态。 正常显示时,灯L0L7自上而下逐一点亮,当有外部中断请求时, 灯L0L7全部点亮并闪烁显示10次。闪烁完成后,继续从暂停的 位置接着逐个点亮灯的操作。,主程序: ORG 0000H LJMP MAIN ORG 0003H LJMP INT0 ORG 0030H MAIN:MOV SP,#70H ;设置堆栈区 CLR IT0 ;电平触发方式 SETB EA ;开放CPU中断允许 SETB EX0 ;设置外中断0中断允许 CLR PX0 MOV A,#0FEH DISPLAY:MOV P1,A ACALL DELAY ;延时 RL A AJMP DISPLAY,DELAY:MOV R7,#200 ;延时子程序 DEL0: MOV R6,#100 DJNZ R6,$ DJNZ R7,DEL0 RET 中断服务程序: ORG 3000H INT0:PUSH ACC ;保护现场 PUSH PSW CLR P3.0 ; MOV R5,#10 REPEAT:MOV A,#00H ;全部点亮 MOV P1,A ACALL DELAY MOV A,#0FFH ;全部熄灭 MOV P1,A ACALL DELAY DJNZ R5,REPEAT ;闪烁10次 POP PSW POP ACC RETI END,C51程序: #include #include void delay ( ); sbit P3_0=P30; unsigned char a; main ( ) a=0xfe; IT0=0; /外中断0电平触发方式 EA=1; EX0=1; PX0=0; while (1) P1=a; a=_crol_(a,1); /左移,产生下一个显示控制码 delay ( ); ; ,void delay( ) unsigned int b; b=20000; while (b0) b-; extern0 ( ) interrupt 0 using 1 /中断函数 unsigned char i; P3_0=0; for (i=10;i0;i-) /闪烁10次 P1=0x00; delay( ); P1=0xff; delay( ); ,例6-4 外部中断源的扩展。,如图6-10中,共有6个外部中断源,分别为0号、1号、2号、 3号、4号、5号中断源,中断请求采用电平触发方式,0号中断源 的中断优先级别最高,单片机优先响应,单片机接受到0号中断源中断请求时,8个LED灯闪烁显示10次,1号、2号、3号、4号、5号中断源为低级中断源,当有其中一个发出中断请求信号时, 则触发外部中断的中断服务程序中,通过查询P1.0P1.4的状态,判定是哪一个中断请求,然后执行响应的中断服务程序, 查询的顺序,决定这几个中断源中断优先级,先查询的优先级别高,后查询的优先级别低,本例中低优先级中断源的中断优先循序为5号、4号、3号、2号、1号。,中断请求,然后在,主程序: ORG 0000H LJMP MAIN ORG 0003H ;外中断0中断入口地址 LJMP PINT0 ORG 0013H ;外中断1中断入口地址 LJMP PINT1 ORG 0030H MAIN:CLR IT0 ;设置外中断0为电平触发方式 CLR IT1 ;设置外中断1为电平触发方式 MOV IE,#85H ;设置CPU中断允许,外中断0、外中断1中断允许 MOV IP,#01H ;设置外中断0为高级,外中断1为低级 LOOP: LJMP LOOP,的中断服务程序: PINT0:PUSH ACC PUSH PSW SETB RS1 ;把工作寄存器区切换到2区,中断处理程序中使用2区R0R7 MOV R1,#10 ;闪烁显示10次 FLASH: CLR A MOV P1,A ;P1口灯全亮 ACALL DELAY CPL A MOV P1,A ;P1口灯全熄灭 ACALL DELAY DJNZ R1,FLASH POP PSW POP ACC RETI,的中断服务程序: PINT1:CLR EA ;关中断 PUSH ACC PUSH PSW ;保护现场 SETB EA ;开中断 JNB P1.4 PINT1_5 JNB P1.3 PINT1_4 J