51单片机学习笔记之中断与定时器(一)
定时器与中断(基于海创电子的讲解,海创的视频真的讲的很好,很多知识都讲透了,超级推的,感兴趣的可以去B站搜来看看)
可以借鉴参考手册,辅助学习真的好!
中断和定时器
定时器:类似于一个水桶,先装好一定的水,如果在规定的时间内水满了,水会溢出,说明我们规定的时间到了。
时钟周期:相当于单片机的一个最小单位,一个时钟周期内单片机仅完成一个最基本的动作
表达式为:1/(晶振*1000000)
机器周期:单片机完成完成一个基本操作所需要的时间,是时钟周期的12倍
假设我们定时20ms(晶振为12M,有些开发板的晶振是11.592M的,注意看一下)
晶振的震动次数*(12/12000000)=0.02(化为秒来算)
次数=20000
则装的水为65536-20000=45536
如果采用定时模式1,我们需要将45536化为十六进制装入寄存器TH0和TL0中(TH0是高8位,TL0是低8位,记法TH:Time Hight TL:Time Low)
装载方法:
TH0:45536/256=177,177转化为16进制 **还可以直接这样写//**TH0=(65536-20000)/256
TL0:45536%256=224,224转化为16进制 TL0=(65536-20000)%256
常用的寄存器*(注意可位寻址的意思是可以直接进行位操作,就是可以直接对位进行控制)*
TCON寄存器
TF1/0:定时器T1/0的溢出标志位,相当于检测水满了的工具,产生溢出事可由硬件置“1”
TR1/0:TR1=1时允许定时器T1开始计时,TR1=0是禁止T1计时
TR0同样道理,不过是定时器0的
TMOD寄存器(注意不可操作,就直接十六进制写入TMOD=0x–)
我们要使用的是TL和TH,则要控制各自定时器的M1和M0为0和1,如上图所示,定时器0就是TMOD=0x01;直接像点灯一样控制电平一样
查询法配置定时器的步骤(用if函数来查询)
1.通过配置寄存器TMOD确定定时模式,即工作模式,一般为模式一
2.将计算得到的初值装载到TH0和TL0中(这是定时器0的,若是定时器1则为TH1和TL1)
3.通过配置TR0启动定时器0(定时器1则为TR1)
4.判断标志位TF0,若TF0为1表示溢出,通过软件清零再重新进行监测
我自己写的代码,我是根据参考手册和步骤一条一条的打的,没有抄别视频的,这里说一句,参考手册牛逼!!
#include<reg52.h>
sbit led =P2^0;
void main()
{
TMOD=0x01; //确定容器的大小,工作模式
TH0=(65536-48300)/256; //50ms 装载初值
TL0=(65536-48300)%256;
TR0=1; //打开定时器T0 可以记为 Time Run 0 启动嘛
while(1)
{
unsigned int count;
if(TF0==1)
{
TF0=0;
TH0=(65536-48300)/256; //50ms 重装初值
TL0=(65536-48300)%256;
count++;
if(count>=20) //1s闪烁
{
led=~led;
count=0;
}
}
}
}
中断法配置定时器(用中断函数来写)
中断:本来再做某件事,然后突然去处理某事,处理完后回来继续处理未处理完的事。
中断有嵌套的
中断函数的编写格式:void 变量名() interrupt 中断号
中断常用的寄存器
EA:总中断允许控制位,使用中断时必须使EA=1
ET0:T0的溢出中断允许位。ET0=1,允许T0中断;ET0=0,禁止T0中断
ES:串口1中断允许位。ES=1,允许串口1中断,ES=0,禁止串口1中断
自己写的程序
#include<reg52.h>
sbit led =P2^1;
void main()
{
EA=1; //开启总中断,这个相当于校长
TMOD =0x01;
TH0=(65536-48300)/256; //50ms
TL0=(65536-48300)%256;
TR0=1; // 打开定时器T0
ET0=1; //允许中断 这个相当于班主任,只有校长和班主任同意中断才能中断
while(1)
{
;
}
}
void time0() interrupt 1
{
unsigned int count;
TF0=0; //注意TF0同时是中断请求标志位,
//TF0=1,请求中断
TH0=(65536-48300)/256; //50ms 装初值
TL0=(65536-48300)%256;
count+=1;
if(count>=20)
{
led=~led;
count=0;
}
}
static:定义全局变量
下一篇: WinMIps64指令集实验
推荐阅读
-
Netty学习笔记之Netty组件初探与第一个Netty程序的编写
-
node学习笔记之读写文件与开启第一个web服务器操作示例
-
51单片机学习笔记之中断与定时器(一)
-
单片机学习笔记————51单片机实现判断数据头来接收一串数据的串口通用程序框架
-
单片机学习笔记————51单片机实现判断数据尾来接收一串数据的串口通用程序框架
-
单片机学习笔记————51单片机(利用return)实现判断数据头来接收一串数据的串口通用程序框架
-
单片机学习笔记————51单片机实现在串口接收中断里即时解析数据头的特殊程序框架
-
Netty学习笔记之Netty组件初探与第一个Netty程序的编写
-
51单片机(V51)学习——外部中断和定时器中断
-
node学习笔记之读写文件与开启第一个web服务器操作示例