蓝桥杯STC15单片机复习——定时计数器中断

发布者:HappyExplorer最新更新时间:2022-08-15 来源: csdn关键字:蓝桥杯  STC15单片机 手机看文章 扫描二维码
随时随地手机看文章

前言

国赛倒计时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单片机 引用地址:蓝桥杯STC15单片机复习——定时计数器中断

上一篇:课程实验 【八路抢答器】
下一篇:蓝桥杯STC15单片机复习——DS1302

推荐阅读最新更新时间:2024-11-13 16:01

蓝桥单片机设计与开发笔记(三)
数码管显示几乎是每次蓝桥杯单片机设计与开发组竞赛的必考部分,相对于使用LCD1602作为显示设备,使用数码管来显示能够更好的考察参赛选手的单片机基本功,因为CT107D开发平台的设计使得数码管的显示不仅牵扯到数码管显示的 基本内容,还涉及到74HC573锁存器,74HC02异或门,74HC138译码器,以及中断的知识,所以这是值得我们重视的一个部分。 一、原理分析 根据CT107D的原理图我们可以看出,数码管显示同样涉及到74HC573、74HC138和74HC02,这与上一节中的LED灯、继电器和蜂鸣器的控制大同小异。如下图,蓝色标注为位选控制端口,由锁存器U6来控制,需配置红色标注的Y6C来控制锁存;黄色标注为段选控制端口
[单片机]
<font color='red'>蓝桥</font><font color='red'>杯</font><font color='red'>单片机</font>设计与开发笔记(三)
STC15单片机ADC温敏电阻测温源程序
品诺电子STC15W4K-实验29-ADC温敏电阻测量温度 单片机源程序如下: /************************************************************************************ * * 实验平台:品诺电子STC15W4K核心板 + 品诺电子 开拓者 扩展板 * 时钟选择:内部IRC时钟22.1184M * 功能说明:该实验通过ADC功能,使用扩展板上的温敏电阻测量当前温度,温度值显示在数码管上。温敏电阻相对于DS18B20温度传感器,价格低的多。 * ***************************************************
[单片机]
蓝桥嵌入式STM32学习笔记(一)——MDK下C语言基础复习
MDK下C语言基础复习 写在前面:就在前几天我刚刚参加完了蓝桥杯的省赛,在比赛之前我阅读了社区里许多优秀博主的文章,所以也想把自己的收获当作笔记记下,希望能够帮助后面也要参赛的同学,顺便也总结一下自己这段时间的收获。 这一部分是MDK中有关C语言的部分,如果大家C语言都学得很好就忽略,主要是讲一些基本操作。 1.1位操作 在MDK下常用的位操作符和微操作技巧 C语言支持如下6钟位操作 其中这里与、或、异或和取反不用我多讲我在这里讲一下移位运算。 移位运算包括左移和右移 左移运算:x K 表示:x左移k位,并在右端补零 右移运算:x K 表示:x右移k位,并在左端正数补0,负数补1(算术移位) 例子: 假设u8 A=
[单片机]
<font color='red'>蓝桥</font><font color='red'>杯</font>嵌入式STM32学习笔记(一)——MDK下C语言基础复习
51单片机定时器/计数器中断
Hz是频率单位。频率是指电脉冲,电磁波,声波和机械的振动周期循环时,1秒钟重复的次数 1Hz 代表每秒钟振动 1次 60Hz 代表​​每秒钟振动 60次 1KHz 代表​​每秒钟振动 1,000次 1MHz 代表​​每秒钟振动 1,000,000次 频率的常用单位:Hz KHz MHz GHz​ 对于声音,人类的听觉范围为 20Hz~2000Hz,低于这个范围叫次声波,高于这个范围叫超声波。​​ 单片机外接12MHz晶振时: 12MHz = 12,000KHz = 12,000,000Hz 1S = 1,000ms = 1,000,000us 12Mhz晶振时钟周期: 12,000,000Hz
[单片机]
单片机 中断定时器/计数器详说 )
方式0应用     通过设置TMOD寄存器中的M1M0位00选择定时器方式0,方式0的计数位数是13位,对T0来说,TL0寄存器的低5位(高3位未用)和TH0寄存器的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向cpu发出中断请求。其逻辑图如下 定时器方式0位13位计数器,最多能装载的个数 2的13次方=8192个,当TL0和TH0的初始值为0时,最多经过8192个机器周期该计数器就会溢出一次,向cpu申请中断。 THX=(8192-N)/32 TLX=(8192-N)%32。机器周期=12 X (1/时钟频率) 单片机定时器程序的步骤: 对TMOD赋值、计算初值、中断方式,对IE赋值
[单片机]
<font color='red'>单片机</font> <font color='red'>中断</font>( <font color='red'>定时</font>器/<font color='red'>计数器</font>详说 )
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved