您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 《单片机原理、应用及c51程序设计》第6章 MCS-51单片机内部资源及编程
第6章MCS-51单片机内部资源及编程第6章MCS-51单片机内部资源及编程MCS-51单片机的内部资源主要有并行I/O口、定时器/计数器、串行接口以及中断系统,MCS-51单片机的大部分功能就是通过对这些资源的利用来实现的。下面分别对其介绍,并用汇编语言和C语言分别给出相应例子。6.1并行输入/输出接口6.1.1并行口应用与编程【例6-1】利用单片机的P1口接8个发光二极管,P0口接8个开关,编程实现,当开关动作时,对应的发光二极管亮或灭。只须把P0口的内容读出后,通过P1口输出即可。汇编程序:ORG0100HMOVP0,#0FFHLOOP:MOVA,P0MOVP1,ASJMPLOOP第6章MCS-51单片机内部资源及编程C51语言程序:#includereg51.hvoidmain(void){unsignedchari;P0=0xff;for(;;){i=P0;P1=i;}}第6章MCS-51单片机内部资源及编程6.2定时/计数器接口6.2.1定时/计数器的主要特性1.MCS-51系列中51子系列有两个16位的可编程定时/计数器:定时/计数器T0和定时/计数器T1,52子系列有三个,还有一个定时/计数器T2。2.每个定时/计数器既可以对系统时钟计数实现定时,也可以对外部信号计数实现计数功能,通过编程设定来实现。3.每个定时/计数器都有多种工作方式,其中T0有四种工作方式;T1有三种工作方式,T2有三种工作方式。通过编程可设定工作于某种方式。4.每一个定时/计数器定时计数时间到时产生溢出,使相应的溢出位置位,溢出可通过查询或中断方式处理。第6章MCS-51单片机内部资源及编程6.2.1定时/计数器T0、T1的结构及工作原理TH1TL1TH0TL0TCONTMOD启动启动溢出溢出工作方式工作方式中断请求内部总线TcyT1T0第6章MCS-51单片机内部资源及编程加法计数器在使用时注意两个方面。第一,由于它是加法计数器,每来一个计数脉冲,加法器中的内容加1个单位,当由全1加到全0时计满溢出,因而,如果要计N个单位,则首先应向计数器置初值为X,且有:初值X=最大计数值(满值)M-计数值N在不同的计数方式下,最大计数值(满值)不一样,一般来说,当定时器/计数器工作于R位计数方式时,它的最大计数值(满值)为2的R次幂。第二,当定时/计数器工作于计数方式时,对芯片引脚T0(P3.4)或T1(P3.5)上的输入脉冲计数,计数过程如下:在每一个机器周期的S5P2时刻对T0(P3.4)或T1(P3.5)上信号采样一次,如果上一个机器周期采样到高电平,下一个机器周期采样到低电平,则计数器在下一个机器周期的S3P2时刻加1计数一次。因而需要两个机器周期才能识别一个计数脉冲,所以外部计数脉冲的频率应小于振荡频率的1/24。第6章MCS-51单片机内部资源及编程6.2.2定时/计数器的方式和控制寄存器一.定时/计数器的方式寄存器TMODTMODD7D6D5D4D3D2D1D0(89H)GATEC/TM1M0GATEC/TM1M0←定时器1→←定时器0→其中:M1、M0为工作方式选择位,用于对T0的四种工作方式,T1的三种工作方式进行选择,选择情况如下M1M0工作方式方式说明00013位定时/计数器01116位定时/计数器1028位自动重置定时/计数器113两个8位定时/计数器(只有T0有)第6章MCS-51单片机内部资源及编程C/T:定时或计数方式选择位,当C/T=1时工作于计数方式;当C/T=0时工作于定时方式。GATE:门控位,用于控制定时/计数器的启动是否受外部中断请求信号的影响。二.定时/计数器的控制寄存器TCONTCOND7D6D5D4D3D2D1D0(88H)TF1TR1TF0TR0IE1IT1IE0IT0其中:TF1:定时/计数器T1的溢出标志位,当定时/计数器T1计满时,由硬件使它置位,如中断允许则触发T1中断。进入中断处理后由内部硬件电路自动清除。TR1:定时/计数器T1的启动位,可由软件置位或清零,当TR1=1时启动;TR1=0时停止。第6章MCS-51单片机内部资源及编程TF0:定时/计数器T0的溢出标志位,当定时/计数器T0计满时,由硬件使它置位,如中断允许则触发T0中断。进入中断处理后由内部硬件电路自动清除。TR0:定时/计数器T0的启动位,可由软件置位或清零,当TR0=1时启动;TR0=0时停止。6.2.3定时/计数器的工作方式一.方式0振荡器12TLx(低5位)THx(高8位)TFx与或TxTRxGATEINTxS2S1C/TTcy中断请求第6章MCS-51单片机内部资源及编程方式1是13位的定时/计数方式,因而最大计数值(满值)为2的13次幂,等于8192。如计数值为N,则置入的初值X为:X=8192-N如定时/计数器T0的计数值为1000,则初值为7192,转换成二进制数为1110000011000B,则TH0=11100000B,TL0=00011000B。二.方式1方式1的结构与方式0结构相同,只是把13位变成16位,16位的加法计数器被全部用上。由于是16位的定时/计数方式,因而最大计数值(满值)为2的16次幂,等于65536。如计数值为N,则置入的初值X为:X=65536-N如定时/计数器T0的计数值为1000,则初值为65536-1000=64536,转换成二进制数为1111110000011000B,则TH0=11111100B,TL0=00011000B。第6章MCS-51单片机内部资源及编程三.方式2振荡器12TLx(8位)THx(8位)TFx与或TxTRxGATEINTxS2S1C/TTcy中断请求重装初值8方式2下,16位的计数器只用了8位来计数,用的是TL0(或TL1)的8位来进行计数,而TH0(或TH1)用于保存初值。当TL0(或TL1)计满时则溢出,一方面使TF0(或TF1)置位,另一方面溢出信号又会触发图6.5上的三态门,使三态门导通,TH0(或TH1)的值就自动装入TL0(或TL1)。第6章MCS-51单片机内部资源及编程由于是8位的定时/计数方式,因而最大计数值(满值)为2的8次幂,等于256。如计数值为N,则置入的初值X为:X=256-N如定时/计数器T0的计数值为100,则初值为256-100=156,转换成二进制数为10011100B,则TH0=TL0=10011100B。注意:由于方式2计满后,溢出信号会触发三态门自动地把TH0(或TH1)的值装入TL0(或TL1)中,因而如果要重新实现N个单位的计数,不用重新置入初值。四.方式3方式3只有定时/计数器T0才有,当M1M0两位为11时,定时/计数器T0工作于方式3,方式3的结构如下图.方式3下,定时/计数器T0被分为两个部分TL0和TH0,其中,TL0可作为定时/计数器使用,占用T0的全部控制位:GATE、C/T、TR0和TF0;而TH0固定只能作定时器使用,对机器周期进行计数,这时它占用定时/计数器T1的TR1位、TF1位和T1的中断资源。第6章MCS-51单片机内部资源及编程振荡器12TL0(8位)TF0与或T0TR0GATEINT0S2S1C/TTcy中断请求TH0(8位)TF1S2中断请求T1TR1第6章MCS-51单片机内部资源及编程6.2.4定时/计数器的初始化编程及应用一.定时/计数器的编程MCS-51单片机定时/计数器初始化过程如下:1.根据要求选择方式,确定方式控制字,写入方式控制寄存器TMOD。2.根据要求计算定时/计数器的计数值,再由计数值求得初值,写入初值寄存器。3.根据需要开放定时/计数器中断(后面须编写中断服务程序)。4.设置定时/计数器控制寄存器TCON的值,启动定时/计数器开始工作。5.等待定时/计数时间到,到则执行中断服务程序;如用查询处理则编写查询程序判断溢出标志,溢出标志等于1,则进行相应处理。第6章MCS-51单片机内部资源及编程二.定时/计数器的应用通常利用定时/计数器来产生周期性的波形。利用定时/计数器产生周期性波形的基本思想是:利用定时/计数器产生周期性的定时,定时时间到则对输出端进行相应的处理。如产生周期性的方波只须定时时间到对输出端取反一次即可。【例6-2】设系统时钟频率为12MHZ,用定时/计数器T0编程实现从P1.0输出周期为500μs的方波。分析:从P1.0输出周期为500μs的方波,只须P1.0每250μs取反一次则可。当系统时钟为12MHZ,定时/计数器T0工作于方式2时,最大的定时时间为256μs,满足250μs的定时要求,方式控制字应设定为00000010B(02H)。系统时钟为12MHZ,定时250μs,计数值N为250,初值X=256-250=6,则TH0=TL0=06H。第6章MCS-51单片机内部资源及编程汇编程序:ORG0000HLJMPMAINORG000BH;中断处理程序CPLP1.0RETIORG0100H;主程序MAIN:MOVTMOD,#02HMOVTH0,#06HMOVTL0,#06HSETBEASETBET0SETBTR0SJMP$ENDC语言程序:#includereg51.h//包含特殊功能寄存器库sbitP1_0=P1^0;voidmain(){TMOD=0x02;TH0=0x06;TL0=0x06;EA=1;ET0=1;TR0=1;while(1);}voidtime0_int(void)interrupt1//中断服务程序{P1_0=!P1_0;}(1)采用中断处理方式的程序:第6章MCS-51单片机内部资源及编程(2)采用查询方式处理的程序汇编程序:ORG0000HLJMPMAINORG0100H;主程序MAIN:MOVTMOD,#02HMOVTH0,#06HMOVTL0,#06HSETBTR0LOOP:JBCTF0,NEXT;查询计数溢出SJMPLOOPNEXT:CPLP1.0SJMPLOOPSJMP$ENDC语言程序:#includereg51.h//包含特殊功能寄存器库sbitP1_0=P1^0;voidmain(){chari;TMOD=0x02;TH0=0x06;TL0=0x06;TR0=1;for(;;){if(TF0){TF0=0;P1_0=!P1_0;}//查询计数溢出}}第6章MCS-51单片机内部资源及编程如果定时时间大于65536μs,这时用一个定时/计数器直接处理不能实现,这时可用两个定时/计数器共同处理或一个定时/计数器配合软件计数方式处理。【例6-3】设系统时钟频率为12MHZ,编程实现从P1.1输出周期为1s的方波。根据例6-2的处理过程,这时应产生500ms的周期性的定时,定时到则对P1.1取反就可实现。由于定时时间较长,一个定时/计数器不能直接实现,可用定时/计数器T0产生周期性为10ms的定时,然后用一个寄存器R2对10ms计数50次或用定时/计数器T1对10ms计数50次实现。系统时钟为12MHZ,定时/计数器T0定时10ms,计数值N为10000,只能选方式1,方式控制字为00000001B(01H),初值X:X=65536-10000=55536=1101100011110000B则TH0=11011000B=D8H,TL0=11110000B=F0H。第6章MCS-51单片机内部资源及编程(1)用寄存器R2作计数器软件计数,中断处理方式。汇编程序:ORG0000HLJMPMAINORG000BHLJMPINTT0ORG0100HMAIN:MOVTMOD,#01HMOVTH0,#0D8HMOVTL0,#0F0HMOVR2,#00HSETBEASETBET0SETBTR0SJMP$INTT0:MOVTH0,#0D8HMOVTL0,#0F0HINCR2CJNER2,#32H,NEXTCPLP1.1MOVR2,#00HNEXT:RETIEND第6章MCS-51单片机内部资源及编程C语言程序:#includereg51.h//包含特殊功能寄存器库sbitP
本文标题:《单片机原理、应用及c51程序设计》第6章 MCS-51单片机内部资源及编程
链接地址:https://www.777doc.com/doc-3794760 .html