关于MSP430F249中的UART1模块

2019-03-24 14:06发布

我在学习MSP430F249,使用IAR For MSP430 v5.3,仿真环境Proteus7.9,在使用UART0时可以正常好收发数据,但是在使用UART1的时候,就不知道为什么不行了,下面是详细的代码,麻烦各位帮忙看一下看有什么问题?
#include "io430.h"// #include "UART_lib.h"
/*===============================全局变量定义============================*/unsigned char seg7[]={/*0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F,-,共阴极数码管*/ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x40, };
/*===============================函数定义================================*//*----------------------------------------------------------------------------/ 函数功能: 设置内部1MHz时钟/ 参数: 无/----------------------------------------------------------------------------*/void SetInternalClock1MHz(){ if(CALBC1_1MHZ == 0xFF || CALDCO_1MHZ == 0xFF) { while(1);                           // If calibration constants erased                                            // do not load, trap CPU!! }    BCSCTL1 = CALBC1_1MHZ;                  // Set DCO DCOCTL = CALDCO_1MHZ;}
/*----------------------------------------------------------------------------/ 函数功能: 设置UART1 源时钟/ 参数: 源时钟clk1/----------------------------------------------------------------------------*/void SetBaudRateSourceClock1(unsigned char clk1){ /*UART0 Mode*/ switch(clk1) //波特率时钟源BRclk1 { case 'u' :  case 'U' : UCA1CTL1 |= UCSSEL_0; break; // 外部UCLK case 'a' : case 'A' : UCA1CTL1 |= UCSSEL_1; break; // 内部ACLK case 's' :  case 'S' : UCA1CTL1 |= UCSSEL_2; break; // 内部SMCLK default : break; }}
/*----------------------------------------------------------------------------/ 函数功能: 设置UART1 波特率/ 参数: 源时钟clk1, 波特率baud1/----------------------------------------------------------------------------*/void SetBaudRate1(unsigned char clk1,unsigned int baud1){ UCA1BR0 = 104; UCA1BR1 = 0; UCA1MCTL = 1 << 1;}
/*----------------------------------------------------------------------------/ 函数功能: UART1初始化/ 参数: 源时钟clk1, 波特率baud1/----------------------------------------------------------------------------*/void UART1_init(unsigned char clk1,unsigned int baud1){ UCA1CTL1 |= UCSWRST; // USART Hold Reset P3SEL |= 0xc0;                   // P3.6, P3.7 = USCI_A1 TXD/RXD SetBaudRateSourceClock1('s'); //波特率源时钟 SMCLK SetBaudRate1(clk1,baud1); //源时钟clk1,波特率baud1 UCA1CTL1 &= ~UCSWRST;           // **Initialize USCI state machine** UC1IE |= UCA1RXIE;              // Enable USCI_A1 RX interrupt UC1IE |= UCA1TXIE;}

int main( void ){ // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD;
SetInternalClock1MHz(); //使用内部8MHz时钟 UART1_init(1,96); //UART1初始化, 源时钟1MHz, 波特率9600 P5DIR=0xff; // P5端口数据方向输出 P5OUT=seg7[0]; // __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled}
/*================================中断函数=======================================*//*-------------------------------UART1中断函数-----------------------------------*//*UART1接收数据中断函数*/#pragma vector=USCIAB1RX_VECTOR__interrupt void USCI1RX_ISR(){ if((UC1IFG&BIT0) == UCA1RXIFG) { if(UCA1RXBUF <= '9') //接收缓冲器中存储的是接收数据的ASCII码 P5OUT=seg7[UCA1RXBUF-'0']; else P5OUT=seg7[UCA1RXBUF-'0'-7]; UC1IE |= UCA1TXIE; //开启发送数据中断使能 }}
/*UART1发送数据中断函数*/#pragma vector=USCIAB1TX_VECTOR__interrupt void USCI1TX_ISR(){ // if((UC1IFG&BIT1) == UCA1TXIFG) // { // UCA1TXBUF = 32; //将输入的数据输出到终端中 // UC1IE &= ~UCA1TXIE; //关闭发送数据中断使能 // } UCA1TXBUF = 32; //将输入的数据输出到终端中}
QQ截图20120707190004.jpg
此帖出自小平头技术问答
0条回答

一周热门 更多>

相关问题

    相关文章