前言
国赛倒计时1天半,冲冲冲。
本次实验测试STC15的定时计数器,,STC15F2K60S2单片机共有三个定时计数器,我们比较常用的只是定时器0和定时器1.所谓计数器,就是计算定时计数器对应引脚的脉冲,对于国信长天的板子,上面搭载有NE555的谐振电路,可以输出频率可调的方波,本此实验通过计数器采集其输出的方波并计算显示其大致频率。
1、计数器
首先配置定时计数器0为计数器模式,用于采集NE555的信号输出。
#include#define uint unsigned int #define uchar unsigned char void ALL_Init(); void delay_ms(uint ms); void SEG_show(uint num); void Timer0Init(void); uchar SEG_num[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; int num = 0; void main() { ALL_Init(); Timer0Init(); while(1) { SEG_show(num); } } void Time0_run() interrupt 1 { num++; } void Timer0Init(void) { AUXR = 0x80; //定时器时钟1T模式 TMOD = 0x04; //设置定时器模式 TL0 = 0xFF; //设置定时初值 TH0 = 0xFF; //设置定时初值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 ET0 = 1; EA = 1; } void SEG_show(uint num) { P25 = 0;P26 = 1;P27 = 1;P0 = 0x01; P25 = 1;P26 = 1;P27 = 1; P0 = SEG_num[num/10000]; delay_ms(10); P25 = 0;P26 = 1;P27 = 1;P0 = 0x02; P25 = 1;P26 = 1;P27 = 1; P0 = SEG_num[num/1000%10]; delay_ms(10); P25 = 0;P26 = 1;P27 = 1;P0 = 0x04; P25 = 1;P26 = 1;P27 = 1; P0 = SEG_num[num/100%10]; delay_ms(10); P25 = 0;P26 = 1;P27 = 1;P0 = 0x08; P25 = 1;P26 = 1;P27 = 1; P0 = SEG_num[num/10%10]; delay_ms(10); P25 = 0;P26 = 1;P27 = 1;P0 = 0x10; P25 = 1;P26 = 1;P27 = 1; P0 = SEG_num[num%10]; delay_ms(10); P25 = 0;P26 = 1;P27 = 1;P0 = 0x00; } void delay_ms(uint ms) { int i; for(;ms>0;ms--) for(i = 864;i>0;i--); } void ALL_Init() { P25 = 1;P26 = 0;P27 = 1; P0 = 0x00; P25 = 0;P26 = 1;P27 = 1; P0 = 0x00; P25 = 0;P26 = 0;P27 = 1; P0 = 0xff; }
使用杜邦线将板子上的SIGNAL引脚与P34(定时计数器0的引脚)相连,即可采集信号。
2、定时器
成功采集到信号以后,我们需要计算每秒的脉冲数,这样才能得到频率,将定时器计数器1配置为定时器模式,每隔1s进行一次计算。
int num1;
void main()
{
ALL_Init();
Timer0Init();
Timer1Init();
while(1)
{
SEG_show(num1);
}
}
int x = 0;
void Time1_run() interrupt 3
{
x++;
if(x == 999)
{
x = 0;
num1 = 2*num;
num = 0;
}
}
void Timer1Init(void) //1毫秒@11.0592MHz
{
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xCD; //设置定时初值
TH1 = 0xD4; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1;
EA = 1;
}
在定时器1的中断服务函数中,将采集到的脉冲数*2并显示出来,即可得到频率,对着15这个计数器采集脉冲究竟是上升沿还是下降沿表示有点懵逼,但是经过实际示波器测试,输出的频率确实为采集到的脉冲数的两倍,得到这个关系即可。
结语
至此,完成了STC15的定时器与计数器测试实验。



