OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 谁见过这个问题

共12条 1/2 1 2 跳转至

谁见过这个问题

助工
2014-09-25 11:18:53    评分

在IAR调试窗口里面一切正常,在发送缓冲区里的数据也正常,但是用串口调试助手显示出来的数据却都是00

这是怎么回事???

 


助工
2014-09-25 13:43:02    评分
2楼

助工
2014-09-25 13:49:06    评分
3楼

专家
2014-09-25 14:13:56    评分
4楼
看看电脑和工具的波特率?

助工
2014-09-25 14:17:45    评分
5楼

波特率都设为了9600,一会贴上程序您给看看到底是哪错了,对了还有个堆栈溢出的问题


助工
2014-09-25 14:19:18    评分
6楼

/******************************************************************************

*******************************************************************************/
#include<msp430x14x.h>
#include"24C08.h"
#include"RS232.h"
#include"ds1302.h"
#include"gdata.h"

typedef unsigned char uchar;
typedef unsigned int uint;

uchar time=0;
uchar ye=0,addr=0x00;
uchar Sdata[7];
main()
{
  P1DIR=0xff;P1OUT=0xff;
  P2DIR=0xff;P2OUT=0xff;
  P3DIR=0xff;P3OUT=0xff;
  P4DIR=0xff;P4OUT=0xff;
  P5DIR=0xff;P5OUT=0xff;
  P6DIR=0xff;P6OUT=0xff;
 
 
  WDTCTL=WDTPW+WDTHOLD;
 
  BCSCTL1&=~XT2OFF;//打开外部晶体振荡器XT2
  do
  {
    for(uchar i=0;i<0xff;i++) _NOP();//等待至少50us,等外部晶体震荡器正常工作
    IFG1 &= ~OFIFG;//清除晶体震荡器失效标志OFIFG标志
  }while(IFG1 & OFIFG);//检测晶体震荡器失效标志OFIFG
 
  BCSCTL2|=SELM_2+SELS;//Smclk=Mclk
 
 
  CCR0=60000;//60ms
  CCTL0=CCIE;
  TACTL=TASSEL_2+ID_3+MC_1+TACLR+TAIE;//定时器A时钟为smclk,8分频,增计数模式,TAR清零,溢出中断允许
  //向存储块内写入数据
 
  //读一个数据
  //发送一个数据
  //清除一个数据
  init_EEPROM();//初始化I2C端口
  Uart_Init();//串口初始化

  Reset_DS1302();//时钟复位
 
  _EINT();//
  LPM0;//
  while(1)
  {
    ;
  }
}
void execution()
{
    BurstRead1302(rdata);
    for(uchar i=0;i<7;i++)
    {
      write_add(ye,addr,rdata[i]);
      addr++;
      if(addr==0xff)//存储块分4页,当前页写满之后,写入下一页
      {
        ye++;
        if(ye>=3)//共4页:0,1,2,3
          ye=0;
      }
    }
    if(ye==0)
    {
      ye=0;addr=0x00;
      for(uchar i=0;i<7;i++)
      {
        Sdata[i]=read_add(ye,addr);//读出指定地址的数据
        write_add(ye,addr,0x00);//发送完之后立即清除
        addr++;
      }
      PutData(Sdata);
    }
}
#pragma vector=TIMERA0_VECTOR
__interrupt void timerA_ISR()
{
  time++;
  if(time>=10)
  {
   // LPM0_EXIT;
   
    execution();
    time=0;
  }
}

 

 

下边是RS232.c

/***************************************
向PC机发送字符串
****************************************/
void PutString (uchar *str)
{
  while(*str != '\0')
  {
    while(!(IFG1 & UTXIFG0));//检测缓冲区是否空闲
    TXBUF0 = *str++;//将要发送的字符存入缓冲区发送数据
  }while(!(IFG1 & UTXIFG0));
  TXBUF0='\n';//回车换行
}
/***************************************
向PC机必送数据
****************************************/
void PutData(uchar *data)
{
  for(uchar i=0;i<7;i++)
  {
    while(!(IFG1&UTXIFG0));
    TXBUF0=data[i];
  } 
}
/***************************************
串口初始化
****************************************/
void Uart_Init()
{
  P3SEL |= 0x30;//P3.4 P3.5为Uart的TXD RXD
  ME1 |= URXE0 + UTXE0;//使能UART的TXD RXD
  UCTL0 |= CHAR;//数据传输8位
  UTCTL0 = SSEL1;//

  UBR00 = 0x00;
  UBR10 = 0x6D;//波特率9600,串口时钟为32K,误差为3.41
  UMCTL0 = 0x03;
  UCTL0 &= ~SWRST;
 
 
}

 


专家
2014-09-25 15:12:43    评分
7楼

溢出的话,将编译程序的时候将空间设置的大点。

你串口是R  T GND都连接上了吗?


助工
2014-09-25 15:21:54    评分
8楼

接收发送地都连上了,溢出是因为中断我用不好,这方面还请您指点下,

现在不用中断可以发送出去数据了,


专家
2014-09-25 15:24:19    评分
9楼
那问题就出现在中断了。

助工
2014-10-06 16:42:36    评分
10楼

请问用中断有什么技巧吗,为什么我每次都用不好中断呢,


共12条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]