今日學習任務:
今天學習的中斷,包括外部中斷,定時計數器中斷。了解了中斷的工作方式以及中斷函數的編寫。
定時計數器中斷有四種工作方式,有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的初始化
今日未解決問題:
無
今日開發收獲:
深入了解了定時計數器的工作方式,會一些基本的中斷操作。
自我評價:
今日所講的内容基本了解,老師布置的任務也基本完成。
其他:
無