版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网络空间安全学院网络安全基础技术应用第四章中断系统目录CONTENT4.1.单片机中断系统概述4.2.中断执行过程4.3.外部中断实践练习4.1.1.中断的概念中断:当CPU正在处理某件事的时候外界发生了紧急事件请求(中断源),要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种功能的部件称为中断系统。向CPU发出中断请求的信号源称为中断源。表4.1-1列出了传统8051、STC8H、STC32G的中断源。从表中我们可以看到,STC8H和STC32G因为外设功能丰富,所以中断源也更多。4.1.1.中断的概念中断源传统8051STC8H3K64S2STC8H8K64USTC32G8K系列外部中断0(INT0)支持下降沿和边沿中断√√√√定时器0(Timer0)√√√√外部中断1(INT1)√√√√定时器1(Timer1)√√√√串口1(UART1)√√√√模数转换(ADC)
√√√低压检测(LVD)
√√√捕获中断(CCP/PWM)
√√√串口2(UART2)
√√√串行外设接口中断(SPI)
√√√外部中断2(INT2)支持下降沿中断
√√√外部中断3(INT3)支持下降沿中断
√√√定时器2(Timer)
√√√外部中断4(INT4)
√√√串口3中断(UART3)
√√串口4中断(UART4)
√√定时器3中断(Timer3)
√√√定时器4中断(Timer4)
√√√I2C总线中断
√√√USB中断
√表4.1-1中断源列表4.1.1.中断的概念与中断有关的概念还有:中断过程、中断优先级、中断嵌套等。中断过程:从中断源发出请求到中断被响应,再到中断返回,这个过程被称为中断过程,对应图4.1-1中断请求、中断执行、中断返回。中断优先级:单片机的中断系统一般允许多个中断源,当几个中断源同时向CPU请求中断,并要求为它服务的时候,就存在优先响应的问题。传统8051单片机设置优先级寄存器后,有两个中断优先级,即高优先级和低优先级,可以实现两级中断嵌套。中断优先级的规则是:高优先级的中断请求可以打断低优先级的中断,反之,低优先级的中断请求不可以打断高优先级的中断。当两个相同优先级的中断同时产生时,将由查询次序来决定系统先响应哪个中断。中断嵌套:当CPU正在处理一个中断源请求的时候,也就是在执行相应的中断服务程序,发生了另外一个优先级比它还高的中断源请求。如果CPU能够暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程称为中断嵌套。4.1.2.中断嵌套中断嵌套,俗称中断里的中断,传统8051单片机有两个中断优先级,即高优先级和低优先级,STC8、STC32系列有四个中断优先级,称4级嵌套,我们以图4.1-1说明4级嵌套中断响应过程。图中CPU先响应了最低优先级中断,如果该中断执行过程中还有高一级中断发出请求,那么CPU将暂停当前中断执行过程,去执行高一级中断请求,最多可以嵌套4次。图4.1-1中断响应过程和嵌套4.1.2.中断嵌套CPU在执行主程序的过程中,如果一个中断源发起了中断请求,那么CPU响应后,就将当前的操作数都压入堆栈(保护现场),跳转到中断服务程序(表中的中断入口地址),如果此时还有比它更高级别的中断源发出请求,那么CPU就将进入到新的中断服务程序,以此类推,对于STC8、STC32来说最多可以发生4次这样的嵌套。当高一级的中断执行完毕,就会返回到级别低的中断,直到所有的中断都执行完毕,继续执行主程序。好比这样的场景,班级里有小组长、学习委员、生活委员、安全员,假设他们的嵌套优先级依次是0、1、2、3,数字越大,优先级越高。现在同学们都在自习,此时小组长发出通知,相继又有学习委员、生活委员、安全员发出通知,那么最先执行的是安全员的通知,然后依次执行生活委员、学习委员、小组长的通知,最后回到正常自习流程。以上所述归纳为下面两条基本规则:1.低优先级中断可被高优先级中断所中断,反之不能;2.任何一种中断(不管是高级还是低级),一旦得到响应,不会再被它的同级中断所中断。4.2.1.中断寄存器单片机的中断系统包含了很多特殊功能寄存器,单片机要开启某个中断,必须先进行相应的设置,比如中断使能、中断优先级设置、中断标志位的清除等。1.中断使能寄存器:中断首先要被使能,CPU才去响应它。单片机的中断源一部分来自于单片机芯片内部功能模块如定时器模块,一部分来自于IO管脚,单片机首先要管理的是中断的开启。中断被使能后,CPU才去响应中断。下面各个寄存器位的值为“1”时,中断允许。我们以IE和IE2举例说明:(1)IE:中断使能寄存器(可位寻址)寄存器名称地址bit7bit6bit5bit4bit3bit2bit1bit0IEA8HEAELVDEADCESET1EX1ET0EX04.2.1.中断寄存器EA:总中断允许,即各中断源首先受EA控制,其次才受各中断源自己的中断允许控制位控制。0:CPU屏蔽所有的中断,即所有中断都不响应。1:CPU开放中断。ELVD:低压检测中断允许位,对应LVD中断源。EADC:模数转换中断允许位,对应ADC中断源。ES:串行口1中断允许位,对应UART1中断源。ET1:定时/计数器T1的溢出中断允许位。对应Timer1中断源。EX1:外部中断1中断允许位,对应INT1中断源。ET0:定时/计数器T0的溢出中断允许位,对应Timer0中断源。EX0:外部中断T0的溢出中断允许位,对应INT0中断源。4.2.1.中断寄存器(2)IE2:中断使能寄存器2(不可位寻址)寄存器名称地址bit7bit6bit5bit4bit3bit2bit1bit0IE2AFHEUSBET4ET3ES4ES3ET2ESPIES2EUSB:USB中断允许位。ET4:定时/计时器T4的溢出中断允许位,对应Timer4中断源。ET3:定时/计时器T3的溢出中断允许位,对应Timer3中断源。ES4:串行口4中断允许位,对应UART4中断源。ES3:串行口3中断允许位,对应UART3中断源。ET2:定时/计时器T2的溢出中断允许位,对应Timer2中断源。ESPI:SPI中断允许位,对应SPI中断源。ES2:串行口2中断允许位,对应UART2中断源。4.2.1.中断寄存器2.中断请求寄存器:单片机的各个中断源发出中断请求,这个“中断请求”是一种什么行为呢?它不是人们生活中的电话铃声,也不是门铃,更不是喊叫,它和中断允许一样,也是寄存器(中断标志位)的值的变化。下表中当值为“1”的时候,表示有中断请求,为“0”的时候表示没有中断请求。CPU在读到该位“1”的时候,响应中断。我们以TCON、AUXINTIF举例说明:(1)TCON:定时器控制寄存器(可位寻址)寄存器名称地址bit7bit6bit5bit4bit3bit2bit1bit0TCON88HTF1TR1TF0TR0IE1IT1IE0IT04.2.1.中断寄存器TF1:定时器1溢出中断标志,当进入到中断服务程序后,该位自动清零。TF0:定时器0溢出中断标志,当进入到中断服务程序后,该位自动清零。IE1:外部中断1中断请求标志,当进入到中断服务程序后,该位自动清零。IE0:外部中断0中断请求标志,当进入到中断服务程序后,该位自动清零。IT1:外部中断0电平触发控制位。IT1=0,上升沿或下降沿均可触发外部中断0;IT1=1,外部中断0下降沿触发方式。IT0:外部中断0源触发控制位,IT0=0,上升沿或下降沿均可触发外部中断0;IT0=1,外部中断0下降沿触发方式。TCON寄存器除了有中断请求标志位外,还有定时器模块启动和外部中断信号选择的控制位:TR1令定时器1启动计时,TR0令定时器0启动计时。4.2.1.中断寄存器(2)AUXINTIF:中断标志辅助寄存器INT4IF:外部中断4中断请求标志,当中断服务程序响应后,该位自动清零。INT3IF:外部中断3中断请求标志,当中断服务程序响应后,该位自动清零。INT2IF:外部中断2中断请求标志,当中断服务程序响应后,该位自动清零。T4IF:定时器4溢出中断标志,当中断服务程序响应后,该位自动清零(此位不可读)。T3IF:定时器3溢出中断标志,当中断服务程序响应后,该位自动清零(此位不可读)。T2IF:定时器2溢出中断标志,当中断服务程序响应后,该位自动清零(此位不可读)。注意:STC8H系列单片机的定时器2~4,中断标志字是不可读的,也就是书写定时器2~4程序
时,不能出现溢出标志的查询语句。寄存器名称地址bit7bit6bit5bit4bit3bit2bit1bit0TCONEFH-INT4IFINT3IFINT2IF-T4IFT3IFT2IF4.2.1.中断寄存器3.中断优先寄存器:STC8、STC32系列是四级嵌套,优先级可在3、2、1、0变化。用户给中断源安排的优先次序在中断优先级控制寄存器里设置。中断优先InterruptPriority,所以其寄存器通常是IP开头。IPH和IP说明如下:寄存器名称地址bit7bit6bit5bit4bit3bit2bit1bit0IPHB7H-PLVDHPADCHPSHPT1HPX1HPT0HPX0HIPB8H-PLVDPADCPSPT1PX1PT0PX0对应的中断源-LVDADCUart1Timer1INT1Timer0INT04.2.1.中断寄存器IPH和IP相同位置的二进制位构成了四级嵌套,以PX0H,PX0为例:PX0H,PX0:外部中断0中断优先级控制位00:INT0中断优先级为0级(最低级)01:INT0中断优先级为1级(较低级)10:INT0中断优先级为2级(较高级)11:INT0中断优先级为3级(最高级)其它中断源的中断优先级设置类似。传统8051单片机没有IPH,只有IP寄存器,因此只能设置0和1两级中断。4.2.2.中断控制过程中断控制过程如图4.2-1所示,图中展示了INT0、Timer0、UART1、ADC四种中断源的中断控制过程。图4.2-1中断控制过程4.2.2.中断控制过程1.INT0:当CPU总中断允许、外部中断0允许后(IE寄存器相应位置“1”,既EX0、EA开关关闭),事先在TCON.0设置好中断触发方式(电平还是边沿)并设置好中断优先级,只要INT0外部管脚有信号,就会发出中断请求。2.Timer0当CPU总中断允许、定时器0允许后(IE寄存器相应位置“1”,既ET0、EA开关关闭),事先设置好定时器的工作模式和定时时间,只要TF0溢出标志位置1,就会发出中断请求。3.UART1当CPU总中断允许、串口中断1允许后(IE寄存器相应位置“1”,既ES、EA开关关闭),事先设置好通信波特率,只要接收标志位RI和发送标志位TI有一个为1,就会发出中断请求。4.2.2.中断控制过程4.ADC当CPU总中断允许、ADC中断允许后(IE寄存器相应位置“1”,既EADC、EA开关关闭),只要ADC转换结束,ADCFlag置1,就会发出中断请求。STC8、STC32等各型号单片机常用中断的触发行为总结在表4.2-1中。中断源触发行为中断请求标志位中断允许控制位中断清除INT0IT0=1时,下降沿触发;IT0=0时,上升沿和下降沿均可触发。IE0EX0/EA当外部中断服务程序被响应后,中断标志位IE0会被硬件自动清零,重新设置为0Timer0定时器0溢出TF0ET0/EA当定时器中断被执行时,定时器的溢出标志位TF0被硬件清零。INT1IT0=1时,下降沿触发;IT0=0时,上升沿和下降沿均可触发。IE1EX1/EA当外部中断服务程序被响应后,中断标志位IE1会被硬件自动清零.Timer1定时器1溢出TF1ET1/EA当定时器中断被执行时,定时器的溢出标志位TF1被硬件清零。UART1发送或接收完成RI/TIES/EARI和TI要由软件清零.ADCA/D转换完成ADC_FLAGEADC/EAADC_FLAG由软件清除,重新设置为0。表4.2-1常用中断的触发行为4.2.2.中断控制过程中断源触发行为中断请求标志位中断允许控制位中断清除LVD电源电压下降到低于LVD检测电压LVDFELVD/EALVDF由软件清除。UART2出口2发送或接收完成RI2/TI2ES2/EARI2和TI2要由软件清零.SPISPI数据传输完成SPIFESPI/EASPIF由软件清除。INT2下降沿触发INT2IFEX2/EA中断标志位被隐藏起来了,对用户不可见。当中断服务程序被响应后,中断请求标志位自动清零.INT3下降沿触发INT3IFEX3/EATimer2定时器2、3、4溢出T2IF、T3IF、T4IFET2/EA、ET3/EA、ET4/EA注意:系统每个时钟对外部中断管脚采样1次,所以为了确保被检测到,输入信号应该至少维持2个时钟。4.2.3.中断服务函数当单片机CPU接收到中断请求后,要去响应中断,执行过程是:CPU停止主函数语句的执行,保存当前状态,形成断点保护,然后自动进入中断函数,执行中断函数中的语句,在中断函数语句执行完毕后返回到之前保护的断点处,继续执行主函数语句。如上所述,单片机执行中断,其实执行的是中断函数里的语句。要让中断系统工作起来,除了设置中断寄存器外,还要书写中断函数。中断函数的格式如下:void中断函数名()interrupt中断编号中断函数的特点:中断函数没有返回值,中断函数的返回值都是void空。中断函数名由用户自定义,函数名后面一定要有括号()表明这是函数。Interrupt是中断函数的关键字,表明这个函数是中断函数。中断编号与中断入口地址对应,中断编号是固定的。中断编号也是优先级查询,编号的数字越小,查询优先级越高,如果没有设置优先级寄存器,中断优先级按照表4.2-2中断编号逐渐降低。4.2.3.中断服务函数表4.2-2列出了STC系列单片机的中断源、中断编号以及推荐的中断函数名。从表中可以看出:不同型号单片机的中断源数量是不一样的,STC8H8K/STC32G12K的中断源多于传统8051单片机,也多于STC15F系列单片机。外部中断2~3、定时器2的优先级默认是0,无法通过优先级设置位进行设置,因此它们的优先级始终是最低的。传统8051单片机/STC15F系列/STC8H8K系列/STC32G12K系列中断编号中断源中断函数举例0外部中断0(INT0)voidInt0_serve()interrupt01定时器0(Timer0)voidTimer0_serve()interrupt12外部中断1(INT1)voidInt1_serve()interrupt23定时器1(Timer1)voidTimer1_serve()interrupt34串口1(UART1)voidUART1_serve()interrupt4表4.2-2STC单片机的中断编号、中断源对应列表4.2.3.中断服务函数STC15F2系列/STC8H8K系列/STC32G12K系列5AD转换(ADC)voidADC_serve()interrupt56低压检测(LVD)voidLVD_serve()interrupt67捕获中断(CCP/PWM)voidPWM_serve()interrupt78串口2(UART2)voidUART2_serve()interrupt89SPI中断voidSPI_serve()interrupt910外部中断2(INT2)voidInt2_serve()interrupt1011外部中断3(INT3)voidInt3_serve()interrupt1112定时器2(Timer2)voidTimer2_serve()interrupt1216外部中断4——INT4voidInt4_serve()interrupt16STC8H8K系列/STC32G12K系列17串口3中断(UART3)voidUART3_serve()interrupt1718串口4中断(UART4)voidUART4_serve()interrupt1819定时器3(Timer3)voidTimer3_serve()interrupt1920定时器4(Timer4)voidTimer4_serve()interrupt2021比较器中断(CMP)voidcmp_serve()interrupt2124I2C总线中断voidI2C_serve()interrupt2425USB中断voidUSB_serve()interrupt2526PWMAvoidPWMA_serve()interrupt2627PWMBvoidPWMB_serve()interrupt27Keil软件只支持到中断号(0~31)的32个中断,超过31的中断编号要查找芯片手册。4.3.外部中断实践练习本章介绍了中断相关概念和中断的工作过程,参考图4.2-1,说说看,单片机要执行一个外部中断过程,要满足哪些控制条件?完成下面的任务。任务1.检测外部中断,led灯显示任务要求:单片机P32、P33连接按键,请利用单片机外部中断功能检测按键状态,要求当按键按下,就让P60、P61连接的led灯亮灭状态取反一次。任务分析:电路图如图4.3-1所示。1.按键连接单片机P32、P33,这两个管脚也是单片机的INT0、INT1管脚。2.按键SW17/SW18释放时,P32/P33管脚高电平;SW17/SW18按下时,P32/P33低电平,理想波形如图4.3-2所示,是中断信号源。3.单片机开启外部中断功能后,管脚上的信号变化向CPU发出中断请求。在程序中书写中断函数,当中断请求成功后,程序自动跳转到中断函数入口,中断语句执行完毕后返回到断点。任务1.检测外部中断,led灯显示图4.3-1按键和LED电路电路图4.3-2按键理想波形任务1.检测外部中断,led灯显示程序书写要点:(1)开启外部中断;(2)书写外部中断函数。中断处理的优点是不占用main函数,由中断源触发CPU自动进入中断函数。任务程序:#include<stc8h.h>//包含此头文件后,不需要再包含"reg51.h"头文件typedefunsignedcharu8;typedefunsignedintu16;typedefunsignedlongu32;/***********端口设置的初始化函数***********************/voidGPIO_PxMxSet(){任务1.检测外部中断,led灯显示P0M1=0x00;P0M0=0x00;//设置为准双向口P1M1=0x00;P1M0=0x00;//设置为准双向口P2M1=0x00;P2M0=0x00;//设置为准双向口P3M1=0x00;P3M0=0x00;//设置为准双向口P4M1=0x00;P4M0=0x00;//设置为准双向口P5M1=0x00;P5M0=0x00;//设置为准双向口P6M1=0x00;P6M0=0x00;//设置为准双向口P7M1=0x00;P7M0=0x00;//设置为准双向口P40=0;}/**********************主函数************************/voidmain(void)任务1.检测外部中断,led灯显示{GPIO_PxMxSet();IE1=0;//外中断1标志位IE0=0;//外中断0标志位EX1=1;//INT1EnableEX0=1;//INT0EnableIT0=1;//INT0下降沿中断IT1=1;//INT1下降沿中断EA=1;//总中断Enablewhile(1)//主程序空,不执行任何语句{}任务1.检测外部中断,led灯显示}/*********************INT0中断函数*************************/voidINT0_int(void)interrupt0//进中断时IE0已经被清除{P60=!P60;}/*********************INT1中断函数*************************/voidINT1_int(void)interrupt2//进中断时IE1已经被清除{P61=!P61;}任务2.检测外部中断,数码管显示任务要求:同任务15,单片机P32、P33连接按键,请利用单片机外部中断功能记录按键次数,按键次数显示在数码管,可使用两个数码管分别显示这两个按键的次数,按键次数最大15次。1.任务分析:电路图如图4.3-1所示。(1)按照任务15的方法,启用中断处理。(2)按照任务14的方法,书写数码管显示代码。(3)两个按键的显示格式如图4.3-3所示,分别在8位数码管的两端,静态显示。(a)
按键SW17的次数显示(b)按键SW18的次数显示图4.3-3
任务15的显示图示任务2.检测外部中断,数码管显示2.任务代码:/******************************************/#include<stc8h.h>//包含此头文件后,里面声明的寄存器不需要再手动输入,避免重复定义#defineMAIN_Fosc24000000L//定义主时钟#defineDIS_BLACK0x10typedefunsignedcharu8;typedefunsignedintu16;typedefunsignedlongu32;/**********************本地常量声明段码共阴数码管显示字形编码*************/u8codetab[]={//0123456789ABCDEF任务2.检测外部中断,数码管显示0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,//black-HJKLNoPUtGQrMy0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e, //0.1.2.3.4.5.6.7.8.9.-10xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};/***************************位码,8位数码管com7~com0独立选中****************/u8codedspcom[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};/*************************本地变量声明***************************************/u8dspbuf[8];//显示缓冲u8display_index;//显示位索引u8INT0_cnt,INT1_cnt;//测试用的计数变量voidDisplayScan(void);//按键扫描函数任务2.检测外部中断,数码管显示/*******************************延时函数****************************************/voiddelay_ms(u8ms);//函数体见任务6/**********************主函数************************/voidmain(void){u8i=0; P6M1=0x00;P6M0=0x00;//设置为准双向口P7M1=0x00;P7M0=0x00;//设置为准双向口 INT0_cnt=0;INT1_cnt=0;IE1=0;//外中断1标志位IE0=0;//外中断0标志位任务2.检测外部中断,数码管显示EX1=1;//INT1EnableEX0=1;//INT0EnableIT0=1;//INT0下降沿中断IT1=1;//INT1下降沿中断EA=1;//允许总中断for(i=0;i<8;i++)dspbuf[i]=DIS_BLACK;//全部消隐,黑屏while(1){ delay_ms(2);//视觉停留 DisplayScan();}}任务2.检测外部中断,数码管显示/*********************INT0中断函数*************************/voidINT0_int(void)interrupt0//进中断时已经清除标志{INT0_cnt++;//中断+1display_index=0;dspbuf[display_index]=INT0_cnt;}/*********************INT1中断函数*************************/voidINT1_int(void)interrupt2//进中断时已经清除标志{INT1_cnt++;//中断+1display_index=7;任务2.检测外部中断,数码管显示dspbuf[display_index]=INT1_cnt;}/**********************显示扫描函数************************/voidDisplayScan(void){ P7=~dspcom[display_index];//位选 P6=~tab[dspbuf[display_index]];//段选
}}任务2.检测外部中断,数码管显示说明:任务16的编译结果文件下载到单片机后,按键每按下一次,数码管显示内容就增加一次。两个按键次数分别显示在数码管左右两侧。任务16的main函数完成数码管刷新功能,中断函数记录中断次数,按键扫描程序实现数码管动态显示过程,显示内容实时更新。任务15、16操作视频见二维码4.3-1二维码4.3-1任务15-16的程序实现谢谢&提问网络空间安全学院网络安全基础技术应用第五章定时器系统目录CONTENT5.1.定时器工作原理5.2.定时器配置5.3.PWM定时器5.1.1.定时器内部结构定时器通过记录单位时间发生的次数完成定时、延时等功能,所以定时器的核心是一个计数寄存器组,记录脉冲发生的次数。以定时器0为例,定时器0自动重装载内部结构及工作原理如图5.1-1所示。图5.1-1定时器0自动重装载内部结构图SYSclk在第二章图2.3-2已经说明。定时器内部结构的核心是计数寄存器TH0、TL0。在这两个寄存器前面,有两个选择开关,分别受到AUXR.7、C/T控制;在这两个计数寄存器下面,有2个重装寄存器RL_TH0、RL_TL0,是TH0和TL0的预装值。定时器的工作过程说明如下。5.1.1.定时器内部结构(1)TH0、TL0:定时器0的计数寄存器,从初值开始往上计数,是向上计数器。当定时器工作在16位模式时,TH0和TL0组合成为一个16位寄存器,TL0是低字节,TH0是高字节;如果定时器工作在8位模式,TL0和TH0是两个独立的8位寄存器。(2)当TR0=1,TH0、TL0开始对输入振荡器信号计数,计满后让TF0=1,向CPU发出中断请求。(3)TH0、TL0溢出后,一方面TF0置1,发出中断请求;另一方面自动重新载入RL_TH0、RL_TL0的值,开始新一轮的计数。(4)RL_TH0、RL_TL0是TH0和TL0的影子寄存器,当用户第一次给TH0、TL0赋值的时候,这个初值就被写入到RL_TH0、RL_TL0,一旦TH0、TL0计满溢出不仅置位TF0,而且会自动将影子寄存器的内容重新载入到TH0、TL0。5.1.1.定时器内部结构(5)定时器可以由软件启动,也可以由硬件启动。当GATE=0时无需外部条件只要TR0=1就可以让定时器计时;当GATE=1时需要INT0管脚为1,此时TR0=1才有效。(6)当C/T=0时,多路开关连接到系统内部系统时钟,是定时器的方式。定时器对内部系统时钟SYSclk周期计数,AUXR.7决定了SYSclk是否分频,如果AUXR.7=0,那么12个SYSclk定时器才计数一次,如果AUXR.7=1,那么1个SYSclk计数一次。(7)当C/T=1时,多路开关连接到芯片外部的T0管脚,是计数器的方式,不计算时间,只记录脉冲发生次数,当计数达到规定的值就溢出,发出中断请求。(8)当T0CLKO=1时,定时器0在P3.5管脚输出脉冲波形,为外围电路提供时钟信号源。5.1.2.定时器的工作模式不同的单片机型号提供的定时器数量是不一样的。传统8051单片机只有定时器0和1,且只有定时器1可做串口通信的波特率发生器。现代单片机定时器数量大大增加,STC8、STC32系列内置5个16位定时器。定时器的核心是计数寄存器,计数寄存器到底怎么工作,决定了定时器的工作模式。按照计数寄存器的位数,分为8位定时器、16位定时器;按照计数器初值是否能自动重装,分为自动重装载和不可重装两种。表5.1-1列出了STC单片机各定时器的工作模式。从列表5.1-1可知,定时器0和定时器1有四种工作模式,定时器2~4只有一种工作模式。下面分别介绍这四种工作模式。定时器x(Tx)定时器0(T0)定时器1(T1)定时器2~4(T2、T3、T4)模式016位自动重装载16位自动重装载模式模式116位不可重装模式28位自动重装模式3不可屏蔽中断的16位自动装载无效表5.1-1STC系列单片机定时器的工作模式5.1.2.定时器的工作模式1.模式0——16位自动重装:图5.1-2是定时器0的16位自动重装内部结构图,定时器的两个计数器THx、TLx都参与计数,当计数溢出后,单片机自动把影子寄存器的初始值赋值给它们,重新从初值开始计数。图5.1-2定时器的16位自动重装载模式5.1.2.定时器的工作模式2.模式1——16位不可重装:图5.1-3是定时器0的16位不可重装结构图,定时器的两个计数器THx、TLx都参与计数,当计数溢出后,THx和TLx向高位进位产生TF0信号,自身清零。因为没有自动重装初值,所以TH0、TL0从0开始重新计数,为了与上次定时时间一致,程序要对THx、TLx再次赋值。16位不可重装的工作过程如图5.1-3所示。图5.1-3定时器0的16位不可重装载模式5.1.2.定时器的工作模式3.模式2——8位自动重装:图5.1-4是定时器0的8位自动重装结构图,定时器只有TLx参与计数,当TLx计数溢出后,单片机自动把THx中的值装进TLx,从初值开始加1计数。图5.1-4定时器0的8位自动重装载模式4.模式3——不可屏蔽中断的16位自动装载:内部结构同模式0的图5.1-2完全一致,但是该模式中断处理特殊,只要中断开启,中断请求将不可屏蔽,既无法禁止该中断,此功能可作为系统节拍器或系统监控使用。任务1.理解定时器工作原理任务要求:理解定时器的核心部件——计数器寄存器TH、TL,其记录输入脉冲的过程。要求①设置定时器0的工作模式是8位自动重装(模式2);要求②读出计数寄存器的值;要求③当它溢出后蜂鸣器鸣叫。1.任务分析:(1)图5.1-4是定时器T0模式2工作原理图,根据任务要求,定时器工作在计数器模式。(2)设置T0管脚(P3.4)是计数器输入管脚,按键每按下一次,计数寄存器TL0值就增加1。(3)当TL0溢出后,TF0值会被置1。(4)令TL0值显示在数码管,TF0使得蜂鸣器响。(5)按键电路参考图5.1-6,电路没有上拉电阻,因此需要设置P34、P35是内部上拉。(6)蜂鸣器电路参考图5.1-7,P5.4管脚是可编程管脚,当它低电平时,三极管T2导通,蜂鸣器上电开始鸣叫。(7)查询TF0的状态,根据TF0的状态控制P5.4管脚电平。任务1.理解定时器工作原理图5.1-5定时器0、定时器1外部管脚连接按键图5.1-6蜂鸣器电路任务1.理解定时器工作原理2.任务参考代码:/*************功能说明******************************************读计数寄存器内容,了解定时器工作原理由于按键是机械按键,按下有抖动,本例程没有去抖动处理,所以按一次可能连续计数./*---------------------------------------------------------------------*/ #include<STC8.H>#defineMAIN_Fosc12000000UL//定义主时钟typedefunsignedcharu8;typedefunsignedintu16;typedefunsignedlongu32;/***********本地常量声明段码共阴数码管显示字形编码*************/任务1.理解定时器工作原理 //0123456789u8codetab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, //ABCDEFblack 0x77,0x7C,0x39,0x5E,0x79,0x71, 0x00};/************位码,8位数码管com7~com0独立选中****************/u8codedspcom[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};u8dspbuf[8]={16,16,16,16,16,16,16,16};//显示缓冲,初始化黑屏u8display_index=0;//显示位索引voiddelay_ms(u8ms);//声明延时函数voidDisplayScan(void);//数码管显示扫描/***********端口设置的初始化函数***********************/voidGPIO_PxMxSet()任务1.理解定时器工作原理{ P0M1=0x00;P0M0=0x00;//设置为准双向口P1M1=0x00;P1M0=0x00;//设置为准双向口P2M1=0x00;P2M0=0x00;//设置为准双向口//P3M1=0x00;P3M0=0x00;//设置为准双向口P4M1=0x00;P4M0=0x00;//设置为准双向口P5M1=0x00;P5M0=0x00;//设置为准双向口P6M1=0x00;P6M0=0x00;//设置为准双向口P7M1=0x00;P7M0=0x00;//设置为准双向口P40=0;}voidTimer0Init(void) //计数10次@12.000MHz任务1.理解定时器工作原理{ AUXR&=0x7F; //定时器时钟12T模式 TMOD&=0xF0; //设置定时器模式 TMOD|=0x06; //设置定时器模式 TL0=0xF5; //设置定时初始值,为了减少按键次数,从245开始计数 TH0=0xF5; //设置定时重载值 TF0=0; //清除TF0标志 TR0=1; //定时器0开始计数}voidmain(){GPIO_PxMxSet()任务1.理解定时器工作原理P3M1=0x30;P3M0=0x00;//P3.4,P3.5设置为输入口 P_SW2|=0x80; //使能扩展RAMP3PU=0x30;//P3.4,P3.5使能内部4.1K上拉电阻P_SW2&=0x7f;Timer0Init(); while(1){ if(TF0)//查询定时器是否溢出 { P54=0; delay_ms(200);//鸣叫一段时间 P54=1; TF0=0;
任务1.理解定时器工作原理 } DisplayScan(); }}//========================================================================//函数:voiddelay_ms(u8ms)//描述:延时函数。//参数:ms,要延时的ms数,这里只支持1~255ms.自动适应主时钟.//返回:none.//========================================================================任务1.理解定时器工作原理voiddelay_ms(u8ms){u16i;do{i=MAIN_Fosc/10000;while(--i);//10Tperloop}while(--ms);}/**********************数码管动态显示扫描函数************************/voidDisplayScan(void){ //显示内容 dspbuf[6]=TL0>>4;//显示高四位任务1.理解定时器工作原理 dspbuf[7]=TL0&0x0f;//显示低四位 //位选 P7=~dspcom[display_index];//从最左边开始 //段选 P6=~tab[dspbuf[display_index]]; //延时,稳定显示 delay_ms(2); //动态数码管扫描if(++display_index>=8)//与静态显示相比,数码管显示位是变化的{display_index=0;//8位结束回0}}任务1.理解定时器工作原理总结:P34,T0按键每按下一次,TL0计数值就增加1,当TL0=0xff,再次按下按键,定时器溢出,并将TH0的值自动重装给TL0。任务17操作视频见二维码5.1-1。二维码5.1-1任务17的程序实现5.2.定时器配置现代单片机有多个定时器,其中定时器0、1和传统8051完全兼容,定时器2及以上都是扩展定时器,这两类定时器的功能及使用稍有不同,因此分别讲述其配置方法。5.2.1.定时器0、1配置单片机的定时器0有4种工作模式,定时器1有3种工作模式。定时器模块是单片机重要资源,要开启定时器,首先要给它权限,允许定时器工作,即将允许标志位置“1”;其次要设置定时器的工作模式,即设定单片机工作在16位还是8位,是自动重装还是非重装模式。定时器配置,既给特殊功能寄存器赋值。有两个寄存器非常重要:控制寄存器(TCON)——允许标志位所在的寄存器;工作模式寄存器(TMOD)——设置定时器工作模式的寄存器。除了TCON、TMOD,其它与定时器0和1有关的寄存器一并说明如下。(1)TCON:定时器控制寄存器,可位寻址寄存器名称地址bit7bit6bit5bit4bit3bit2bit1bit0TCON88HTF1TR1TF0TR0IE1IT1IE0IT05.2.1.定时器0、1配置TF1:定时器T1的溢出中断标志,当计数寄存器从初值加1计数,到0xffff(16位计数器)或0xff(8位计数器)后,进位产生溢出,硬件将TF1置“1”,向CPU发出中断请求,一直保持到CPU响应中断时,由硬件清“0”,如果单片机没有开启定时器中断,要软件清“0”TR1:定时器T1的运行控制位(TimerRunning),TR1=1,允许Timer1开始计数,TR1=0时停止Timer1计数。TF0:定时器T0的溢出中断编址,功能及使用同TF1。TR0:定时器T0的运行控制位,功能及使用同TR1。IE1:外部中断1(管脚INT1/P33)请求标志,当IE1=1,意味着有外部中断源信号向CPU发出请求,当CPU响应该中断时单片机自动清除该标志位。IT1:外部中断1触发控制位,当IT1=0,上升沿或下降沿都可触发外部中断1,当IT1=1,外部中断源的下降沿触发中断。IE0:外部中断0(管脚INT0/P32)请求标志,功能及使用同IE1。IT0:外部中断0触发控制位,功能及使用同IT1。5.2.1.定时器0、1配置(2)TMOD:定时器工作模式寄存器,可位寻址寄存器名称地址bit7bit6bit5bit4bit3bit2bit1bit0TMOD89HGATEC/TM1M0GATEC/TM1M0for:定时器1定时器0TMOD可以控制Timer0和Timer1两个定时器的工作模式。高四位控制Timer1,低四位控制Timer0。GATE:当Gate=1,硬件开启定时器;Gate=0,定时器开启与外部管脚无关。C/T:定时器的作用域,当C/T=1,此时定时器的功能是个计数器,对外部中断的管脚脉冲进行计数。当C/T=0,是定时器,可以实现us、ms定时。5.2.1.定时器0、1配置M1M0:定时器工作模式选择。定时器0、1都有四个工作模式,这两个定时器的模式0~2完全一致,模式3不一样。如表5.2-1所示。M1M0定时器0定时器100模式0:16位自动重装定时器,当溢出时将RL_TH1/RL_TH0、RL_TL1/RL_TL0存放的值自动重装入TH1/TH0和TL1/TL001模式1:16位不可重装载模式,TH1/TH0、TL1/TL0溢出归零后要手动装入初值10模式2:8位自动重装载模式,当溢出时将TH1/TH0存放的值自动重装入TL1/TL011模式3:不可屏蔽中断的16位自动重载模式。与模式0相同,但是中断要无条件相应,是最高优先级,可用作操作系统的节拍定时器或者系统监控定时器。定时器无效,停止计数。表5.2-1定时器0和1的工作模式5.2.1.定时器0、1配置(3)TH0、TL0、TH1、TL1:计数寄存器,不可位寻址符号地址bit7bit6bit5bit4bit3bit2bit1bit0TL0/TL18AH/8BH--------TH0/TH18CH/8DH--------计数寄存器不可位寻址,只能整个寄存器读和写。当定时器工作在16位模式时,THx和TLx组合成一个16位寄存器,THx是高8位,TLx是低8位;若为8位模式,THx和TLx是两个独立的8位寄存器。5.2.1.定时器0、1配置(4)AUXR:辅助寄存器1,可位寻址”符号地址bit7bit6bit5bit4bit3bit2bit1bit0AUXR8EHT0x12T1x12UART_M0x6T2RT2_C/TT2x12EXTRAMSIST2T0x12:定时器0速度控制位。T0x12=0,12T模式,定时器时钟是晶振的1/12(FOSC/12);T0x12=1,1T模式,定时器时钟不分频(FOSC/1)。T1x12:定时器1速度控制位,功能及使用同T0x12,当复位后,T0x12、T1x12的值都为0,定时器时钟是12T模式,与传统8051兼容。UART_M0x6:串口1模式0的通讯速度控制。T2R:定时器2的运行控制位,T2R=0,定时器2停止计数;T2R=1,定时器2开始计数。T2_C/T:控制定时器2用作定时器或计数器,清“0”用作定时器(对内部系统时钟进行计数),置“1”用作计数器(对管脚T2/P1.2外部脉冲进行计数)。T2x12:定时器2速度控制位,T2x12=0,12T模式,系统时钟12分频;T2x12=1,1T模式,系统时钟不分频。EXTRAM:扩展RAM访问控制,EXTRAM=0,访问内部扩展RAM;EXTRAM=1,内部扩展RAM被禁用。5.2.2.定时器计算公式定时器0、1的计算公式见表5.2-2。定时器计数器定时器速度周期时间计算公式16位1T
12T
8位1T
12T表5.2-2定时器0、1定时时间计算公式:从在上面的计算公式可以看到,定时器的计数寄存器其实是个向上计数器。所谓“向上”就是从THx、TL初值开始,每来一个时钟源脉冲,就自动+1,直到计数满为止。定时器的定时时间和THx、TLx的初值有关系,初值越大,定时时间就越短。另外,系统时钟频率越快,最大定时时间越短。设单片机晶振12MHz,定时器设置在12T,那么定时器最大定时时间65.536ms。定时器设置在1T,最大定时时间只有5.46ms。5.2.2.定时器计算公式在单片机应用开发中通常已知定时时间,定时器初值是未知数,即需要计算定时器从何值开始计数,初值计算公式如表5.2-3所示。定时器位数定时器速度计数寄存器初值计算公式16位1T12T
8位1T
12T
表5.2-3定时器0、1的计数寄存器初值计算公式:5.2.2.定时器计算公式例1:已知STC8H8K单片机时钟电路频率是12MHz,单片机定时T0工作在12T,16位自动重装模式,现在要定时50ms,请问T0的TH0、TL0初值装载多少合适?思路1:按照表5.2-3的公式计算,可以得到TH0和TL0的初值,注意计算的时候数量单位要统一,时间如果用秒,频率就要用Hz。256=(65536-50000)/256=60=(65536-50000)%256=176思路2:单片机的SYSclk是12MHz,定时器12T,因此定时器输入时钟周期是1us,现在定时50ms即50000us,要经过50000个时钟周期达到定时时间,因此从65536-50000=15536开始计数。15536转换成16进制为0x3CB0,因此TH0=0x3C,TL0=0xB0,与思路1的计算结果一致。5.2.2.定时器计算公式例2:例1的定时器T0如果设定在1T,定时还是50ms,TH0、TL0初值又该如何设定?思路:12MHz单片机的定时器如果在1T工作模式,50ms已经超过了它的最大定时时间,可以将50ms分解为10个5ms,或者50个1ms,定时器先设定为5ms或1ms溢出,然后记录溢出次数,达到次数后说明定时时间到。令T0的定时时间1ms,得到:256=(65536-12000)/256=209=(65536-12000)%256=32当定时器溢出50次后,达到定时时间50ms。5.2.2.定时器计算公式下面介绍使用辅助工具STC-ISP获得定时器初值的方法,图5.2-1示意了工具使用方法。图5.2-1STC-ISP软件定时器初始化5.2.2.定时器计算公式步骤如下:(1)选择系统时钟(2)选择定时器(3)设置定时长度(4)选择定时器模式(5)定时器时钟选择1T(6)点击生成C代码,得到THx、TLx。(7)复制代码,粘贴到Keil程序书写框。任务3.定时器1定时1s任务要求:设置1秒定时器。通过LED灯的闪烁彰显定时器效果。1.任务资讯及分析:(1)LED电路原理图如图5.2-2所示。(2)单片机晶振选择12MHz。单片机工作在1T方式下。(3)由任务要求可知,定时器周期是1秒,根据表5.2-2定时器周期的计算公式,对于16位定时器1T工作方式,当THx和TLx是最小值0的时候,定时器的定时时间最多只有5个毫秒,现在要定时1秒,让定时器只溢出一次肯定是不够的。解决办法是定时器先定时1毫秒,然后记录定时器溢出次数,当定时器溢出1000次后,就是1秒定时。(4)开启定时器1,利用STC-ISP软件获得定时器的设置语句,过程如图5.2-1所示。(5)开启单片机中断工作模式,当定时器1溢出后,CPU执行中断。(6)书写定时器中断函数,在中断里记录定时器时间,控制led状态。任务3.定时器1定时1s图5.2-2LED电路任务3.定时器1定时1s2.任务参考代码:#include<STC8.H>//包含此头文件后,里面声明的寄存器不需要再手动输入,避免重复定义/********************************************************定时器初始化函数*********************************************************/voidTimer1Init(void) //1毫秒@12.000MHz1T模式{ AUXR|=0x40; //定时器时钟1T模式 TMOD&=0x0F; //设置定时器模式 TL1=0x20; //设置定时初始值 TH1=0xD1; //设置定时初始值任务3.定时器1定时1s TF1=0; //清除TF1标志 TR1=1; //定时器1开始计时 ET1=1;//打开定时器1中断EA=1;//打开总中断}/********************************************************主函数*********************************************************/ voidmain(void){GPIO_PxMxSet();//见任务15Timer1Init();任务3.定时器1定时1s{ ;}}//========================================================================//函数:voidTimer1_Isr(void)interruptTIMER1_VECTOR//描述:timer1中断函数.//参数:none.//返回:none.//========================================================================任务3.定时器1定时1svoidTimer1_Isr(void)interrupt3{staticintcnt=0;cnt++;//记录定时器中断溢出的次数if(cnt==1000)//1s时间到{ cnt=0; P60=~P60;}}任务18操作视频见二维码5.2-1。二维码5.2-1任务18的程序实现5.2.3.定时器2~4的配置现代单片机都提供多个定时器,与定时器0和1不同,定时器2、3、4的工作模式只有一种既16位自动重载模式。定时器可以定时、计数复用,可以设置为串口波特率发生器或可编程时钟输出。以定时器2为例其内部结构如图5.2-3所示。图5.2-3定时器2内部结构5.2.3.定时器2~4的配置(1)T2H、T2L:定时器2计数寄存器,是定时器工作的核心寄存器,T2H、T2L合成为一个16位寄存器,T2H是高字节,T2L是低字节。(2)RL_T2H、RL_T2L是T2H和T2L的影子寄存器。(3)只要T2R=1,T2H、T2L就开始计数。(4)当T2_C/T=0时,多路开关连接到系统内部系统时钟,是定时器的方式。当T2_C/T=1时,多路开关连接到芯片外部的T2管脚,是计数器的方式,对管脚脉冲计数。(5)增加了8位预分频寄存器TM2PS,定时器2的时钟=系统时钟SYSclk÷(TM2PS+1)。所以系统时钟是可以编程的。(6)AUXR.2决定是否对定时器2的时钟再次12分频或不分频。5.2.3.定时器2~4的配置(7)TM2PS:定时器2的8位预分频寄存器,不可位寻址。TM2PS、TM3PS、TM4PS的寄存器地址和内部位结构如表5.2-4所示。寄存器名称地址bit7bit6bit5bit4bit3bit2bit1bit0TM2PSFEA2H--------TM3PSFEA3H--------TM4PSFEA4H--------表5.2-4预分频寄存器内部不可位寻址结构示意(8)定时器2~4的定时器周期计算公式列于表5.2-5中。定时器速度周期计算公式1T
12T表5.2-5定时器2~4的计算公式:注:上式中x=2,3,4,对应定时器2、3、4。SYSclk是系统时钟,如果芯片连接外部时钟,则为外部晶振频率,如果是内部时钟,则为内部晶振频率。任务4.定时器2扫描数码管动态显示任务要求:使8位数码管显示时间。显示格式如下:小时(十位)小时(个位)-分(十位)分(个位)-秒(十位)秒(个位)1.任务资讯:(1)数码管电路参考第3章任务8图3.4-1。数码管的段选连接P6端口,位选连接P7端口。(2)数码管动态扫描原理:人眼有视觉停留效应。光信号进入人眼后,在视网膜上产生影像,光信号消失后,影像并不会立即消失,这个过程就称为视觉暂留效应,暂留时间约为0.05~0.2秒。动画片、电影的播放都是利用这个原理将静止的画面变换为连续画面。(3)图3.4-1中八位数码管的显示段都连接在一起,要让每位数码管显示不同的字型,必须利用人眼视觉停留效应。方法是轮流向各位数码管送出要显示的字型,每次只有一个数码管显示。每位数码管独立显示的时间都很短,因为视觉停留效应,看上去这些数码管同时在显示不同字型。如果把数码管当做“靶子”,这些靶子每隔一段时间就要扫射一遍,所以称为动态扫描,也称动态刷新。任务4.定时器2扫描数码管动态显示3.任务参考代码:#include<STC8.H>//包含此头文件后,里面声明的寄存器不需要再手动输入,避免重复定义typedefunsignedcharu8;typedefunsignedintu16;typedefunsignedlongu32;#defineDIS_0x11//显示“-”/*********************本地常量声明段码共阴数码管显示字形编码*************/u8codetab[]={//0123456789ABCDEF0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,//black-HJKLNoPUtGQrMy0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,任务4.定时器2扫描数码管动态显示//0.1.2.3.4.5.6.7.8.9.-10xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};/***********************位码,8位数码管com7~com0独立选中****************/u8codedspcom[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};/*************本地变量声明**************/u8dspbuf[8];//显示缓冲u8display_index=0;//显示位索引u8second_cnt,minute_cnt,hour_cnt;/*******************************显示函数****************************************/voidDisplayScan(void);/********************************************************定时器初始化函数任务4.定时器2扫描数码管动态显示*********************************************************/voidTimer0Init(void) //1毫秒@12.000MHz1T模式,定时器0{ AUXR|=0x80; //定时器时钟1T模式 TMOD&=0xF0; //设置定时器模式 TL0=0x20; //设置定时初始值 TH0=0xD1; //设置定时初始值 TF0=0; //清除TF0标志 TR0=1; //定时器0开始计时}voidTimer2Init(void) //2毫秒@12.000MHz{任务4.定时器2扫描数码管动态显示 AUXR|=0x04; //定时器时钟1T模式 T2L=0x40; //设置定时初始值 T2H=0xA2; //设置定时初始值 AUXR|=0x10; //定时器2开始计时}/********************************************************主函数*********************************************************/ voidmain(void){GPIO_PxMxSet(); ET0=1;//打开定时器0中断任务4.定时器2扫描数码管动态显示IE2=IE2|0x04;//打开定时器2中断,ET2=1,IE2不可位寻址EA=1;//打开总中断 Timer0Init();Timer2Init();while(1){ ;}}///========================================================================任务4.定时器2扫描数码管动态显示//函数:voidtimer0_int(void)interruptTIMER0_VECTOR//描述:timer0中断函数.//参数:none.//返回:none.//========================================================================voidtimer0_int(void)interrupt1{staticintcnt=0;cnt++;//记录定时器中断溢出的次数if(cnt==1000)//1s时间到{任务4.定时器2扫描数码管动态显示 cnt=0; P60=~P60; second
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 暖春观后感合集15篇
- 教师自我鉴定500字左右10篇
- 本科毕业生自我鉴定6篇
- 2024国开电大【安全技术与管专业】《安全原理》形考任务1234答案(陕西)
- 土建监理员个人年终总结
- 17GRC装饰线条制作与施工协议样本(2024年版)一
- 关联词的用法及举例
- 关于广告的英语
- 《基本卫生保健》课件
- 年轻男性瘫痪护理常规
- 商业银行消费者权益保护审查要点
- 转让午托班协议书范本
- QCT1067.5-2023汽车电线束和电器设备用连接器第5部分:设备连接器(插座)的型式和尺寸
- 急诊医学智慧树知到期末考试答案章节答案2024年杭州医学院
- 中国老年糖尿病诊疗指南解读(2024版)
- 《第4单元 表内乘法(一):2、3的乘法口诀》教案(附导学案)
- (完整)运输方案
- 华为产品全生命周期成本管理
- 第15课《建设美丽中国》第2框《优化生态安全屏障体系》课件 2023-2024学年 中职高教版(2023)中国特色社会主义
- 2024版新生产安全事故罚款处罚规定解读
- 供热系统设计说明书
评论
0/150
提交评论