1源码
#include "iocc2530.h"
void led_init(){
P1SEL &=~0xff;//通用io
P1DIR |=0x01;//输入输出
P1_0=0;//灭灯
}
void T1_init(){
T1CTL =0x0d;//设置分频,和模式(128分频,0x0000~0xffff)
// 最大计数值=定时时长/定时器计数周期=0.25/(1/16M(时钟源) X 128(分频) )=31250=0x7A12
}
void main(){
int count;
//选择时钟源,上电默认是内部时钟源16M
led_init();//初始化LED
T1_init();//初始化定时器1
while(1){
if(IRCON>0){
IRCON=0x00;//清除溢出标志
count++;
}
if(count==2){//
P1_0=1;
}
if(count==4){//
P1_0=0;
}
if(count>4){
count=0;
}
}
}
2寄存器讲解
CC2530芯片默认上电时,是使用内部的两个RC电路作为时钟来源的。具体来说,这两个RC电路分别提供高频时钟(16MHz)和低频时钟(32KHz)信号。
io的
定时器的
T1CTL
在使用定时器1的定时功能时,使用T1CC0H和T1CC0L两个寄存器存放最大计数值的 高8位和低8位。T1CCxH和T1CCxL共5对,分别对应定时器1的通道0到通道4,两个寄存器 的功能描述如表T-1-33-2和表T-1-33-3。
T1CCxH
T1CCxL
定时器1的工作模式设定 由于需要手工设定最大计数值,因此可为定时器1选择工作模式为正计数/倒计数模 式,只需要设置T1CTL寄存器中的MODE[1:0]位即可。一旦设置了定时器1的工作模式 (MODE[1:0]为非零值),则定时器1立刻开始定时计数工作,设置代码如下。 T1CTL|=0x03; //定时器1采用模模式
如果使用的是定时器3或定时器4,参照表T-1-33-4设置相关寄存器。
T3CNTH
T4CNTN
T1STAT寄存器的描述
查询方式
1判断计数的值
通过读取T1CNTH和T1CNTL两个寄存器来分别获取当前计数值的高位字节和低位字节。
当读取T1CNTL寄存器时,计数器的高位字节会被缓冲到T1CNTH寄存器,以便高位字节可以从T1CNTH中读出,因此在程序中应先读取T1CNTL寄存器,然后读取T1CNTH寄存器。
2判断溢出寄存器
IRCON
#include "iocc2530.h"
void led_init(){
P1SEL &=~0xff;//通用io
P1DIR |=0x01;//输入输出
P1_0=0;//灭灯
}
void T1_init(){
T1CTL =0x0d;//设置分频,和模式(128分频,0x0000~0xffff)
// 最大计数值=定时时长/定时器计数周期=0.25/(1/16M(时钟源) X 128(分频) )=31250=0x7A12
}
void main(){
int count;
//选择时钟源,上电默认是内部时钟源16M
led_init();//初始化LED
T1_init();//初始化定时器1
while(1){
if(IRCON>0){
IRCON=0x00;//清除溢出标志
count++;
}
if(count==2){//
P1_0=1;
}
if(count==4){//
P1_0=0;
}
if(count>4){
count=0;
}
}
}