⑴ 51系列单片机定时/计数器初始化的步骤
TMOD:模式控制寄存器,定时器的运行模式,定时计数模式等;
TCON:运行控制寄存器,定时器的中断允许和外部触发中断允许,运行停止控制,溢出标志等
THx/TLx:计数值
IE:中断控制,如果要开启中断允许,则需要配置这个寄存器;
IP:中断优先级控制,如果开了几个中断源,则需要配置中断控制的先后;
总体就是:
先关运行和中断,然后配置模式,配置计数值,定时器运行打开,定时器是否中断允许,是否开启总中断;
如果不开中断,就直接配置模式和计数值,然后运行即可,主程序里查询溢出位,判断是否到计数值(不准确)。
其他定时器T2等,有其他的寄存器,但配置方法同。
⑵ mcs-51单片机定时器应用的初始化步骤有哪些
TMOD、TH0或TH1、TL0或TL1、EA=1;TR0或TR1=1;
TMOD选择方式。TH0=(65536-x)%256;x为定时时间,x<65536
EA=1;开中断;TR1=1;启动定时器。
例如:
TMOD=0X10;
TH1=0X4b;
TL1=0Xfe
TR=1;
“TMOD=0X10;”设置定时器1模式为模式一(16位定时器/计数器)
“TH1=0X4b;TL1=0Xfe;”设置定时器初值
"TR1=1"启动定时器1
t=(2^16-初值)*机器周期=(2^16-初值)*时钟周期*12
此例中:初值=0x4bfe=19454
t=(65536-19454)*1/11095200*12=0.04983993078087821760....约为0.05s即50ms
公式解释:
每个机器周期产生一个计数脉冲,计时器寄存器最大允许2^16,大于2^16就溢出触发中断。初值为T,则还有65536-T次计数,每次计数用时一个机器周期,所以总用时:t=(2^16-初值)*机器周期=(2^16-初值)*时钟周期*12
初值设置:把所需时间T代入上式解出初值0xAABB,把0xAA作为TH,0xBB作为TL
也可以用上式推导出初值计算公式
⑶ 51单片机定时器初始化没有赋初值,计时器会怎么计时
定时器的计时与否与给不给初值没关系,只要TR0
=
1,或者TR1
=
1,相应的定时器就开始计时。
定时器的初始值在复位之后,THx
=
0,TLx=
0,也就是说,如果你没有人为的给出初始值,就从0开始计,计到最大值,溢出后再从0开始计。
我们之所以给初值,是为了得到精确的,我们需要的计时时间,并不是控制定时器是否计时的。
⑷ 51单片机串口初始化步骤,首先初始化那个在初始化那个,最好是华为等大公司的初始化模版
设置系统时钟-》设定分频-》设定引脚输出输入方式(推挽或漏极开路)-》设定定时器1工作模式在八位自动重载模式-》载入定时器初始值-》开启定时器1-》开启串口0中断使能-》开启总中断使能-》开启串口0接受允许-》设定串口0工作模式-》初始化完成。
将数据压入发送缓冲寄存器
用while
语句等待发送标志位被置位
然后清0,以为数据发送完成。
⑸ 51单片机定时器初始化程序的基本步骤
1.设置工作方式即TMOD的值
2.计算初值写TH TL的值
3.开启定时器中断和总中断
4.启动定时器。
⑹ 51单片机的定时器初始化可以带参数吗 例如:void timer_init(uchar a,uchar b):
1、定时器初始化通常在51程序的开始设置。一般情况下,不需要。因为函数只调用一次就累赘了。
2、当定时器需要反复设定,在程序运行过程中,需要重复修改时。利用函数的模块化思想,当然代码效率更高、可读性、维护管理升级都是有益的。
3、函数设计时,局部变量标识符的取名应该更贴近该参数的含义。
4、语法上完全可以。根据需要定义函数,完善函数的功能。void timer_init(uchar a,uchar b){}
【补】在中断中,随时更新这个参数ab,是可以的。但是注意:中断服务里面的a、b应该是全局变量。函数定义中,形参不要和此相同。最终赋值给a、b。那么主程序调用timer_init()后,中断服务里面的初值就可以更新了。