sanmaodeai 发表于 2018-5-29 20:23:38

有没有人帮我解释下这段代码的意思?

大神帮我分析下这段代码的意思,有的不是非常清楚

//单片机时钟是12MHz
#include"STC15Fxxxx.h"
#include"intrins.h"

unsigned int a = 0;
sbit led = P1^0;

void init0(void)
{
        AUXR = 0x0E;
        TMOD &= 0xF0;
        TL0 = 0x00;               
        TH0 = 0x00;               
        TF0 = 0;                //clear TF0 flag
        TR0 = 0;                //start timer0
}

void main()
{
        EA=1;
        INT0 = 1;
        EX0 =1;
        IT0 =0;
        init0();
        while(1)
        {
                if(a>1480&&a<2020)               
                {
                        led = 0;
                }
                else
                {
                        led =1;
                }
        }
}
void ext0(void) interrupt 0
{

        if(INT0==1)                                 //上升沿触发
        {
                TR0=1;                                //开定时器0
        }
        if(INT0==0)                        //下降沿触发
        {
                TR0 = 0;                        //关定时器0               
                a= TH0;                                //TH0和TL0的值不是都是0吗?为什么要赋值给a?
                a=a*256+TL0;
                TL0=0x00;                                //初值
                TH0=0x00;                                //初值
        }

上面这段代码有几个问题不知道,有人帮忙解答吗?
1. 在外部中断为下降沿触发时,定时器初值都是0,并且赋值给了a,那在主函数中a为什么会有值?不是应该是0吗?       

20061002838 发表于 2018-5-29 20:35:00

电工版刻舟求剑

20061002838 发表于 2018-5-29 20:35:38

定时器会跑啊

gunslinger 发表于 2018-5-29 20:36:22

初始化时不是软件设置了INT0 = 1;吗,然后定时中断,中断中检测上升沿开定时中断,同样还是中断如果检测下降沿,就会把定时器的寄存器的值给a赋值,a是全局变量,可以保存值得啊。

lixin91985 发表于 2018-5-29 20:37:49

我觉得先弄清楚 中断的含义非常的有必要。

小李非刀 发表于 2018-5-30 10:58:39

这个非常的简单的啊,上升沿开始计数,下降沿停止计数,读出16位计数值,清除计数值。就这么简单。

这是测量外部脉冲的高电平时间,比如模型的舵机信号。

饭桶 发表于 2018-5-30 11:01:07

定时器点灯啊,a是全局变量,好去看是否需要点灯。

isakura 发表于 2018-5-30 11:04:42

哈哈,有时候脑袋抽了就是会想不清楚....

我有过几次非常简单的问题都想不通

michael.yang 发表于 2018-5-30 11:46:37

楼主可能初次接触单片机,不知道定时器为何物?

yy625 发表于 2018-5-30 17:36:31

这个应该是个神仙题!

gonboy 发表于 2018-6-1 14:24:21

看不懂,这代码能跑吗》???????????

gshuang1 发表于 2018-6-1 15:46:51

检测波形高电平保持时间

sh0568 发表于 2018-6-1 16:10:15

变量a加个volatile比较好

mysky 发表于 2018-6-1 16:12:33

哪不理解看书,查资料,还不懂再来问

sh0568 发表于 2018-6-1 16:14:52

变量a从硬件寄存器Th,TL读数值,这个寄存器的值会根据你的设置,自动累加计数的,所以每次读到的结果不一样

leolong03 发表于 2018-6-26 11:10:12

当随机数用?

Sky2162 发表于 2018-6-26 19:18:46

初始化时不是软件设置了INT0 = 1;吗,然后定时中断,中断中检测上升沿开定时中断,同样还是中断如果检测下降沿,就会把定时器的寄存器的值给a赋值,a是全局变量,可以保存值得啊。
页: [1]
查看完整版本: 有没有人帮我解释下这段代码的意思?