前言
国赛倒计时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的定时器与计数器测试实验。
上一篇:课程实验 【八路抢答器】
下一篇:蓝桥杯STC15单片机复习——DS1302
推荐阅读最新更新时间:2024-11-13 16:01
设计资源 培训 开发板 精华推荐
- LTC3622IMSE 5V/3.3V Vout、突发模式操作、同相开关同步降压稳压器的典型应用电路
- LTC3547 的典型应用 - 双通道单片式 300mA 同步降压型稳压器
- #第五届立创电子设计大赛#带hall传感器的BLDC无刷电机的单电阻采样FOC矢量控制
- 用于音频放大器的 D 类音频功率放大器
- 用于紧凑型荧光灯的 1 灯 26W 荧光灯驱动器
- 降压模块-SY8205
- 使用 ROHM Semiconductor 的 BD4856 的参考设计
- LT8331EMSE 36V 至 72V 输入、48V SEPIC 转换器的典型应用电路
- 使用 NXP Semiconductors 的 TDA8559T 的参考设计
- LT1940 使用小型陶瓷电容器产生两个低噪声输出