5415|0

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于CC2530串口中断接收的问题 [复制链接]

CC2530串口中断接收的自定义缓存BUF最大可以定义多大? 我现在需要一个最少160字节的BUF存接收到的数据进行解析;但是定义buf[160]后用IAR编译总是提示IDATA空间不够;后来通过调节IAR-option -stack/heap 中的设置;但是最大也是只能设置到buf[135]个字节 我看了2530的芯片手册 上面说它的SARM有8K;不知道是什么原因;我把代码发给大家看看;求各位大侠帮帮忙;不胜感激
#include
#include
//宏定义
#define uint unsigned int
#define uchar unsigned char
/*函数声明和定义*******************************/
void inituart0(void);
void uarttx_send_string(uchar *data,int len);
void uart_send_char(uchar ch);
void delay_ms(uint i_delay);
void Clear_UART0(void);
uint send_messge();
/*变量定义和赋值*******************************/
uchar recdata[130]="";//就是这里希望能定义160个字节的空间
uchar temp=0;   //无数据接收到时,设为0
uint  datanumber=0;//接收字符串计数  
  uchar send_content[]={"such handsome"};//发送短信内容
//初始化串口0函数
void inituart0(void)
{  
CLKCONCMD &=0XBF;//系统时钟为32MHZ  
while(CLKCONSTA & 0X40);//等待时钟稳定  
CLKCONCMD &=0XF8;//主时钟频率为32MHZ   
PERCFG &=0XFE;//设USART0的ALT 1  
P0SEL |=0X3C;//P0口2、3、4、5做外设  
P2DIR &=0X3F;//P0外设优先级USART0最高   
U0CSR |=0X80;//设USART0 工作方式为UART
  U0GCR |=8;  //设置波特率
U0BAUD =0x3b;//设波特率  
UTX0IF=0;//UART0 TX中断标志位清0
}
//串口发送字符
void uart_send_char(uchar ch)
{
  U0DBUF=ch;
  while(UTX0IF==0);
  UTX0IF=0;
}
//串口发送字符串函数
void uarttx_send_string(uchar *data,int len)
{  
  int j;  
  for(j=0;j   {   
   U0DBUF=*data++;   
   while(UTX0IF==0);
   UTX0IF=0;
  }
}
//延时函数
void delay_ms(uint i_delay)
{
  uint i,j;
  for(i = 0; i< i_delay; i++)
  {
   for(j = 0; j < 200; j++)
   {
    asm("NOP");
       asm("NOP");
       asm("NOP");
        asm("NOP");
       asm("NOP");
       asm("NOP");
        asm("NOP");
       asm("NOP");
       asm("NOP");
        asm("NOP");
   }
  }
}
//串口清0函数
void Clear_UART0()
{
  uchar i;
  for(i = 0; i<= datanumber;i++)
  {
   recdata=0;
  }
    datanumber = 0;
}
/*接收中断函数*******************************/
//串口接收一个字符,一旦有数据从串口传至CC2530,
//则进入中断,将接收到的数据赋值给变量temp。
#pragma vector=URX0_VECTOR
__interrupt void UART0_ISR(void)
{  
   
temp=U0DBUF;//读取缓存到temp

if(temp!=0)     
{      
  //if((temp!='\n')&&(datanumber<80))//'\n'被定义为结束字符,最多能接收80个字符  
  //{         
     recdata[datanumber++]=temp;   
  //}
    temp=0;   
  }
  URX0IF=0;//清标志
}
此帖出自51单片机论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表