搜索
bottom↓
回复: 0

帮忙看看这个程序-试用UART不成功

[复制链接]

出0入0汤圆

发表于 2012-5-26 08:47:53 | 显示全部楼层 |阅读模式
芯片是CC430F5137,板子是利尔达的评估板,硬件应该没有问题,修改一个样例程序,实际测试:单片机发送数据没有问题,可就是接收不行。按照程序逻辑,计算机发一个字节,单片机就返回一个字节,可实际测试发现,单片机总也不中断,不知道为什么。恳请帮忙指导一下。

#define  LED_RBIT           6
#define  LED_GBIT           7
#define  LED_DIR            P2DIR
#define  LED_OUT            P2OUT
#define  LED_SEL            P2SEL
#define  LEDR_ON()          LED_OUT|=(1<<LED_RBIT)
#define  LEDG_ON()          LED_OUT|=(1<<LED_GBIT)
#define  LEDR_OFF()         LED_OUT&=~(1<<LED_RBIT)
#define  LEDG_OFF()         LED_OUT&=~(1<<LED_GBIT)

#include "cc430x513x.h"

void Delay();
void InitChip();


void main(void)
{
  InitChip();
  while(1)
  {
    LEDR_ON();
    Delay();
    LEDR_OFF();
    Delay();
  //__bis_SR_register(LPM3_bits + GIE);       // Enter LPM3, interrupts enabled
    __no_operation();                         // For debugger
    //UCA0TXBUF=0x38;                    如果加上这条语句,计算机上可以收到数据0x38
  }
}

// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
  switch(__even_in_range(UCA0IV,4))
  {
  case 0:break;                             // Vector 0 - no interrupt
  case 2:                                   // Vector 2 - RXIFG
    while (!(UCA0IFG&UCTXIFG));             // USCI_A0 TX buffer ready?
    UCA0TXBUF = UCA0RXBUF;                  // TX -> RXed character
    LEDG_ON();
    break;
  case 4:
    LEDG_ON();
    break;                             // Vector 4 - TXIFG
  default: break;
  }
}

void Delay()
{
    unsigned short intInx;
    unsigned short intCnt;

    for(intInx=0;intInx<100;intInx++)
      for(intCnt=0;intCnt<800;intCnt++);
}

void InitChip()
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  // Set up LEDs
  LED_OUT&=~((1<<LED_RBIT)|(1<<LED_GBIT));    // LED端口输出0
  LED_DIR|=(1<<LED_RBIT)|(1<<LED_GBIT);       // LED端口方向设置为输出

  PMAPPWD = 0x02D52;                        // Get write-access to port mapping regs
  P1MAP5 = PM_UCA0RXD;                      // Map UCA0RXD output to P1.5
  P1MAP6 = PM_UCA0TXD;                      // Map UCA0TXD output to P1.6
  PMAPPWD = 0;                              // Lock port mapping registers

  P1DIR |= BIT6;                            // Set P1.6 as TX output
  P1SEL |= (BIT5 + BIT6);                     // Select P1.5 & P1.6 to UART function

  UCA0CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCA0CTL1 |= UCSSEL_1;                     // CLK = ACLK
  UCA0BR0 = 0x03;                           // 32kHz/9600=3.41 (see User's Guide)
  UCA0BR1 = 0x00;                           //
  UCA0MCTL = UCBRS_3+UCBRF_0;               // Modulation UCBRSx=3, UCBRFx=0
  UCA0IE |= UCRXIE;                         // Enable USCI_A0 RX interrupt
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  _EINT();
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-6 10:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表