一.实验任务
利用AT89S51单片机的T0和T1的定时器功能,对输入信号的频率进行计数,计数的频率结果由8位动态数码管显示。要求准确计数0-250 kHz的信号频率,计数误差不超过1 Hz。
二、电路原理图
图4.31.1
第三,系统板上的硬件连接
(1)用8芯电缆连接“单片机系统”区的P0.0-P0.7和“动态数字显示”区的ABCDEFGH端口。
(2)用8芯电缆将“单片机系统”区的P2.0-P2.7与“动态数字显示”区的s 1s 2s 3s 4s 5s 7s 8端口连接。
(3)用导线将“单片机系统”区域的P3.4(T0)端子连接到“频率发生器”区域的波形端子上。
四、程序设计内容
(1)设置定时器/计数器T0和T1的工作模式。从图中可以看出,T0工作在计数状态,对输入的频率信号进行计数,但计数状态下T0的最大计数值为fOSC/24。由于FOSC = 12 MHz,T0的最大计数频率为250KHz。频率的概念是只统计一秒钟内的脉冲数,也就是频率值。所以T1工作在定时状态,每次到达一秒时,停止计数从T0的计数单元读取计数值,然后进行数据处理。送到数码管显示。
(2).T1工作在计时状态,最大计时时间65ms,达不到1秒的计时。因此,使用20次50ms的计时就可以完成1秒的计时功能。
动词 (verb的缩写)c语言源程序
# include & ltAT89X52。H & gt
无符号字符代码
dispbit={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f };
无符号字符代码dispcode={0x3f,0x06,0x5b,0x4f,0x66,
0x6d、0x7d、0x07、0x7f、0x6f、0x00、0x 40 };
无符号字符dispbuf[8]={0,0,0,0,0,10,10 };
无符号字符温度[8];
无符号字符显示计数;
无符号字符T0count
无符号字符时间计数;
位标志;
无符号长x;
无效总管(无效)
{
无符号字符I;
TMOD = 0x 15;
TH0 = 0;
TL0 = 0;
TH1 =(65536-4000)/256;
TL1 =(65536-4000)% 256;
TR1 = 1;
TR0 = 1;
ET0 = 1;
ET1 = 1;
EA = 1;
while(1)
{
if(flag==1)
{
flag = 0;
x = T0count * 65536+TH0 * 256+TL0;
for(I = 0;我& lt8;i++)
{
temp[I]= 0;
}
I = 0;
while(x/10)
{
temp[I]= x % 10;
x = x/10;
i++;
}
temp[I]= x;
for(I = 0;我& lt6;i++)
{
disp buf[I]= temp[I];
}
time count = 0;
t0count = 0;
void t0(void)使用0中断1
{
t0count++;
}
void t1(void)使用0中断3
time count++;
如果(时间计数==250)
{
TR0 = 0;
time count = 0;
flag = 1;
}
P0 = disp code[disp buf[disp count]];
P2 = disp bit[disp count];
disp count++;
if(dispcount==8)
{
dispcount = 0;
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。