msp430简单串口程序求解答~!!

msp430简单串口程序求解答~!!,第1张

IE2|=UCA0RXIE//开接收使能

这行 *** 作没变吗?可能性有几个,第一是你看寄存器值的时间不对,要在这条指令做完,也就是游标已经移到下一条指令时,才能看到IE2的变化;第二是,|= *** 作是只改变UCA0RXIE对应位的,只有相关的位改变,而如果原来就已经是这个值,它就不会发生改变。

首先写发送程序,必须要使发送接收模块被允许,所以必须ME1 |= UTXE0 + URXE0该语句必须要写。其次发送接收都是高频的,故要将晶振设为高频,然后再对各个寄存器最一下必要的设置。 USART控制寄存器的组成部分:PENA,PEV,SP,CHAR,Listen,SYNC,MM,SWRST 各位都有其 *** 作功能,我列举几个我觉得比较重要的 首先看SYNC: 串口发送主要可分为异步的UART模式,和同步的SPI模式,即由SYNC来控制, SYNC:“0”UART模式 “1”SPI模式 CHAR:“0”选择字符以7位发送,不用接收缓存寄存器URXBUF或发送缓存寄器UTXBUF的最高位 “1”选择字符以8位发送 SWRST: 置位时,USART的各中断允许初始化,直至复位时USART才被允许。 发送控制寄存器UTCTL亦类似,对各个位做必要的设置就可以得到你想要的结果。UTCTL8位由高到低分别为:未用,CKPL,SSEL1,SSEL0,URXSE,TXWake,未用,TXEPT。还有接收控制寄存器URCTL0和URCTL1详情可以参照书本。 另有一个比较重要的就是波特率计算,用到UBR0及UBR1波特率寄存器以及调整控制寄存器UMCTL.具体计算为:UBR,UBR1和UBR0的16位数据 Mx ,调整器的各位数据 波特率=时钟周期/(UBR+(M7+M6+…+M0)/8) 贴上一个简单的程序: #include void main(void) { volatile unsigned int iWDTCTL = WDTPW + WDTHOLD// 关闭开门狗 P3SEL |= 0x30// P3.4,5 = USART0 TXD/RXD BCSCTL1 |= XTS// ACLK= LFXT1,LFXT1高频工作 do { IFG1 &= ~OFIFG// Clear OSCFault flag for (i = 0xFFi >0i--)// Time for flag to set } while ((IFG1 &OFIFG))// OSCFault flag still set? BCSCTL2 |= SELM_3// MCLK = LFXT1 (safe) ME1 |= UTXE0 + URXE0// Enable USART0 TXD/RXD UCTL0 |= CHAR// 8-bit character UTCTL0 |= SSEL0// UCLK= ACLK UBR00 = 0x45// UBR10 = 0x00// UMCTL0 = 0x00// 波特率计算 UCTL0 &= ~SWRST//初始USART IE1 |= URXIE0// Enable USART0 RX interrupt _BIS_SR(LPM0_bits + GIE)// Enter LPM0 w/ interrupt } #pragma vect


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7891848.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存