找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1865|回复: 3
收起左侧

新手关于单片机中断和定时计数器有几个问题搞不懂,请教一下大家!

[复制链接]
ID:404479 发表于 2018-11-5 13:18 来自手机 | 显示全部楼层 |阅读模式
下面这段程序,我提出几点我搞不懂的地方!
第一就是,为何非要让中断参与到这个函数里?我的意思是,我只想要一个延时效果,我如果不想要中断参与进去,同样。我需要这个led灯延时一秒闪烁,这程序应该怎么修改?
第二就是,用的12mhz晶振,既然一秒=1000毫秒,1毫秒=1000微秒,那么,为何在程序中我设置1000微秒而实际得到的闪烁效果是1秒,要知道一秒=1000000微秒啊!我就搞不明白!
第三就是,这个程序,我设置的是定时1毫秒后溢出触发中断,也就是if(i==1000)过后,TF0就为1了,向cpu请求中断,为何我if(i==500)的时候,没有溢出,他也会执行中断函数!
第四就是,TMOD|=0x01;   我的理解是这样的:TMOD=TMOD|0x01    也就是:00000001|00000001=00000001  我理解的正确吗?这样的目的是否可以防止TMOD这个寄存器高四位出错?

第五就是,为何需要第二次给定时计数器赋初值,他的意义是什么!谢谢大家!

以下是程序:
#include "reg52.h"               

typedef unsigned int u16;         
typedef unsigned char u8;

sbit led=P2^0;         
void Timer0Init()
{
        TMOD|=0X01;

        TH0=0XFC;        
        TL0=0X18;        
        ET0=1;
        EA=1;
        TR0=1;
void main()
{        
        Timer0Init();  
        while(1);               
}
void Timer0() interrupt 1
{
        static u16 i;
        TH0=0XFC;        
        TL0=0X18;
        i++;
        if(i==1000)
        {
                i=0;
                led=~led;        
        }        
}
回复

使用道具 举报

ID:100391 发表于 2018-11-5 17:56 | 显示全部楼层
1、让中断参与进来计数是为了更加的准确,如果对时间要求不是很严格的话,可以让单片机执行一些重复的语句(例如int i = 40000; while(i--;)以消耗时间,但具体消耗了多少时间要进入软件调试才能得知。
2、进入中断的时间由TH0,TL0的值来决定(也就是定时器的初值),举个例子:当你所有的定时器设置正确,初值为TH0 = 0XFC;TL0 = 0X18;,这样就是1ms进入一次中断,每次进入中断后,中断函数的静态变量i就自加一次(也就是相当于进入了多少次中断),当i = 1000时(也就是相当于进入了1000次中断了),1ms进入一次,进入了1000次,是不是就等于1ms*1000=1s?
3、如果进入中断时间不对(也就是触发TF0的时间不对),请确认定时器初值是否设置正确(也就是TH0与TL0的值是否正确)。
4、TMOD=TMOD|0x01;这句语句的意思是 TMOD的前7位不变,最后一位置1(如果是设置定时器0的工作模式1的话TMOD应如下设置:TMOD = TMOD & 0XF0;TMOD = TMOD | 0X01;)这样就不会影响到TMOD的高4位(也就是设置定时器1的那4位)。
5、假如不给TH0/TL0重新赋值的话,那么将会导致TH0/TL0溢出,表现出来的结果就是定时时间不准确;举个例子:假如TH0 = 0XFC;TL0 = 0X18;当定时时间到了1ms之后,立马给TH0/TL0重新赋值,这样定时器下一次进入中断的时间又会变成1ms进入一次,如果不重新赋值,那么进入中断的时间不能确定(也就是定时时间不确定)。
6、以下为个人看法:
    (1)能将不懂的事情问出来是好事,就怕不懂又不问。
    (2)视频教程不能只看一遍就过了,多看几次,直到彻底理解为止,不然视频中总有遗漏的地方,
    (3)我不是大神,我只是一个正在学习51单片机的人,所以,以上观点我不敢保证一定没问题。如有发现不对的地方请不吝赐教。
回复

使用道具 举报

ID:243982 发表于 2018-11-5 21:30 | 显示全部楼层
这样的回复太牛啦  我顶你 我也学习了
回复

使用道具 举报

ID:404479 发表于 2018-11-6 07:04 来自手机 | 显示全部楼层
黄煌皇 发表于 2018-11-5 17:56
1、让中断参与进来计数是为了更加的准确,如果对时间要求不是很严格的话,可以让单片机执行一些重复的语句 ...

听君一席话,胜读十年书啊!非常感谢大神的回答!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表