原创 CC2430基础实验——串口时钟PC显示(转载)

2009-9-20 18:00 2615 3 3 分类: MCU/ 嵌入式
这个实验主要是利用CC2430的定时器1产生秒信号

    实验共用到P1,P1DIR,T1CTL,T1CCTL0,T1CC0H,T1CC0L,IEN0,IEN1,CLOKCON、SLEEP、PERCFG、U0CSR、U0GCR、U0BAUD、IEN0、U0BUF、ADCCON1、ADCCON3、ADCH和ADCL几个个寄存器。其中其中CLOKCON为时钟控制寄存器,SLEEP为睡眠模式控制寄存器,PERCFG为外设控制寄存器,U0CSR为串口0控制状态寄存器,U0CSR为串口0常规控制寄存器,U0BAUD为串口0波特率控制寄存器,U0BUF为串口0收发缓冲。IEN0和IEN1分别为中断使能寄存器0和1,T1CCTL0为T1通道0捕获/比较寄存器,T1CC0H为T1通道0捕获/比较值高字节寄存器,T1CC0L为T1通道0捕获/比较值低字节寄存器。


    首先看一下初始化时钟程序


   void InitClock(void)
   {
    CLKCON = 0X38;   //TICKSPD = 101 定时器计数时钟源 CLKSPD = 000 和波特率有关


                     //两个时钟源选用晶振


     while(!(SLEEP&0X40));  //等晶振稳定
    }


    这个程序段是用来设置系统时钟为晶振,同时将计数器始终设为0.25M。晶振稳定后退出函数(这个是实验书上的原话,我这个硬件白痴基本不是很懂),接着来看一下T1的初始化程序


   void InitT1(void)
   {
    T1CCTL0 = 0X44;    //T1 ch0 中断使能 比较模式


    T1CC0H = 0x04;
    T1CC0L = 0x00;     //0x1fbd = 250D)


    T1CTL |= 0X02;     //start count 在这里没有分频。 使用比较模式 MODE = 10(B)


    IEN1 |= 0X02;
    IEN0 |= 0X80;      //开T1中断
    }


    这个函数是打开T1中断,T1为比较模式。因为T1的计数时钟是0.25M,而T1CC0 = 0X038E = 1000,所以250次中断溢出1s。


    现在看一下T1的ISR,这个程序段很简单的,大家应该能够自己看明白的。
   
#pragma vector = T1_VECTOR
     __interrupt void T1_ISR(void)
    {
        IRCON &= ~0x02;//清中断标示
        counter++;
        if(counter == 250)
         {
          counter = 0;
          timetemp = 1;           //second ++
          led1 = ~led1;         // for test
         }
    }


    主程序的部分其实我觉得没有什么研究的价值,这个实验说的是读取串口时钟,实际上个人认为只不过是T1计数器的一个实际的应用。用计数器的中断来模拟时钟,通过一个数组上各个元素的一系列的变化,生成一个所谓的时间(其实是一个数组),然后通过串口向PC机上发送。就是这么简单的了。我觉得这个实验我们还是好好的学习计时器的使用比较好,顺便熟悉一下串口的使用问题。


本文转载自:http://blog.sina.com.cn/s/blog_4c8287230100ay62.html

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
3
关闭 站长推荐上一条 /3 下一条