#include “ioCC2530.h”
#include
typedef unsigned int uint;
typedef unsigned char uchar;
uchar count = 0;
void Init_Clock_32MHz();
void Init_Uart0();
void UART0_Send_Byte(unsigned char dat);
void UART0_Send_String(unsigned char *str);
void Init_ADC1();
void Init_Timer1();
int Get_ADC1_Data();
/主函数==/
void main()
{
Init_Clock_32MHz();
Init_Uart0();
Init_ADC1();
Init_Timer1();
while(1)
{
if(count == 15){
count = 0;
UART0_Send_String(“光照传感器电压值 “);
char* s = NULL;
sprintf(s ,”%d”, Get_ADC1_Data);
UART0_Send_String(s);
}
}
}
/初始化系统时钟函数==/
void Init_Clock_32MHz()
{
CLKCONCMD &= ~0x40; //选择系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振稳定
CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ
}
/初始化串口0函数=/
void Init_Uart0()
{
//端口相关的配置
PERCFG = 0x00; //串口0的引脚映射到位置1,即P0_2和P0_3
P0SEL = 0x3C; //将P0_2和P0_3端口设置成外设功能
//波特率相关的配置
U0BAUD = 59; //32MHz的系统时钟产生9600BPS的波特率
U0GCR = 8; // 32MHz—8
//串口属性相关的配置
U0UCR |= 0x80; //禁止流控,8位数据,清除缓冲器
U0CSR |= 0x80; //选择UART模式,使能发器
//串口中断相关的配置
UTX0IF = 0; //清除TX发送中断标志
EA = 1; //使能总中断
}
/=串口0单字节发送函数=/
void UART0_Send_Byte(unsigned char dat)
{
U0DBUF = dat; //将要发送的1字节数据写入U0DBUF
while(!UTX0IF); //等待TX中断标志,即数据发送完成
UTX0IF = 0; //清除TX中断标志,准备下一次发送
}
/=UART0发送一个字符串/
void UART0_Send_String(unsigned char *str)
{
while(*str != ‘ ’)
{
UART0_Send_Byte(*str++); // 发送一字节
}
}
/=初始化定时器T1函数=0.2s/
void Init_Timer1()
{
CLKCONCMD &= 0x80; //时钟速度设置为32MHz
T1CTL = 0x0E; // 配置128分频,模比较计数工作模式,并开始运行
T1CCTL0 |= 0x04; //设定timer1通道0比较模式
T1CC0L =50000 & 0xFF; // 把50000的低8位写入T1CC0L
T1CC0H = ((50000 & 0xFF00) >> 8); //把50000的高8位写入T1CC0H
T1IF=0; //清除timer1中断标志(同IRCON &= ~0x02)T1STAT &= ~0x01; //清除通道0中断标志TIMIF &= ~0x40; //不产生定时器1的溢出中断//定时器1的通道0的中断使能T1CCTL0.IM默认使能IEN1 |= 0x02; //使能定时器1的中断EA = 1; //使能全局中断 }
/=定时器T1中断服务子程序===/
#pragma vector = T1_VECTOR //中断服务子程序
_interrupt void T1_ISR(void)
{
EA = 0; //禁止全局中断
count++;
T1STAT &= ~0x01; //清除通道0中断标志
EA = 1; //使能全局中断
}
/=ADC初始化函数==/
void Init_ADC1()
{
APCFG |= 0x01; //配置模拟I/O使用
P0SEL |= 0x01; //P0_0设置位=为外设
P0DIR &= ~0x01; //配置P0)的方向为输入
}
/*ADC电压采样函数====*/
int Get_ADC1_Data()
{
int value;
ADCIF = 0;
//参考电压选择AVDD5引脚,256抽取率,通道0
ADCCON3 = (0x80 | 0x20 | 0x00);
while(!ADCIF); //等待ADC转换完成
//value 中
value=ADCH;
value=value<<8;
value|=ADCL;//AD值转化电压值 32763 标志3.3v
value=(value*330);
value=value>>15;//除以32768
return value;
}
#include “ioCC2530.h”
#include
typedef unsigned int uint;
typedef unsigned char uchar;
uchar count = 0;
void Init_Clock_32MHz();
void Init_Uart0();
void UART0_Send_Byte(unsigned char dat);
void UART0_Send_String(unsigned char *str);
void Init_ADC1();
void Init_Timer1();
int Get_ADC1_Data();
/主函数==/
void main()
{
Init_Clock_32MHz();
Init_Uart0();
Init_ADC1();
Init_Timer1();
while(1)
{
if(count == 15){
count = 0;
UART0_Send_String(“光照传感器电压值 “);
char* s = NULL;
sprintf(s ,”%d”, Get_ADC1_Data);
UART0_Send_String(s);
}
}
}
/初始化系统时钟函数==/
void Init_Clock_32MHz()
{
CLKCONCMD &= ~0x40; //选择系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振稳定
CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ
}
/初始化串口0函数=/
void Init_Uart0()
{
//端口相关的配置
PERCFG = 0x00; //串口0的引脚映射到位置1,即P0_2和P0_3
P0SEL = 0x3C; //将P0_2和P0_3端口设置成外设功能
//波特率相关的配置
U0BAUD = 59; //32MHz的系统时钟产生9600BPS的波特率
U0GCR = 8; // 32MHz—8
//串口属性相关的配置
U0UCR |= 0x80; //禁止流控,8位数据,清除缓冲器
U0CSR |= 0x80; //选择UART模式,使能发器
//串口中断相关的配置
UTX0IF = 0; //清除TX发送中断标志
EA = 1; //使能总中断
}
/=串口0单字节发送函数=/
void UART0_Send_Byte(unsigned char dat)
{
U0DBUF = dat; //将要发送的1字节数据写入U0DBUF
while(!UTX0IF); //等待TX中断标志,即数据发送完成
UTX0IF = 0; //清除TX中断标志,准备下一次发送
}
/=UART0发送一个字符串/
void UART0_Send_String(unsigned char *str)
{
while(*str != ‘ ’)
{
UART0_Send_Byte(*str++); // 发送一字节
}
}
/=初始化定时器T1函数=0.2s/
void Init_Timer1()
{
CLKCONCMD &= 0x80; //时钟速度设置为32MHz
T1CTL = 0x0E; // 配置128分频,模比较计数工作模式,并开始运行
T1CCTL0 |= 0x04; //设定timer1通道0比较模式
T1CC0L =50000 & 0xFF; // 把50000的低8位写入T1CC0L
T1CC0H = ((50000 & 0xFF00) >> 8); //把50000的高8位写入T1CC0H
T1IF=0; //清除timer1中断标志(同IRCON &= ~0x02)T1STAT &= ~0x01; //清除通道0中断标志TIMIF &= ~0x40; //不产生定时器1的溢出中断//定时器1的通道0的中断使能T1CCTL0.IM默认使能IEN1 |= 0x02; //使能定时器1的中断EA = 1; //使能全局中断 }
/=定时器T1中断服务子程序===/
#pragma vector = T1_VECTOR //中断服务子程序
_interrupt void T1_ISR(void)
{
EA = 0; //禁止全局中断
count++;
T1STAT &= ~0x01; //清除通道0中断标志
EA = 1; //使能全局中断
}
/=ADC初始化函数==/
void Init_ADC1()
{
APCFG |= 0x01; //配置模拟I/O使用
P0SEL |= 0x01; //P0_0设置位=为外设
P0DIR &= ~0x01; //配置P0)的方向为输入
}
/*ADC电压采样函数====*/
int Get_ADC1_Data()
{
int value;
ADCIF = 0;
//参考电压选择AVDD5引脚,256抽取率,通道0
ADCCON3 = (0x80 | 0x20 | 0x00);
while(!ADCIF); //等待ADC转换完成
//value 中
value=ADCH;
value=value<<8;
value|=ADCL;//AD值转化电压值 32763 标志3.3v
value=(value*330);
value=value>>15;//除以32768
return value;
}
举报