单片机串口通讯
发送代码
MSP430单片机。
程序一直卡死在 while((IFG2 & UTXIFG1)==0);这一句。数据不能发送出去。
下面是接收代码
程序一直卡死在while(1){};进不了中断,接收不到数据。
我做的是两个单片机串口通信,一个发送,一个接收。
帮忙看下哪儿错了,谢谢了!
#include "msp430x14x.h"
#define uchar unsigned char
#define uint unsigned int
#define URXD1 BIT7
#define UTXD1 BIT6
uchar dataSedBuffer[100]={"123"}; //发送数据缓存区
uchar redySedLen = 4; //准备发送的数据的总长度,包括'\0'
uchar curtSedLen = 0; //当前已经发送的数据的长度
void Delay_us(uint count)
{
while(count-- ){_NOP();_NOP();_NOP();}
}
void Init_clk()
{
uchar i;
WDTCTL = WDTPW +WDTHOLD;
BCSCTL1 &= ~XT2OFF; //8MHz
BCSCTL2 &= SELM1 +SELS;
do
{
IFG1 &= ~OFIFG;
for(i=0;i<100;i++);
}while((IFG1 & OFIFG)!=0);
IFG1 &= ~OFIFG;
}
void Init_usart()
{
U1CTL = SWRST;
U1CTL |= CHAR; //8位数据
U1TCTL |= SSEL1; //时钟SMCLK
U1BR0 = 0x45;
U1BR1 = 0x00; //波特率115200
U1MCTL = 0x00; //小数不设置
ME2 |= UTXE1; //使能UART1的发送
U1CTL &= ~SWRST;
P3SEL |= UTXD1; //端口功能设置为第二功能
}
void main()
{
Init_clk();
Init_usart();
while(1)
{
U1TXBUF = dataSedBuffer[curtSedLen];
if(curtSedLen >= redySedLen)
{
curtSedLen = 0;
Delay_us(60000);
}
while((IFG2 & UTXIFG1)==0);
}
}
MSP430单片机。
程序一直卡死在 while((IFG2 & UTXIFG1)==0);这一句。数据不能发送出去。
下面是接收代码
#include "msp430x14x.h"
#define uchar unsigned char
#define uint unsigned int
#define URXD1 BIT7
uchar dataRecBuffer[100]; //接收数据缓存区
uchar saveRecLen = 0; //最后存储收到数据的总长度
uchar curtRecLen = 0; //当前收到的数据长度
void Delay_us(uint count)
{
while(count-- ){_NOP();};
}
void Init_clk()
{
uchar i;
WDTCTL = WDTPW +WDTHOLD;
BCSCTL1 &= ~XT2OFF; //8MHz
BCSCTL2 &= SELM1 +SELS;
do
{
IFG1 &= ~OFIFG;
for(i=0;i<100;i++);
}while((IFG1 & OFIFG)!=0);
IFG1 &= ~OFIFG;
}
void Init_usart()
{
U1CTL = SWRST;
U1CTL |= CHAR; //8位数据
U1TCTL |= SSEL1; //时钟SMCLK
U1BR0 = 0x45;
U1BR1 = 0x00; //波特率115200
U1MCTL = 0x00; //小数设置
ME2 |= URXE1; //使能UART1的发送和接收
U1CTL &= ~SWRST;
IE2 |= URXIE1; //UART1接收中断使能
P3SEL |= URXD1; //端口功能设置为第二功能
}
#pragma vector = UART1RX_VECTOR
__interrupt void UART1_RX_ISR(void)
{
dataRecBuffer[curtRecLen] = RXBUF1; //接收数据
curtRecLen += 1;
if(dataRecBuffer[curtRecLen-1] == 13 ||dataRecBuffer[curtRecLen-1] == 0) //接收到ENTER(换行)符
{
saveRecLen = curtRecLen-1; //保存收到的总长度
curtRecLen = 0;
}
}
void main()
{
Init_clk();
Init_usart();
_EINT();
while(1){};
}
程序一直卡死在while(1){};进不了中断,接收不到数据。
我做的是两个单片机串口通信,一个发送,一个接收。
帮忙看下哪儿错了,谢谢了!
...全文
相关推荐
单片机串口通讯RXD与TXD对接
相信很多人都对单片机与计算机或者芯片通信时,RXD与TXD如何连接比较困惑。因为在一些电路图中,有的是直连接法,有的是交叉接法,让人有点摸不着头脑。
51单片机串口通讯汇编代码
基于51单片机的汇编语言写的串口通讯代码,经测试,有用.
单片机串口通讯RXD与TXD连接方法
本文主要讲了单片机串口通讯RXD与TXD连接方法,希望对你的学习有所帮助。
单片机与PC机串口通讯仿真_串口通讯_C51_51单片机_proteus_51串口仿真_
基于51单片机的串口通讯的仿真,使用protues作为仿真工具,采用C语言,是学习51单单片机串口通讯和protues仿真非常好的资料!
c#实现的串口通讯软件(上位机与单片机进行通讯)
实现上位机(PC机)与下位机(单片机)之间进行通讯,通过串口发送数据命令控制下位机端,使两者可以进行信息相互传达!


单片机/工控
