需要硬件:USB转TTL
TTL插电脑 ,再杜邦线连接430
现象:串口助手显示01 02 03 04 05 06 07 08
直接上代码
/*************************
发送数据帧的程序
利用发送中断,发送过程不阻塞CPU继续执行后续代码
Author:七禾页8
site:创客基地
缺点:必须整帧地发送数据。
需要将一次发送的数据都先整理完毕才能启动发送,
且必须等待上一帧发完才能启动下一帧的发送,
不能在程序中随时地按字节发送数据
**************************/
#include "msp430x14x.h"
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
#define TXBUF_SIZE 32 //一帧最多能发送的数据字节数
unsigned char TX_BUFF[TXBUF_SIZE]; //发送缓冲区
unsigned char TX_NUM; //发送字节总数变量
unsigned char TX_CNT; //发送字节计数变量
/*******************************
*名称:UART0_PutFrame()
*功能:从串口发送1帧数据
*入口参数:Ptr:待发送数组的首地址(数组名)
Lenth:数据帧长度
*出口参数:返回1表示成功
返回0表示失败
*说明:发送过程中,不阻塞CPU运行
********************************/
char UART0_PutFrame(unsigned char*Ptr,unsigned int Lenth)
{
int i;
if(IE1 & UTXIE0)
return (0); //如果上一帧没发送完,返回0
if(Lenth>TXBUF_SIZE)
return(0); //长度超过最大缓冲区,返回0
for(i=0;i<Lenth;i++)
{
TX_BUFF[i]=Ptr[i]; //待发送数据装填进入发送缓冲区
}
TX_CNT = 0; //发送字节数清0
TX_NUM = Lenth; //发送字节总数
IFG1 |= UTXIFG0; //人为制造第一次发生中断
IE1 |= UTXIE0; //允许UART0的发送中断
return(1); //返回发送成功
}
/*************************
发送中断
**************************/
#pragma vector = UART0TX_VECTOR
__interrupt void UART0_TX(void) //串口发送中断
{
U0TXBUF = TX_BUFF[TX_CNT]; //将本次应该发送的数据送入TXBUF
TX_CNT++; //下一次 依次发送后续字节
if(TX_CNT >= TX_NUM) //发送字节计数到达发送总数
{
IE1 &= ~UTXIE0; //禁止UART0的发送中断,停止发送
}
}
/********************
时钟初始化
***********************/
void BCS_Init()
{
uchar j;
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
//使用外部高频晶体振荡器
BCSCTL1&=~XT2OFF; //使用外部XT2晶振8M
do{
IFG1&=~OFIFG;
for(j=0XFF;j>0;j--);
}while((IFG1&OFIFG)); //等待晶振震荡平稳
BCSCTL2|=SELM_2; //MCLK选择XT2
}
/********************
IO初始化
***********************/
void IO_Init()
{
P3DIR|=BIT4; //P3.4 UTXD0设置为输出
P3DIR&=~BIT5; //P3.5 URXD0设置为输入
P3SEL|=BIT4+BIT5; //开启第二功能 (通信功能)
}
/********************
通信初始化
***********************/
void communication_Init()
{
ME1 |= UTXE0 + URXE0; // 使能USART0收发
UCTL0 |= CHAR + SWRST; // 8-bit 数据,一位停止位 SWRST=1 设置串行口
UTCTL0 |= SSEL0; // 选择时钟,UCLK = ACLK,32768
UBR00 = 0x03; // 32k/9600选择ACLK
UBR10 = 0x00; //
UMCTL0 = 0x4a; // Modulation
UCTL0 &= ~SWRST; // 初始化UART0状态机,一般要设置好串口之后才复位
P2DIR |= BIT0;
/*************在初始化代码中增加下面两句*************/
IE1 |= URXIE0 + UTXIE0; // URXIE0允许接收中断 + UTXIE0允许发送中断
_EINT(); //总中断允许
}
void main( void )
{
uchar TxTestBuff[8]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
BCS_Init(); //时钟初始化
IO_Init(); //IO初始化
communication_Init(); //通信初始化
while(1)
{
UART0_PutFrame(TxTestBuff,8); //发送一个长度约为8B的数据帧
__delay_cycles(10000000); //约一秒发送一次
}
}