南山网站建设哪家好,网站建设误期违约金赔偿限额,网站创建域名,甜品网页设计模板html1.定时器的介绍
1.什么是定时器 #xff08;1#xff09;SoC的一种内部的外设【在单片机里面#xff0c;但是在CPU外面】 #xff08;2#xff09;定时器就是CPU的”闹钟“ 2.什么是计数器 #xff08;1#xff09;定时器就是用计数的原始实现的 #xff08;2#xf…1.定时器的介绍
1.什么是定时器 1SoC的一种内部的外设【在单片机里面但是在CPU外面】 2定时器就是CPU的”闹钟“ 2.什么是计数器 1定时器就是用计数的原始实现的 2计数器可以计算外部脉冲个数 3.定时器如何工作 1第一步先设置好定时器的时钟源如果需要的话---51单片机是不需要设置的 2第二步初始化时钟相关寄存器 3第三步设置定时时间取决于脉冲计数个数脉冲的时间 4第四步设置中断处理程序 5第五步打开定时器 6运行时定时器计数到后产生中断如何执行中断isr【中断处理程序】 2.软件控制硬件的关键--寄存器
1.什么是寄存器 1register 2寄存器寄存内容可变一般按位定义 3寄存器使用地址访问编程上像内存一样 2.寄存器的工作原理 1寄存器和硬件之间有双向影响 2软件可以读写寄存器 3总结寄存器是软件能够控制硬件的关键 3.各种寄存器 1单片机的学习主要包括CPU和各种内部外设 2各种内部外设的编程接口就是寄存器 3熟悉一款单片机其实就是熟悉他的寄存器 4寄存器会随着单片机的复杂化而变复杂 5学会用C语言操作寄存器的技巧 3.定时器简介
参考数据手册 通用寄存器可以存放任何数据 特殊功能寄存器专用寄存器【每一位存放什么已经定义好了】 16位定时器/计数器可以存储2的16次方位二进制 定时器/计数器的核心部件是一个加法或者减法计数器其本质是对脉冲进行计数。 比如外部12MHz晶振单片机工作在12T模式下则内部时钟频率是1MHz则时钟脉冲宽度为1us(1.1MHz1us 如果单片机工作在6T模式下则内部时钟频率是2MHz则时钟脉冲宽度为0.5us(1/2MHz0.5us) 4.定时器的主要寄存器介绍 1. TL0/TH0 10000x3E8 》高8位为0x3 低8位为0xE8》TL00xE8 TH00x3 88880x22B8》高8位为0x22 低0xB8 》TL0 0xB8 TH00x22 2.TCON【定时器控制寄存器】 18个位但是有4个名字TRTFIEIT。每一个名字的符号都有2个后面分别带有0或者1【TF1表示高位TF0表示地位】 1.TFtimer flag【定时器标志位】 1定时器标志位硬件直接操控的是只读软件只是通过读取TF1来知道硬件的状态而不用去写这一位来设置硬件的状态 2”最高位溢出“表示达到我们设置的最大位数则将TF1设置为【1】 3timer定时器时间到了会做2件事情 第一个是将TF标志改为1【可以检测是否是因为时间到了而达到中断还是其他意外】 第二个是产生中断让CPU去中断处理 4TF是硬件清零的由1变0是自动的不需要软件来干预。有一些CPU的设计是需要软件去清零这时候用户的程序就一定要记得给标志位清零比如就不能重复进入中断或者反复不停的重复进入中断。 2.TRtimer run【定时器启动计数的开关控制位】 1定时器的启动计数开关。当我们把整个定时器初始化好了之后我们给TR位写1就表示可以开启计数。 2TR位和GARE位有一定关联性。【在下面有提及】 3.IE【外部中断请求源标志】 1IE也是一个标志位作用用来展示硬件状态改变的。比如IE1对应外部中断1INT1。平时不发生INT1时IE10当INT1发生中断时硬件自动IE11当CPU处理了INT1时硬件会自动给IE10硬件自动清零。 4.IT【设置外部中断的中断触发方式】 IT用来设置外部中断的中断触发方式。所谓的中断的触发方式就是指硬件在某种条件下才会被判定为要产生中断所以其实就是中断产生的条件。中断触发方式一般是边沿触发和电平触发2种。边沿触发又分为上升沿触发下降沿触发双边沿触发电平触发方式分为高电平触发低电平触发2钟。 电平触发如果我们设置低电平为发生触发则如果按键被按下则就触发中断。【会反复进入中断】---》所以按键不能使用电平触发 边沿触发设置为上升沿”触发或者“下降沿”触发 3.TMOD【定时器模式寄存器】
1.GATE门控位【TMOD寄存器中的】 用于控制外部信号的 1GATE是TMOD寄存器中的也有2个分别对应T0和T1。GATE位中文名叫门控位工作方式是GATE0时相当于门是打开的此时GATE位是可以忽略的此时定时器开关就只受TR位影响具体就是TR1开启计数TR0结束计数。当timer处于定时器工作模式时GATE就要等于0GATE一般是在timer处于计数器模式时使用的。当timer用来计数时很关键的是什么条件下计数什么条件下不计数。当GATE0时计数条件只有TR1一个TR11就计数TR10看不计数—当GATE1时是否计数不仅取决于TR1还取决于INT1引脚P3.3实际规则是当TR11并且INT1引脚也为高电平时才会计数。 2.C/T 设置T0/T1工作子啊定时器模式还是计数器模式。 当输入是【1】表示计数器【0】时表示定时器。 3.M0/M1 2位一起来表示T0/T1处于哪一种工作模式下一般有4种13位16位8位自动重载双8位。 5.定时器编程实践
1.实验目的 1实验定时器来完成LED闪烁 2用来实现闪烁时中间的延迟是用delay函数实现在delay的过程中CPU要一直耗在这里不能去做别的事情。这是之前的缺点。 3本节用定时器来定一个时间比如0.3s在这个定时器定时内CPU还可以去做主线任务定时时间产生中断在中断处理程序isr中让LED闪烁即可。 2.如何编程 1定时timer初始化 2主程序该干嘛干嘛 3中断处理程序 一般我们写编程时都是参考数据手册中的代码进行修改 定时器的时间周期 我们开发板的定时器最多可能订多长时间 内部时钟频率是1MHz,时钟周期是1us最多能定6553516位定时器也就是说最大定时时间为65535*1us65535us65.535ms 如果要定比较长的时间比如2s定时器直接是不能满足的解决办法是多次定时后加起来成一个长时间。 计算TL0和TH0 1确定自己定时时间定为50ms 2确定内部时钟周期因为12T模式外部晶振12MHz所以1us 3定时个数就是50ms/1us50000 4计数个数就是50000那么写进入TL0和TH0里面的计数值应该是65535-5000015535【因为我们是加法定时器所以加法应该是对应从后往前】 4TL050000%256【取余表示低8位】 TH050000/256【取商表示高8位】 50000》0xC350》TL00x50【表示低8位】 TH0xC3【表示高8位】 中断处理程序
//中断处理程序
void timer0_isr(void) interrupt 1 using 1 //表示外部中断号【在“中断”数据手册中有】
{//因为我们要多次进行中断处理程序所以我们要自己手动修改计数值要不然进行一次就结束//如果不想多次中断则不要进行手动重载TL0和TH0TL015535%256;TH015535/256;if(count--0){//说明中断了10次500ms到了干活了//LED取反LED!LED;countCNT;//我们要进行10所以一定要进行再次赋值}
}
完整代码
#includereg51.hunsigned char count;//10次对应500mssbit LEDP0^1; //LED对应的CPIO定义#define CNT 20//中断处理程序
void timer0_isr(void) interrupt 1 using 1 //表示外部中断号【在“中断”数据手册中有】
{//因为我们要多次进行中断处理程序所以我们要自己手动修改计数值要不然进行一次就结束//如果不想多次中断则不要进行手动重载TL0和TH0TL015535%256;TH015535/256;if(count--0){//说明中断了10次500ms到了干活了//LED取反LED!LED;countCNT;//我们要进行10所以一定要进行再次赋值}
}void main(){//0000 0001//因为我们控制的是T0所以前四位为0【前四位为T1】//【第5个0】GATE我们此时是定时器与外部程序无关所以设置为0//【第6个0】C/T0表示定时器1表示计数器//【第7-8个0】表示在16位定时器TMOD0x01; //T0设置工作在定时器模式下16位定时器//我们定时50ms//因为是12HMz的晶振所以50ms/1us50000//设置TL0【低8位】256是2的8次方TL015535%256;//设置TH0【高8位】TH015535/256;TR01;//开启计数器ET01; //开启T0中断EA1;//中断总开关countCNT;while(1); //主任务}
6.定时时间设置
1.加法定时器和减法定时器 1定时器的原理是计数器加法定时器计数方法是从我们给定的值开始计数直到溢出比如我们16位定时器最大值位0xffff也就是65535计数值到达这个值就溢出了。减法定时器是从我们给定的值开始减1减到0就溢出。 2实例来看比如16位定时器我们设置计数值为1000则如果是减法定时器那么计数个数就是1000如果是加法定时器则计数个数是65535-100064535 351单片机就是典型的加法定时器 4现代的单片机或者嵌入式SoC一般常用的都是减法定时器。虽然我们加法定时器和减法计时器都可以实现功能但是明显减法定时器更加直观