今日学习任务:
今天学习的中断,包括外部中断,定时计数器中断。了解了中断的工作方式以及中断函数的编写。
定时计数器中断有四种工作方式,有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的初始化
今日未解决问题:
无
今日开发收获:
深入了解了定时计数器的工作方式,会一些基本的中断操作。
自我评价:
今日所讲的内容基本理解,老师布置的任务也基本完成。
其他:
无