定时器/计数器设计实验
2013-12-12 12:38
197 查看
要求:了解定时器的各种工作方式, 掌握定时器/计数器的使用和编程方法
实验题目:采用12MHZ时钟频率的单片机,通过一个开关输入,触发定时计数。按下开关10次,计算按键的平均时间,并通过数码管显示出来。
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code DSY_CODE[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77};//0-10的数值编码
uchar Digits_of_6DSY[]={0,0,0,0,0,0};
uint Count=0;//中断次数
sbit Dot=P1^7;//小数点
void Delay()
{
uchar n=10,i;
while(n--)
for(i=0;i<120;i++);
}
void Show_Count_ON_DSY()
{
P0=~DSY_CODE[Count];//数码管上显示中断的次数
Delay();
}
void EX_INT0() interrupt 0
{
char i = 0;
Count++;//统计中断次数
if(Count>11) //大于十置零
{
while(i < 6)
{
Digits_of_6DSY[i]=0;
++i;
}
Count=0;
TH0=-1000/256;//1MS定时
TL0=-1000%256;
TR0 = 1;
}
Show_Count_ON_DSY();
}
void Time0() interrupt 1
{
uchar i,j,n;
TR0 = 0;
TH0=-1000/256;//1MS定时
TL0=-1000%256;
if(Count<=10)
{
Digits_of_6DSY[0]++;//0.1ms累加
for(i=0;i<5;i++) //处理进位问题
{
if(Digits_of_6DSY[i]==10)
{
Digits_of_6DSY[i]=0;
if(i<5)
Digits_of_6DSY[i+1]++;
}
}
j=0x7f;
for(n=5;n!=-1;n--)
{
j=_crol_(j,1);
P2=j;
P1=DSY_CODE[Digits_of_6DSY
];//显示数位
if(n==1)
Dot=1;
Delay();
}
}
else
return ;
TR0 = 1;
}
void main()
{
uchar j,n;
P0=0xFF;
P1=0x00;
P2=0xFF;
IE=0x83; //允许INT0中断以及定时器0中断
IT0=1; //下降沿触发
TMOD=0x01;
TH0=-1000/256;
TL0=-1000%256;
TR0=1;
while(1)
{
if(Count>10) {
TR0=0;
while(1)
{
j=0x7f;
for(n=5;n!=-1;n--)
{
j=_crol_(j,1);
P2=j;
P1=DSY_CODE[Digits_of_6DSY
];//显示数位
if(n==2)
Dot=1;
Delay();
}
}}
//Show_Count_ON_DSY();//显示中断次数
}
}
实验题目:采用12MHZ时钟频率的单片机,通过一个开关输入,触发定时计数。按下开关10次,计算按键的平均时间,并通过数码管显示出来。
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code DSY_CODE[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77};//0-10的数值编码
uchar Digits_of_6DSY[]={0,0,0,0,0,0};
uint Count=0;//中断次数
sbit Dot=P1^7;//小数点
void Delay()
{
uchar n=10,i;
while(n--)
for(i=0;i<120;i++);
}
void Show_Count_ON_DSY()
{
P0=~DSY_CODE[Count];//数码管上显示中断的次数
Delay();
}
void EX_INT0() interrupt 0
{
char i = 0;
Count++;//统计中断次数
if(Count>11) //大于十置零
{
while(i < 6)
{
Digits_of_6DSY[i]=0;
++i;
}
Count=0;
TH0=-1000/256;//1MS定时
TL0=-1000%256;
TR0 = 1;
}
Show_Count_ON_DSY();
}
void Time0() interrupt 1
{
uchar i,j,n;
TR0 = 0;
TH0=-1000/256;//1MS定时
TL0=-1000%256;
if(Count<=10)
{
Digits_of_6DSY[0]++;//0.1ms累加
for(i=0;i<5;i++) //处理进位问题
{
if(Digits_of_6DSY[i]==10)
{
Digits_of_6DSY[i]=0;
if(i<5)
Digits_of_6DSY[i+1]++;
}
}
j=0x7f;
for(n=5;n!=-1;n--)
{
j=_crol_(j,1);
P2=j;
P1=DSY_CODE[Digits_of_6DSY
];//显示数位
if(n==1)
Dot=1;
Delay();
}
}
else
return ;
TR0 = 1;
}
void main()
{
uchar j,n;
P0=0xFF;
P1=0x00;
P2=0xFF;
IE=0x83; //允许INT0中断以及定时器0中断
IT0=1; //下降沿触发
TMOD=0x01;
TH0=-1000/256;
TL0=-1000%256;
TR0=1;
while(1)
{
if(Count>10) {
TR0=0;
while(1)
{
j=0x7f;
for(n=5;n!=-1;n--)
{
j=_crol_(j,1);
P2=j;
P1=DSY_CODE[Digits_of_6DSY
];//显示数位
if(n==2)
Dot=1;
Delay();
}
}}
//Show_Count_ON_DSY();//显示中断次数
}
}
相关文章推荐
- 定时器/计数器设计实验
- (单片机原理与应用)定时器/计数器设计实验
- 南邮微机接口实验——8254定时器/计数器实验
- 实验7 利用51单片机的定时器设计一个时钟
- 实验二:外部中断与定时器/计数器中断实验
- 实训汇编语言设计——8253计数器/定时器
- 实训汇编语言设计——8253计数器/定时器
- 定时器/计数器的提高实验报告
- 定时器/计数器实验报告
- 南邮微机实验(设计定时器)
- FPGA基础实验:计数器设计、波形仿真、SignalTap调试
- 计数器设计实验
- 定时器/计数器的提高实验报告
- 20145305 《信息安全系统设计基础》实验一 开发环境的熟悉
- 信息安全系统设计基础实验三:实时系统的移植
- java课程实验设计——数据库连接 问题
- 20145224&20145238《信息安全系统设计基础》实验一 开发环境的熟悉
- 20145219 《信息安全系统设计基础》实验一 开发环境的熟悉
- 06-BCD计数器设计与应用——小梅哥FPGA设计思想与验证方法视频教程配套文档
- 信息安全系统设计基础实验三报告