ADC 数据采集发送到 pc

#include “ioCC2530.h”
#include <stdio.h>

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 != ‘\0’)
{
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;
}

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值