标题: 单片机定时器0中断 控制LED亮灭 有几个问题想不清楚!求解答 [打印本页]
作者: 22854qq 时间: 2020-7-25 17:47
标题: 单片机定时器0中断 控制LED亮灭 有几个问题想不清楚!求解答
疑问:
1.模块一不是给定时器设定了初值了嘛?模块三的重新设定是在中断之后将溢出的数值重新设定????
2.去除模块三的定时器赋初值为什么下载程序后不能达到LED亮灭??
3.主函数中的while(1)是让程序停在那里一直扫描???


#include"reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedefunsigned int u16; //对数据类型进行声明定义
typedef unsignedchar u8;
sbitled=P2^0; //定义P20口是led
/*******************************************************************************
模块一
* 函 数 名 : Timer0Init
* 函数功能 :定时器0初始化
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
voidTimer0Init() //外部中断0的函数
{
TMOD|=0X01; //选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=0XFC; //给定时器赋初值,定时1ms
TL0=0X18;
ET0=1;//打开定时器0中断允许
EA=1; //打开总中断
TR0=1;//打开定时器 //定时器0的运行开关
}
/*******************************************************************************
模块二:主函数
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
Timer0Init(); //定时器0初始化
while(1); // 等待中断发生????
}
/*******************************************************************************
模块三:中断服务函数
* 函 数 名 : void Timer0()interrupt 1
* 函数功能 : 定时器0中断函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Timer0()interrupt 1
{
staticu16 i;
TH0=0XFC; //给定时器赋初值,定时1ms
TL0=0X18;
i++;
if(i==1000)
{
i=0;
led=~led;
}
}
作者: xianfajushi 时间: 2020-7-25 23:59
1不要把函数称为模块,2应该去学一下定时器内容,3除去中断重新赋值会使计时变得很长,4while(1);无限空循环,因为不需要做任何事情。
作者: xianfajushi 时间: 2020-7-26 05:39
补充一下while(1);空循环不做任何别的事情,只负责让单片机运行起来。
作者: wufeng391 时间: 2020-7-26 10:17
你可能是从PLC转过来的吧!模块的概念用于理解程序还行,与大家沟通就不太方便了,定时器每次溢出进入中断都会让定时器寄存器的值清零,即TL0,TH0=0,如果要保证下次定时器进入中断的时间,需要再次给TH0和TH0赋值。你也可以理解为定时器在工作模式1时的记性不太好,一进入中断就忘了自己在哪儿了,你需要提醒它一下,也就是通过TH0和TH1的赋值实现。
作者: wufeng391 时间: 2020-7-26 10:20
你需要对中断的概念加深一下理解。
while(1);你也可以理解为无条件等待,直到发生中断并执行中断程序。执行完中断继续等待。
作者: fsmith 时间: 2020-7-26 11:14
你对中断的应有还有点不熟悉,可以加深学习一下。
while(1); 对于MCU来讲,只是在等待,不处理任何事务,直到发生中断并执行中断程序。执行完中断继续等待。
作者: 压着我头发啦 时间: 2020-7-26 15:50
http://www.51hei.com/bbs/dpj-103111-1.html
我觉得还是把这篇文章细研究下。要不以后遇到定时中断还是不会。要每一句都知道怎么回事
作者: lxbhcy 时间: 2020-7-28 09:58
while(1),这个是等待,如果没有这个,程序很可能只执行一次
作者: 22854qq 时间: 2020-7-28 16:06
谢谢!!!
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |