您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第六章__AT89系列单片机的内部资源及应用
2019/12/181单片机原理与应用电子课件第6章AT89系列单片机的内部资源及应用2019/12/182本章主要内容:6.1AT89系列单片机的并行口及其应用6.2AT89系列单片机的中断系统6.3AT89系列单片机定时/计数器6.4AT89系列单片机的串行接口及串行通信§6.1AT89系列单片机的并行口及其应用1.指示灯例6-1用51单片机的并行口P1口驱动8个发光二极管,使8个发光二极管从上到下轮流点亮。输出低电平0时,LED有电流通过发光,输出高电平1时,无电流通过不发光汇编语言如下:MOVA,#0FEHAGAIN:MOVP1,ALCALLDELAYRLASJMPAGAINDELAY:MOVR7,#20MOVR6,#250DJNZR6,$DJNZR7,DELAYC51语言程序如下:(1)查表法#includereg52.hVoidmain(){unsignedcharLED[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}unsignedchari;unsignedintj;while{1}{for(i=0;i8;i++){P1=LED[i];for(j=0;j30000;j++);//延时if(i==8)i=0xff;//为了下一次循环LED灯从上到下点亮,置i为ffH}}}(2)移位法#includereg52.h#includeintrins.cvoidmain(){unsignedchari,a=0xfe;unsignedintj;while{1}{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的晶振。实现该功能的程序如下:MOVR3,#10AA1:CLRP1.0MOVR1,#250AA2:LCALLDELAY2;调用延时2ms子程序CPLP1.0DJNZR1,AA2;250Hz响铃0.5sSETBP1.0MOVR2,#2AA3:MOVR1,#250AA4:LCALLDELAY2DJNZR1,AA4DJNZR2,AA3;静音1sDJNZR3,AA1RETs2DELAY2:MOVR7,#10;延时2ms程序AA5:MOVR6,#100DJNZR6,$;双周期指令,执行一次耗时DJNZR7,AA5RET6.2AT89系列单片机的中断系统6.2.1中断的基本概念二级中断嵌套过程中断响应过程6.2.2AT89系列单片机的中断系统89S52中断系统结构1.89X52中断源INT0INT189X52有6个中断源,分别为两个外部事情中断请求源和4个内部中断源分别为:定时计数器T0、T1、T2计数溢出事情中断请求和串行口发送或者接受完一个字节数据中断请求源。89S51有5个中断源,没有T2计数溢出中断。(1)外部中断源外中断0和外中断1的中断标志位和它们的触发方式控制位在特殊功能寄存器定时器控制寄存器(TCON)中的低4位.D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0定时器控制寄存器TCONIT0=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.中断控制中断允许寄存器IED7D6D5D4D3D2D1D0EA——ET2ESET1EX1ET0EX0EAAT89S系列单片机的CPU中断允许控制位。EX0外中断0的中断允许位。EX1外中断1的中断允许位。ET1定时器T1的中断允许位。ES串行口中断允许位。ET2定时器T2的中断允许位。1中断允许;0,中断屏蔽。中断优先级寄存器IPD7D6D5D4D3D2D1D0————PT2PSPT1PX1PT0PX0PX0外部中断0的中断优先级控制位。PT0定时计数器T0中断优先级控制位。PX1外部中断1的中断优先级控制位。PT1定时计数器T1中断优先级控制位。PS串行口中断优先级控制位。PT2定时计数器T2中断优先级控制位。中断源中断优先级外中断0最高定时器T0中断外中断1定时器T1中断串行口中断定时器T2中断最低在同一级别的中断源请求源中,中断优先顺序为:中断源入口地址外部中断00003H定时器T0000BH外部中断10013H定时器T1001BH串行口中断0023H定时器T2002BH6.2.3外部事件中断及应用1.外部事件中断源的初始化1)设置外部事件中断请求信号的触发方式。如果外部中断触发方式采用电平触发方式,IT0或者IT1位清0,如果用边沿触发方式,IT0或者IT1位置“1”。2)开放CPU中断允许位:SETBEA。3)设置外部事件中断允许控制位:SETBEX0或者SETBEX1。4)设置中断源中断优先级。2.外部中断应用举例例6-3如图6-9所示,P1.0~P1.7为输出线,外接指示灯L0~L7,采用外部中断0电平触发方式改变指示灯L0~L7的显示状态。正常显示时,灯L0~L7自上而下逐一点亮,当有外部中断请求时,灯L0~L7全部点亮并闪烁显示10次。闪烁完成后,继续从暂停的位置接着逐个点亮灯的操作。主程序:ORG0000HLJMPMAINORG0003HLJMPINT0ORG0030HMAIN:MOVSP,#70H;设置堆栈区CLRIT0;电平触发方式SETBEA;开放CPU中断允许SETBEX0;设置外中断0中断允许CLRPX0MOVA,#0FEHDISPLAY:MOVP1,AACALLDELAY;延时RLAAJMPDISPLAYDELAY:MOVR7,#200;延时子程序DEL0:MOVR6,#100DJNZR6,$DJNZR7,DEL0RET中断服务程序:ORG3000HINT0:PUSHACC;保护现场PUSHPSWCLRP3.0;MOVR5,#10REPEAT:MOVA,#00H;全部点亮MOVP1,AACALLDELAYMOVA,#0FFH;全部熄灭MOVP1,AACALLDELAYDJNZR5,REPEAT;闪烁10次POPPSWPOPACCRETIEND#includereg52.h#includeintrins.hvoiddelay();sbitP3_0=P3^0;unsignedchara;main(){a=0xfe;IT0=0;//外中断0电平触发方式EA=1;EX0=1;PX0=0;while(1){P1=a;a=_crol_(a,1);//左移,产生下一个显示控制码delay();};}voiddelay(){unsignedintb;b=20000;while(b0)b--;}extern0()interrupt0using1//中断函数{unsignedchari;P3_0=0;for(i=10;i0;i--)//闪烁10次{P1=0x00;delay();P1=0xff;delay();}}例6-4外部中断源的扩展。INT1INT1如图6-10中,共有6个外部中断源,分别为0号、1号、2号、3号、4号、5号中断源,中断请求采用电平触发方式,0号中断源的中断优先级别最高,单片机优先响应,单片机接受到0号中断源中断请求时,8个LED灯闪烁显示10次,1号、2号、3号、4号、5号中断源为低级中断源,当有其中一个发出中断请求信号时,则触发外部中断的中断服务程序中,通过查询P1.0~P1.4的状态,判定是哪一个中断请求,然后执行响应的中断服务程序,查询的顺序,决定这几个中断源中断优先级,先查询的优先级别高,后查询的优先级别低,本例中低优先级中断源的中断优先循序为5号、4号、3号、2号、1号。中断请求,然后在主程序:ORG0000HLJMPMAINORG0003H;外中断0中断入口地址LJMPPINT0ORG0013H;外中断1中断入口地址LJMPPINT1ORG0030HMAIN:CLRIT0;设置外中断0为电平触发方式CLRIT1;设置外中断1为电平触发方式MOVIE,#85H;设置CPU中断允许,外中断0、外中断1中断允许MOVIP,#01H;设置外中断0为高级,外中断1为低级LOOP:……LJMPLOOPINT0的中断服务程序:PINT0:PUSHACCPUSHPSWSETBRS1;把工作寄存器区切换到2区,中断处理程序中使用2区R0~R7MOVR1,#10;闪烁显示10次FLASH:CLRAMOVP1,A;P1口灯全亮ACALLDELAYCPLAMOVP1,A;P1口灯全熄灭ACALLDELAYDJNZR1,FLASHPOPPSWPOPACCRETIINT1的中断服务程序:PINT1:CLREA;关中断PUSHACCPUSHPSW;保护现场SETBEA;开中断JNBP1.4PINT1_5JNBP1.3PINT1_4JNBP1.2PINT1_3JNBP1.1PINT1_2JNBP1.0PINT1_1RETURN:CLREA;关中断POPPSWPOPACC;恢复现场SETBEA;开中断RETIPINT1_5:……;5号中断服务程序AJMPRETURNPINT1_4:……;4号中断服务程序AJMPRETURNPINT1_3:……;3号中断服务程序AJMPRETURNPINT1_2:……;2号中断服务程序AJMPRETURNPINT1_1:……;1号中断服务程序AJMPRETURNC51程序如下:#includereg52.hvoiddelay();//延时函数声明voidPINT1_5();//5号中断调用的函数声明voidPINT1_4();//4号中断调用的函数声明voidPINT1_3();//3号中断调用的函数声明voidPINT1_2();//2号中断调用的函数声明voidPINT1_1();//1号中断调用的函数声明sbitP1_0=P1^0;sbitP1_1=P1^1;sbitP1_2=P1^2;sbitP1_3=P1^3;sbitP1_4=P1^4;unsignedch
本文标题:第六章__AT89系列单片机的内部资源及应用
链接地址:https://www.777doc.com/doc-2087449 .html