前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CC2530基础实验之采集模拟量传感器值

CC2530基础实验之采集模拟量传感器值

作者头像
w候人兮猗
发布2020-07-01 17:33:01
7050
发布2020-07-01 17:33:01
举报
代码语言:javascript
复制
#include<iocc2530.h>
#include<stdio.h>
int a ;

#define LED P1_0
#define uInt32 unsigned long
#define uInt16 unsigned short

int flag = 0;    //定时器溢出次数
char output[8];  //定义的数据处理数组

    //


void init_LED()  //初始化LED
{
  P1SEL = 0x00;
  P1DIR = 0x01;
  P1= 0;
}
void init_UART0()
{
  PERCFG = 0x00;   //串口0位置1
  P0SEL = 0x0c;    //0_2 0_3设置特殊端口
  U0CSR |=0X80;   //0100 0000  0x80 串口通信的语言这里使用USART

  U0BAUD =59    ;
  U0GCR=10  ;        //波特率57600

  U0UCR |=0x80;     //流控制禁止
  U0CSR |=0x40;     //允许接受数据
  UTX0IF = 0;       //接受标志位
  URX0IF = 0;       //发送标志位

  URX0IE=1;        //使能中断
  EA=1;        //中断总开关

}

void init_Timer1()
{
  CLKCONCMD &= ~0X40;
  while(CLKCONSTA & 0X40);
  CLKCONCMD &= ~0X47;

  T1CTL = 0X05;
  IEN1 |= 0X02;
  EA = 1;
}

void SendString(char *str)  //发送字符串
{
   while(1)
   {
      if(*str == '\0')  
        break;
      U0DBUF = *str++;
      while(!UTX0IF);
      UTX0IF = 0;
   }
}

void init_ADC()
{
  APCFG |=1;                  //模拟IO口使能
  P0SEL |= 0X01;        //片上外设
  P0DIR &= ~0X01;             //设置输入模式
}

uInt16 get_ADC()    //ADC处理函数
{
  init_ADC();
  ADCCON3 = 0X90;   //AVDD5引脚;9位分辨率
  ADCIF = 0;        //ADC中断标志位
  ADCCON3 = (0x80 | 0x10 | 0x00);//采用基准电压 acdd5: 3.3v,通道0, 启动 AD 转换
  while(!ADCIF);

  uInt32 value;

  value = ADCH;
  value = value << 8;
  value |= ADCL;
  value = value*330;    //电压值 = (value * 3.3) / 32768
  value = value >>15;    //  value * 330 是为了后面处理数据所以多乘 100

  return value;  //返回一个短整形value值
}

void get_GZ()  //光照处理函数
{
  uInt16 GZ_value;
  GZ_value = get_ADC();
  output[0] = GZ_value/100+0x30;
  output[1] = 0x2e;
  output[2] = GZ_value/10%10+0x30;
  output[3] = GZ_value%10+0x30;

  output[4] = 0x0d;
  output[5] = 0x0a;

}

#pragma vector = T1_VECTOR    
__interrupt void T1_f()
{
  EA=0;
  flag++;
  if(flag>=30)  //溢出时间:0.5s
  {
    flag = 0;
    LED=~LED;
    get_GZ();  //调用光照处理函数


    SendString(output);
  }

   T1IF = 0;   //清空T1溢出中断标志位
   EA=1;
}

void main()
{
  init_LED();
  init_UART0();
  init_Timer1();
  while(1);
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年3月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档