完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
第一节 硬件解读
关于定时器,又称计数器,是单片机内部的计时的独立的系统。关于它的引脚,我们可以在原理图里面查到。 从上图中,我们不难发现,一共有5个中断源,引脚分别是P3.2,P3.3,P3.6,P3.7和P3.0;一共有2个定时器,引脚分别是P3.4和P3.5。与上一章的得到的结论一摸一样。 本章将先讲解定时器,关于中断的讲解,将放在按键部分。 第二节 程序编写 对于上述程序,重点是定时器的初始化与定时器服务函数。 在定时器初始化函数中,第一个寄存器是TMOD,该寄存器信息如下图所列。可以看出,2个定时/计数器有4种操作模式,通过TMOD的M1和M0选择。高四位bit控制T1,低四位bit控制T0。所以定时器T0有4种工作方式;TMOD =0x00(工作方式0),TMOD = 0x01(工作方式1),TMOD = 0x02(工作方式2),TMOD = 0x03(工作方式3)。定时器T1也有4种工作方式;TMOD =0x00(工作方式0),TMOD = 0x10(工作方式1),TMOD = 0x20(工作方式2),TMOD = 0x30(工作方式3)。但是需要注意的是,如果定时器T0用方式1,T1用方式2,那TMOD = 0x21(高位T1,低位T0)。这就是为什么在TMOD寄存器中没有直接赋值,使用语句“TMOD &= 0xf1; //用定时器0工作方式1”可以保留高位的定时器T1的工作模式,即使本程序中没有用到T1定时器。 TR0:T0定时使能开关,TR0 = 1,开始工作;TR0 = 1,停止工作。 ET0:T0定时器中断开关,定时时间一到,就会跑去中断程序。ET0=1,中断使能;ET0=0失能。 EA :中断总开关,你可以想象成电路的总电闸,EA=1,中断使能;EA=0,中断失能。 TH0,TL0 : T0定时器计数寄存器,组成16位的计数,0x0000--0xFFFF(0--65535),只要TH0和TL0=0xFFFF(65535),程序就会跑去中断(计数)程序,在中断(计数)程序中,我们要重新给TH0,TL0重新赋值的。假如说,我们定时50毫秒,TH0,TL0对应着什么值呢?上面我们说了,TH0,TL0,组成的16位计数器计数范围是 0--65535 。50ms = 50 000us,我们只要让 TH0和TL0 从(65535 - 50000)开始计数,TH0,TL0就会不停的+1,直到TH0,TL0=65535,就是计数了50000次,时间就是过了50ms。我们只要在中断(计数)程序里面,重新赋值给TH0,TL0=(65535 - 50000),定时器就会不停得每50ms中断一次了。 所以,TH0=(65535-50000)/256;TL0 =(65535-50000)%256 ; 好吧,T0程序例子,定时20ms的程序 : TMOD = 0x00;//工作方式0 TR0 = 1;//开始工作 ET0=1;//中断使能 TH0=(65535-20000)/256; TL0 = (65535-20000)%256 ; 说完了T0,T1该怎么办?我开始的时候说了,T0,T1是一对双胞胎。大家把上面T0例子程序稍加该动即可: TMOD = 0x00;//工作方式0 TR1 = 1;//开始工作 ET1=1;//中断使能 TH1=(65535-20000)/256; TL1=(65535-20000)%256; 上面是所有关于定时器初始化函数的内容 接下来就是定时器服务函数了。这个函数里面的TH0与TL0与定时器初始化的是一模一样的,该函数最难的是这个函数的命名规范,该函数命名规范如下: 函数类型函数名interrupt n 中断号 中断源 中断向量 0 外部中断0 0003H 1 定时器/计数器0 000BH 2 外部中断1 0013H 3 定时器/计数器1 001BH 4 串行口 0023H 第三节 实验现象 实验要求: 1:USB1插上电脑。 2:J13选择”IO”模式。 3:打开开发板开关S3。 实验现象: 1:L9作为电源指示灯,常量。 2:数码管显示"12-00-00",并每秒加1 注意事项: 1:数码管有残影,属于正常现象。 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2955 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 09:54 , Processed in 1.059620 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号