天天看點

7.19 學習日志 孫文铉

今日學習任務:

今天學習的中斷,包括外部中斷,定時計數器中斷。了解了中斷的工作方式以及中斷函數的編寫。

定時計數器中斷有四種工作方式,有13位、16位、8位。方式0方式1需要重置初始值,方式2不需要。

今日任務完成情況:

一、外部中斷實作LED的關閉,數位管的點亮

#include<reg51.h>

int main()

{

    EA = 1;

    EX1 = 1;

    EX0 = 1;

    while(1)

    {

        P2 = 0xff;

        P0 = 0x00;

    }

    return 0;

}

void inter_0() interrupt 0  //外部中斷處理函數

{

    P0 = 0xff;    

}

void inter_1() interrupt 2  //外部中斷處理函數

{

    P2 = 0xfe;

    P1 = 0xff;

}

二、在數位管上實作計數,從0到999。

#include<reg51.h>

unsigned char code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

sbit LED1 = P0^0;

int flag = 0,dispaly_flag = 0;

int i = 0,count = 0;

int miao = 0,num = 0;

void delay()

{

    int x = 100,i;

    while(x--)

    {

        for(i = 0;i < 40;i++);

    }

}

void display(int m,int n)

{

    if(dispaly_flag%3 == 0)

    {

        P2 = 0xfe;

        P1 = table[m];    

    }    

    if(dispaly_flag%3 == 1)

    {

        P2 = 0xfd;

        P1 = table[n/10];

    }

    if(dispaly_flag%3 == 2)

    {

        P2 = 0xfb;

        P1 = table[n%10];

    }

}

int main()

{

    EA = 1;

    ET0 = 1;

    TMOD = 0x01;

    TH0 = (65535-5000)/256;    //高八位

    TL0 = (65535-5000)%256;     //低八位

    TR0 = 1;

    while(1)

    {

         if(flag == 2)

        {

            num++;

            dispaly_flag++;

            if(num == 100)

            {

                miao++;

                num = 0;

            }

            if(miao == 10)

            {

                miao = 0;

            }

            flag = 0;

        } 

         display(miao,num);

    }

    return 0;

}

void timer_0() interrupt 1

{

    //重裝初值

    TH0 = (65535-5000)/256;    

    TL0 = (65535-5000)%256;  

    flag++;

}

今日開發中出現的問題彙總:

計數時,計數時長和動态顯示的間隔時長的問題。

TH0和TL0的初始化

今日未解決問題:

今日開發收獲:

深入了解了定時計數器的工作方式,會一些基本的中斷操作。

自我評價:

今日所講的内容基本了解,老師布置的任務也基本完成。

其他: