[CC2530 Introduction Course-04] Principe et application de la minuterie / compteur CC2530

[CC2530 Introduction Tutorial-06] Principe de fonctionnement et application de l'ADC du CC2530

[CC2530 Introduction Tutorial-05] Principe et application de l'interface série du CC2530

[CC2530 Introduction Course-04] Principe et application de la minuterie / compteur CC2530

[CC2530 Introduction Course-03] Système d'interruption CC2530 et application d'interruption externe

[CC2530 Introduction Tutorial-02] Contrôle général d'entrée et de sortie du port d'E / S du CC2530

[CC2530 Getting Started Tutorial-01] CC2530 Développement du microcontrôleur Premiers pas


1. Le principe de base du chronométrage / dispositif technique https://www.cnblogs.com/ALittleBee/p/7078252.html

        La minuterie / compteur est un périphérique qui peut compter le signal d'horloge interne ou le signal d'entrée externe, et lorsque la valeur de comptage atteint l'exigence définie , il soumettra une demande de traitement d' interruption au CPU pour réaliser la fonction de synchronisation ou de comptage.

        Le principe de fonctionnement le plus élémentaire de la minuterie / compteur est de compter . Qu'il s'agisse d'une minuterie ou d'un compteur, il s'agit essentiellement d'un compteur , qui peut être compté de 1 (moins 1). Chaque fois qu'un signal de comptage apparaît, le compteur augmente automatiquement de 1 (soustrait automatiquement 1). ( Ou de la valeur maximale à 0) En cas de dépassement, le temporisateur / compteur lèvera une demande d'interruption au CPU.

 

Deuxièmement, minuterie / compteur CC2530

        Le CC2530 dispose de 5 minuteries / compteurs au total , parmi lesquels le minuteur 1 est un minuteur 16 bits , qui est le minuteur / compteur le plus complet du CC2530 et doit être sélectionné en premier dans l'application. Il existe trois modes de fonctionnement de la minuterie 1:

        <1>  Mode de fonctionnement libre : le compteur démarre à partir de 0x0000 et augmente de 1 à chaque front d'horloge actif. Lorsque le compteur atteint 0xFFFF, il déborde et le compteur recharge 0x0000 et commence un nouveau cycle de comptage par incrément. La période de comptage de ce mode est une valeur fixe de 0xFFFF. Lorsque la valeur de comptage finale de 0xFFFF est atteinte, les bits de drapeau T1IF et OVFIF sont mis à 1.

        <2>  mode d'onde : le compteur commence à partir de 0x0000, augmenté chaque front d'horloge actif 1, lorsque le compteur atteint le débordement T1CC0 valeurs de registre enregistrées, à son tour à partir du compteur pour démarrer un nouveau cycle de 0x0000 incrémentant le cycle de comptage du mode d'onde par Set by l'utilisateur.

        <3>  Mode de comptage croissant / décroissant : le compteur démarre à plusieurs reprises à partir de 0x0000, compte jusqu'à la valeur de comptage finale enregistrée par TICC0, puis compte à rebours jusqu'à 0x0000. Lorsque la valeur de comptage finale est atteinte, les bits de drapeau T1IF et OVFIF sont fixés.

 

3. Système d'interruption de minuterie / compteur du CC2530

        Il existe trois situations dans lesquelles le temporisateur peut générer une demande d'interruption:

        <1> Le compteur atteint la valeur de comptage finale (dépassement ou retour à zéro).

        <2> Entrez l'événement de capture.

        <3> Événement de comparaison de sortie (utilisé en mode modulo).

Une attention particulière doit être portée à l'         utilisation du mode module, il est nécessaire d' activer le mode de comparaison de sortie de la voie 0 , sinon, une fois que la valeur du compteur atteint T1CC0, une interruption de dépassement ne sera pas générée.

 

4. Projet de formation: appliquez le mode analogique de la minuterie 1 pour réaliser 1 seconde de chronométrage

[1] Définissez la valeur de comptage maximale de la minuterie 1

        Le temporisateur 1 a 5 paires de registres T1CCxH et T1CCxL, correspondant au canal 0 au canal 4. Lorsque vous utilisez la fonction de minuterie de la minuterie 1, utilisez les deux registres T1CC0H et T1CC0L pour stocker les 8 bits hauts et les 8 bits bas de la valeur de comptage maximale.

        Valeur de comptage maximale = durée du chronométrage / période de comptage du minuteur.

        Dans cette formation, l'horloge système est de 16 MHz, le facteur de division de fréquence est de 128, la synchronisation est de 0,1 seconde et la valeur de comptage maximale est:

        

[2] Conception de la fonction d'initialisation de la minuterie

        <1> Ecrire la valeur de comptage maximum du temporisateur 1 dans T1CC0.

        <2> Activez le mode de comparaison de sortie du canal 0 de la minuterie 1 via le registre T1CCTL0.

        <3> Réglez le bit de commande d'interruption correspondant de la minuterie 1.

        <4> Réglez le coefficient de division de fréquence et le mode de fonctionnement et démarrez la minuterie.

[3] Conception de la fonction de service d'interruption de minuterie

       <1> Efface le bit indicateur d'interruption de T1STAT.

       <2> Accumuler le nombre de variables globales.

       <3> Le décompte est divisible par 10, c'est-à-dire que le temps de 1 seconde est arrivé.

       <4> Le compte est remis à zéro lorsque la minuterie est de 10 secondes.

[4] Code source du projet de formation

#include "ioCC2530.h"

#define  LED5   P1_3
#define  LED6   P1_4
/*===============定时器1初始化函数==================*/
void Init_Timer1()
{
  T1CC0L = 0xd4;        //设置最大计数值的低8位
  T1CC0H = 0x30;        //设置最大计数值的高8位
  T1CCTL0 |= 0x04;      //开启通道0的输出比较模式
  T1IE = 1;             //使能定时器1中断
  T1OVFIM = 1;          //使能定时器1溢出中断
  EA = 1;               //使能总中断
  T1CTL = 0x0e;         //分频系数是128,模模式
}

unsigned char count = 0;  
/*================定时器1服务函数====================*/
#pragma vector = T1_VECTOR
__interrupt void Timer1_Sevice()
{
  T1STAT &= ~0x01;      //清除定时器1通道0中断标志
  count++;
  if(count%10 == 0)     //定时1秒到
  {
    LED5 = ~LED5;
  }
  if(count == 100)      //定时10秒到
  {
    LED6 = ~LED6;
    count = 0;
  }
}
/*=================端口初始化函数====================*/
void Init_Port()
{
  P1SEL &= ~0x18;  //将P1_3和P1_4设置为通用I/O端口
  P1DIR |= 0x18;   //将P1_3和P1_4的端口设置为输出
  LED5 = 0;
  LED6 = 0;
} 
/*===================主函数=========================*/
void main()
{
  Init_Port();
  Init_Timer1();
  while(1);
}

 

Je suppose que tu aimes

Origine blog.csdn.net/weixin_44643510/article/details/114440536
conseillé
Classement