找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1894|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

關(guān)于CC2430 用定時(shí)器中斷來(lái)實(shí)現(xiàn)秒表

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:271566 發(fā)表于 2018-1-4 19:42 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include "iocc2430.h"
#include "string.h"


#define LED3  P0_1
#define LED4  P1_4
#define LED5  P1_1
#define LED6  P1_0

void UartTX_Send_String(char *p);
void time2string(unsigned int value,char *result);

int counter;
int counter2;
char resultstr[6];

void Timer(void)
{
  counter=10;
  counter2=0;

  UartTX_Send_String("\r\n進(jìn)入秒表,按任意鍵開(kāi)始計(jì)時(shí)\r\n");
  P0DIR =  P0DIR | 0x02;// 0000 0010設(shè)置p0_1引腳為輸出
  P1DIR =  P1DIR | 0x13;// 0001 0011設(shè)置p1_0、p1_1、p1_4、引腳為輸出

  LED3=0;  
  LED4=0;
  LED5=0;
  LED6=0;//初始熄滅指示燈LED6

  T1CTL = 0x0a;        //0000 1010單片機(jī)時(shí)鐘頻率16MHz,32分頻后是500 000Hz;自動(dòng)重裝模式(0->T1CC0中的計(jì)數(shù)值);
  T1CC0L = 0x50;//計(jì)數(shù)次數(shù)50000 = 0xc350
  T1CC0H = 0xc3;//計(jì)數(shù)次數(shù)50000 = 0xc350
  //定時(shí)器中斷頻率是200 000/ 50 000 = 10Hz

  while(URX0IF == 0);
  URX0IF = 0; //清標(biāo)識(shí)
  T1IE = 1;   //T1中斷使能
  EA   = 1;   //系統(tǒng)中斷使能
  UartTX_Send_String("\r\n計(jì)時(shí)中……\r\n");

  while(URX0IF == 0);

  URX0IF = 0; //清標(biāo)識(shí)
  EA   = 0;   //關(guān)閉系統(tǒng)中斷
  T1IE = 0;   //關(guān)閉T1中斷

  time2string(counter2, resultstr);
  UartTX_Send_String("\r\n本次計(jì)數(shù)值:");
  UartTX_Send_String(resultstr);
  UartTX_Send_String(" 秒\r\n");
  UartTX_Send_String("\r\n退出秒表\r\n");
  LED3=0;
  LED4=0;
  LED5=0;
  LED6=0;
}

/*定時(shí)器每過(guò)0.1秒溢出一次*/
#pragma vector=T1_VECTOR
__interrupt void T1_ISR(void)
{

  counter--;
       
  if(counter%10==0)
  {
    counter2++;

    if(counter2%1==0)
    {
      LED3=!LED3;        //LED3亮滅切換
    }
    if(counter2%2==0)
    {
      LED4=!LED4;        //LED4亮滅切換
    }
    if(counter2%4==0)
    {
      LED5=!LED5;        //LED5亮滅切換
    }
    if(counter2%8==0)
    {
      LED6=!LED6;        //LED6亮滅切換
    }
  }

}

void time2string(unsigned int value,char *result)
{
  unsigned int i,j;
  char temp[6];
  i=0;
  while(value!=0)
  {
    temp[i]='0'+(value%10);
    value  = value/10;
    i++;
  }
  j=0;
  while(i!=0)
  {
   result[j++]=temp[--i];
  }
  result[j]='\0';
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表