单片基础原理教程 8_第1页
单片基础原理教程 8_第2页
单片基础原理教程 8_第3页
单片基础原理教程 8_第4页
单片基础原理教程 8_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章

定时/计数器与中断目录CONTENTS01单片机中断系统中断机制原理、中断优先级与触发逻辑04看门狗防护机制看门狗工作原理、系统防死机应用03定时/计数器配置与编程初值计算、初始化流程与定时精准实现02定时/计数器基础内部结构、控制寄存器与工作模式05进阶功能与宏定义开发C语言宏定义、音阶频率与音频计数06工程实践与本章总结PWM项目实训、核心重难点梳理复盘学习目标01原理体系认知理解51单片机中断系统、定时/计数器的底层运行逻辑,明晰看门狗的功能作用与应用场景,建立单片机精准时序控制的知识框架。02核心功能精通熟练掌握中断优先级配置、定时器初始化、工作模式切换的编程方法,掌握C语言宏定义简化程序开发的实操技巧。03精准技术落地掌握定时初值、音阶频率的计算方法,能够利用定时器中断,独立输出占空比可调、精度稳定的PWM控制信号。04综合项目应用可以独立完成二进制计数、呼吸灯调光、直流电机调速、电子音响等综合实训任务,具备时序类项目的仿真设计与问题调试能力。

51单片机有5个中断源,2个中断优先级中断响应顺序(同级下):

INT0→T0→INT1→T1→串口高优先级可打断低优先级,同优先级或低优先级不能打断4.1单片机的中断系统中断相关寄存器1.中断允许寄存器IE中断允许寄存器IE各位的含义EA总中断;EX0/EX1外部中断;ET0/ET1定时器中断;ES串口中断;EX的英文全称为external(外部),所以EX0表示外部中断0中断相关寄存器2.中断优先级寄存器IP可位寻址,相应位置1表示高优先级,相应位置0表示低优先级。中断优先级寄存器IP各位的含义PS:串口中断。PT1:定时/计数器T1中断。PX1:外部中断1。PT0:定时/计数器T0中断。PX0:外部中断0。中断相关寄存器3.中断控制寄存器TCON中断控制寄存器TCON各位的含义IT0/IT1:触发类型控制位,IT0/IT1=1表示下降沿触发,IT0/IT1=0表示低电平触发,可以由软件来设置或清除。IE0/IE1:中断请求标志位,当检测到INT0/INT1引脚上出现外部中断信号的下降沿时,由硬件将相应的中断请求标志位置1,申请中断。进入中断服务程序后,中断请求标志位被硬件自动清除。TR0/TR1:T0/T1运行控制位,由软件置1或清0,置1时T0/T1开始工作,清0时T0/T1停止工作。TF0/TF1:T0/T1中断请求标志位,当T0/T1计数溢出归零时,由内部硬件将相应的中断请求标志位置1;当CPU响应中断并进入中断服务程序后,由硬件自动将TF0/TF1清0中断相关寄存器4.串口控制寄存器SCON串口控制寄存器SCON各位的含义TI(TransmitInterrupt,发送中断):串口发送中断标志位,当CPU将数据写入发送缓冲器SBUF时,启动发送。每发送完一帧串行数据后,由中断系统的硬件自动将TI置1,但CPU响应中断时,并不清除TI,必须在中断服务程序中用指令将TI清0。RI(ReceiveInterrupt,接收中断):串口接收中断标志位,在允许串口接收时,每接收完一帧数据后,中断系统的硬件自动将RI置1。5.中断服务程序中断服务程序被定义为函数返回值函数名([参数])[模式][再入]interruptm[usingn]interrupt0:外部中断0interrupt1:定时器T0interrupt2:外部中断1interrupt3:定时器T1interrupt4:串口中断5.中断服务程序usingn:定义函数使用的工作寄存器组,n的取值范围为0~3中断服务程序目标代码的影响如下。(1)当调用中断服务程序时,特殊功能寄存器中的累加器A、寄存器B、DPH、DPL和PSW在需要时入栈。(2)如果不使用工作寄存器组切换,中断服务程序所需的所有工作寄存器都入栈。(3)退出中断服务程序前,所有工作寄存器都出栈。(4)中断服务程序由““RETI”指令终止。EA=1;EX0=1;IT0=1;外部中断0为例,开放中断源。外部中断0的中断服务程序结构voidint_0()interrupt0{}功能:数码管循环显示0~9,按键触发外部中断0,数码管闪烁10次后继续循环关键代码:EA=1;EX0=1;IT0=1;

voidint0()interrupt0{//闪烁处理

}外部中断示例(mcu401.c)外部中断仿真电路51单片机:T0、T1(16位)52单片机:增加T2

两种模式:定时模式:对内部时钟计数计数模式:对T0(P3.4)/T1(P3.5)外部脉冲计数最小延时单位:1个机器周期(12MHz→1μs)4.2定时/计数器概述TCON:TF1、TR1、TF0、TR0(高4位)TMOD:GATE、C/T、M1、M0(高4位给T1,低4位给T0)GATE=0:仅TRx启动;GATE=1:TRx+外部引脚高电平启动C/T=0:定时;C/T=1:计数定时/计数器控制寄存器4.2.1定时/计数器的控制4.2.1定时/计数器的控制定时/计数器工作方式寄存器TMODTMOD用于确定定时/计数器的工作方式及功能,其中高4位用于控制T1,低4位用于控制T0。4.2.2定时/计数器工作方式(T0为例)根据定时时间和工作方式,通过公式:定时时长T=(2n-X)×12/fosc(fosc

为晶振频率),计算出计数初值X,把X转换成二进制数,把高8位送给TH0/TH1,低8位送给TL0/TL1,就可以启动定时/计数器开始定时了。公式:T=(2^n-X)×12/f_osc

例:f_osc=12MHz,T=10ms,方式1(n=16)

X=65536-10000=55536=0xD8F0TH0=0xD8,TL0=0xF0(1)方式0当TMOD中的M1M0=00时,定时/计数器T0工作在方式0,构成13位定时/计数器,它由TH0的8位和TL0的低5位组成。定时/计数器T0方式0(2)方式1当TMOD中M1M0=01时,定时/计数器T0工作在方式1,构成16位定时/计数器,它由TH0的8位和TL0的8位组成。定时/计数器T0方式1(3)方式2当TMOD中的M1M0=10时,定时/计数器T0工作在方式2,即8位自动重载方式,它由TL0构成8位计数器,TH0仅用来存储时间常数,即计数初值。定时/计数器T0方式2(4)方式3当TMOD中的M1M0=11时,定时/计数器T0工作在方式3。需要说明的是,只有T0具有方式3,T1不具有。T0工作在方式3时,TH0和TL0分成2个独立的8位计数器。定时/计数器T0方式3(1)选择工作方式,设置M1M0的值。(2)确定门控位GATE,若GATE为0,则只要软件设定好参数即可;若GATE为1,则需要软件设定参数,且定时/计数器的中断引脚需要为高电平。(3)确定定时/计数器的工作模式,若C/T为0,则为定时模式;若C/T为1,则为计数模式。(4)给TMOD送字节数进行设置。(5)给定时/计数器送计数初值,若计数初值为8位以上,则对TH0/TH1和TL0/TL1分别置数。(6)开启定时/计数器中断,即将ET0或ET1置1。(7)开启总中断,即将EA置1。(8)启动定时/计数器,即将TR1或TR0置1。定时/计数器初始化设置功能:P1.0输出50Hz方波(周期20ms,每10ms取反)关键代码:TMOD=0x01;//T0方式1TH0=0xD8;TL0=0xF0;EA=1;ET0=1;TR0=1;voidT0_int()interrupt1{P1_0=~P1_0;TH0=0xD8;TL0=0xF0;}定时器示例(mcu402.c)作用:防止程序跑飞或死循环工作过程:程序正常运行中定期“喂狗”若超时未喂狗,WDT复位单片机STC单片机内部集成WDT,通过WDT_CONTR寄存器控制4.2.3*看门狗(WDT)原理字节地址:E1H,不能位寻址位功能:

EN_WDT:启动看门狗

CLR_WDT:喂狗(清0计数器)

IDLE_WDT:空闲模式是否计数

WDT_PS[2:0]:分频系数(决定溢出时间)STC看门狗寄存器WDT_CONTR符号地址B7B6B5B4B3B2B1B0WDT_CONTRCIHWDT_FLAG-EN_WDTCLR_WDTIDL_WDTWDT_PS[2:0]看门狗定时器寄存器WDT_CONTR公式:溢出时间=(N×分频系数×32768)/晶振频率

N=12(12T模式)或N=6(6T模式)

例:f_osc=12MHz,12T,分频系数=5(对应WDT_PS=101)

溢出时间≈2s看门狗溢出时间计算WDT_PS[2:0]预分频数看门狗溢出时间(ms)000265.500141310108262.101116524.2100321048.5101642097.11101284194.31112568388.6不同分频系数时看门狗定时器的溢出时间看门狗示例(mcu403.c)sfrWDT_CONTR=0xe1;sbitled1=P1^0;voiddelayms(uintxms){uinti,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}voidmain(){WDT_CONTR=0x35;led1=0;delayms(500);led1=1;while(1){

delayms(1000);WDT_CONTR=0x35;}若删除喂狗语句,LED会不断闪烁(单片机反复复位)看门狗初始化与喂狗函数封装voidwdt_init(void){WDT_CONTR=0x35;//配置并启动WDT}voidwdt_feed(void){WDT_CONTR=0x35;//喂狗}任务1——二进制计数器代码结构:

TMOD=0x05;//计数模式,方式1TR0=1;ET0=1;EA=1;voidtime0()interrupt1{pp++;}while(1){led=pp;}4.3工程实践功能:按键S2按下次数计数,P1口LED显示8位二进制硬件:按键接P3.4(T0外部计数输入),P1接LED工作方式:T0方式1(16位计数器)任务2——PWM信号发生(固定占空比)关键代码:

TH0=0xFF;TL0=0xA4;//100μsif(pp<=2)pwm=1;elsepwm=0;if(pp==10)pp=0;

输出引脚:P1.0,可用示波器观察目标:产生1kHz、占空比1/5的PWM信号方法:定时器T0方式1,每100μs中断一次,中断10次为1个周期扩展——按键调节占空比(mcu406.c)增加按键S2(加)、S3(减)调节占空比数码管显示当前占空比档位(0~10)按键扫描去抖,边界处理(0~10)数码管驱动:P0口数据,P2.6段选,P2.7位选核心逻辑:num值决定占空比,动态调节扩展——按键调节占空比

数码管驱动显示电路任务3——呼吸灯原理呼吸效果:LED亮度缓慢变化(由暗变亮,再由亮变暗)本质:PWM占空比动态渐变参数:

·PWM周期:10ms·每200ms调节一次占空比

·占空比范围:1~9标志位:Direct_flag控制渐亮/渐灭方向呼吸灯代码结构(mcu407.c)

voidTime0(void)interrupt1{TH0=0xFC;TL0=0x66;//1ms定时

PWM_wanttime++;

Breath_wanttime++;if(PWM_wanttime>10)PWM_wanttime=0;if(PWM_wanttime<PWM_value)LED=1;elseLED=0;if(Breath_wanttime>200){

Breath_wanttime=0;//调整PWM_value,改变呼吸方向

}}观察并验证呼吸灯的现象,可以更改各参数设置,以实现不同形式的呼吸灯,总结参数与现象之间的规律,组队讨论试一试吧!任务4——直流电机PWM调速(定时器版)之前:软件延时PWM(精度低)现在:定时器T0产生20ms周期PWM信号占空比可调(0~20档)驱动:L293D,EN1接P1.2作为PWM输入宏定义:#definemoto_pwmP1_2调速函数:通过比较pwm_val和push_val控制EN1宏定义(#define)详解格式:#define宏名字符串作用:预处理阶段进行简单替换示例:#definemoto_pwmP1_2注意事项:行末不加分号不进行语法检查不替换引号内的宏名可嵌套定义习惯用大写字母宏定义与typedef的区别对比项#definetypedef处理阶段预处理编译本质字符串替换定义新类型示例#defineu8unsignedchartypedefun

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论