第6章(1):定时计数器与串行通讯口

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第六章定时计数器与串行通讯口(上)-MCS51定时器的控制应用与内部硬件串行通讯电路的工作方式1定时/计数器电路K1K2可预置初值计数器中断请求功能选择启动控制内部时钟脉冲(定时)外部输入脉冲(计数)溢出信号计数脉冲计数初值1.1定时/计数器的工作原理定时/计数器中的核心部件为可预置初值计数器。预置初值后开始计数,直至计数值归0或产生溢出,可申请中断。计数器有加1计数或减1计数两种形式。MCS51单片机的计数器采用加1计数。要注意定时器的容量即位数例:设TIMER为8位加1计数器。按要求选择功能和初值。1.要求检测到100个脉冲,发中断请求,通知CPU。选计数功能,计数初值为156。2.要求定时每隔100s时间,发一次中断请求。设内部时钟周期1s选定时功能,计数初值为156。1.2定时/计数器的应用1.计数功能:生产线上产品计数。每个产品通过得到一个脉冲信号,计数器记录脉冲个数,当计数值与设定值相等,启动包装机器。检测转速。电机转动一圈发出一个脉冲,计数器记录一秒时间内脉冲个数,显示转速。2.定时功能:用于实时控制,定时采样、定时启动、计算两事件的间隔时间等。1.38051定时计数器8051有2个可独立控制的16位定时器计数器:T0、T1。分别由8位寄存器TH0、TL0和TH1、TL1组成。8051定时计数器为加1计数器,加到溢出时变为0,同时触发中断。定时计数器有4种工作方式,编程选择一种。定时计数器驱动时钟有两种来源:外部时钟和晶振的12分频。特殊功能寄存器TCON,TMOD用于控制定时计数器。频率不能高于晶振频率的1/24,且高低电平的宽度必须大于一个机器周期1.48051定时计数器编程①功能选择(定时/计数)②工作方式的选择即计数位数的选择(8/13/16位)③启动方式选择(内部软件启动/外部硬件启动)④启动控制(启动/停止)⑤设置计数初值(自动重装/软件重装)⑥根据需要给中断允许寄存器IE送中断控制字,以开放或禁止相应的中断,并设定中断优先级GATEC/TM1M0GATEC/TM1M01.5MCS-51定时计数器控制寄存器定时器模式寄存器1.TMOD定时器方式寄存器(89H)1)功能选择位C/T:=0,定时功能,计数内部机器周期脉冲;=1,计数功能,计数引脚T0(T1)输入的负脉冲。2)方式选择位M1、M0:4种工作方式:13/16/8位3)门控方式选择位GATE:=0,非门控方式(内部启动):TRx=1,启动定时器工作;TRx=0,停止定时器工作。=1,门控方式(外部启动):TRx=1且引脚INTx=1才启动。T1T0M1M0方式功能描述00013位01116位1028位自动重装113T0为两个8位2.TCON定时器控制寄存器1)启动控制位TR0、TR1=0,停止定时器工作=1,启动定时器工作例:启动T0:SETBTR02)溢出中断标志位TF0、TF1定时器溢出使TFx=1,引起中断请求,CPU响应Tx中断后,自动清0TFx。也禁止中断,用软件检测TFx,但必须软件清0。WAIT:JBCTF0,NEXT;检测T0是否溢出SJMPWAIT;未溢出,继续检测NEXT:…;溢出,TF0清0,处理溢出位地址8F8E8D8C8B8A8988位符号TF1TR1TF0TR0IE1IT1IE0IT0TCON(88H)1.6定时器工作方式方式0(13位计数方式)13位定时/计数器。THx8位和TLx低5位组成13位加1计数器,计数值范围:1~8192(213)计数外部脉冲个数:1~8192(213)定时时间(设晶振为12MHz):1s~8.19ms当为定时工作方式时,定时时间的计算公式:(213-计数初值)×晶振周期×12(213-计数初值)×机器周期方式1(16位计数方式)16位定时/计数器。THx8位和TLx8位组成16位加1计数器,计数值范围:1~65536(216)计数外部脉冲个数:1~65536(216)定时时间(设晶振为12MHz):1s~65536×T=65.54ms(8位)D15D0当为定时工作方式时,定时时间的计算公式:(216-计数初值)×晶振周期×12(216-计数初值)×机器周期方式2(自动重装入8位计数方式)自动恢复初值8位定时/计数器。TLx为8位加1计数器,THx为8位初值暂存器。用于需要重复定时和计数的场合。最大计数值:256(28)最大定时时间(设晶振为12MHz):256s(8位)Timer1的溢出时钟还可用作串口时钟定时方式时,定时时间的计算公式:(28-计数初值)×晶振周期×12方式3(8位计数器)T0分成2个8位定时器:TL0定时/计数器和TH0定时器TL0占用T0控制位:C/T,TR0,GATE,TF0;TH0占用T1控制位:TR1,TF1;此时Timer1始终打开,且不能用中断。T1不能使用方式3工作TH0的时钟只能来源于晶振的12分频1.7MCS-51定时器的应用定时器初始化编程:使用定时器工作之前,先编程相应的控制寄存器,确定好定时器的工作方式。初始化编程格式:MOVTMOD,#方式字;选择方式MOVTHx,#XH;装入Tx时间常数MOVTLx,#XL(SETBEA);开Tx中断(SETBETx)SETBTRx;启动Tx定时器1.按实际需要选择定时/计数功能2.按时间或计数长度选择方式3.计算时间常数定时器的溢出处理编程举例:1)查询方式:先查询定时器溢出标志,再进行溢出处理。…;定时器初始化WAIT:JBCTFx,PT;检测溢出标志SJMPWAITPT:MOVTHx,#XH;重装时间常数MOVTLx,#XL…;溢出处理SJMPWAIT2)中断方式:初始化后执行其他任务,中断服务程序处理溢出。ORG0000HLJMPMAINORG000BH(001BH);Tx中断入口LJMPPTSMAIN:…;初始化后执行其他程序PTS:…;溢出中断服务程序MOVTHx,#XH;重装时间常数MOVTLx,#XLRETI例:由P1.0输出方波信号,周期为2ms,设fosc=12MHz。2ms解:每隔1ms改变一次P1.0的输出状态。用T0非门控方式1定时。计算时间常数:X=216-t/T=216-1000/1=FC18H(1)查询方式:START:MOVTMOD,#01HMOVTL0,#18HMOVTH0,#0FCHSETBTR0LOOP:JBCTF0,PTF0SJMPLOOPPTF0:CPLP1.0MOVTL0,#18HMOVTH0,#0FCHSJMPLOOP(2)中断方式程序ORG0000HAJMPMAINORG000BHAJMPPT0INTORG0100HMAIN:MOVSP,#60HMOVTMOD,#01HMOVTL0,#18HMOVTH0,#0FCHSETBEASETBET0SETBTR0HERE:SJMPHEREPT0INT:CPLP1.0MOVTL0,#18HMOVTH0,#0FCHRETI例:P1.7驱动LED亮1秒灭1秒地闪烁,设时钟频率为6MHz。思路:长定时方法:增加一个软件计数器或一个硬件计数器。若采用硬件方式,可用T0定时每隔200mS溢出,再用T1计数T0的定时跳变信号P1.0的负跳变次数,计满5个跳变为1秒。START:MOVTMOD,#61HMOVTL1,#0FBHMOVTH1,#0FBHCLRP1.0SETBTR1RELOAD:MOVTL0,#0B0HMOVTH0,#3CHSETBTR0WAIT:JBCTF0,TOVSJMPWAITTOV:CPLP1.0JNBTF1,RELOADCLRTF1CPLP1.7SJMPRELOAD例:利用GATE门控方式测量正脉冲宽度。解:从INT1(P3.3)引脚输入被检测信号,记录正脉冲的时间包含的机器脉冲个数。1)设晶振12MHz,正脉宽小于65.5ms等待查询INT1,正脉冲过后,读出TH1TL1。START:MOVTMOD,#90HMOVTL1,#0HMOVTH1,#0HWAIT1:JBP3.3,WAIT1SETBTR1WAIT2:JNBP3.3,WAIT2NOPWAIT3:JBP3.3,WAIT3CLRTR1MOVR0,TL1MOVR1,TH1…TR1=1T1启动TR1=0T1停止INT1正脉冲宽度=(R1×28+R0)×12TOSC2)设晶振12MHz,正脉冲宽度大于65.5ms,可用中断记录TH1、TL1溢出中断次数。主程序:START:MOVTMOD,#90H;初始化AGAIN:MOVTL1,#0HMOVTH1,#0HMOVR2,#0;R2清零WAIT1:JBP3.3,WAIT1;等待上一正脉冲结束SETBTR1;开定时器1SETBET1;开T1中断SETBEA;开总中断WAIT2:JNBP3.3,WAIT2;等待正脉冲到来WAIT3:JBP3.3,WAIT3;等待正脉冲结束CLRTR1;关闭T1MOVIE,#00;关闭中断MOVR0,TL1;读出T1MOVR1,TH1SJMPAGAIN;测量下一脉冲脉冲宽度=(R2×216+R1×28+R0)×机器周期TR1=1T1启动TR1=0T1停止INT1中断服务程序:PRIC:INCR2RETI

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功