谁有《MSP430_系列_单片机_系统工程_设计与_实践》 共享下。谢谢!!!
谁有《MSP430_系列_单片机_系统工程_设计与_实践》 共享下。谢谢!!! 看来真没有 本坛搜搜吧。记得有人发过好多本MSP430的书。 回复【2楼】jjj206本坛搜搜吧。记得有人发过好多本msp430的书。
-----------------------------------------------------------------------
呵呵~~就没有这本书,今天无意间在书店发现这本书,大概看了下,写的非常不错。就想找找有pdf没。我还是明天去买本回来吧。 这段是这本书上高效串口部分。
2. 增强型异步通信
1. 串口在多机中的应用
2. 为了能随时写串口,且不阻塞CPU运行,通常做法是用软件实现一个FIFO来作为高速的数据填入与低速的数据发送之间的缓冲。
实例程序
#include <msp430x42x.h>
#define TXBUF_SIZE 32 //发送FIFO的最大容量
Unsigned char TX_BUFF; //发送FIFO缓冲区数组
Unsigned int UART_OutLen=0; //发送FIFO内待发出的字节数
Unsigned int TX_IndexR=0; //发送FIFO的读指针
Unsigned int TX_IndexW=0; //发送FIFO的写指针
/*******************************
*名称:UART0_PutChar()
*功能:从串口发送1字节数据(向缓冲队列内填入1字节待发送数据)
*入口参数:Chr:待发送的字节
*出口参数:返回1表示发送成功
返回0表示发送失败
*说明: 发送过程中,不阻塞CPU运行
*******************************/
Char UART0_PutChar(unsigned char Chr)
{
If(UART_OutLen == TXBUF_SIZE) //如果FIFO已满
{
Return(0);
}
If(UART_OutLen==0) //如果是第一字节(之前FIFO是空的)
{
IFG1|=UTXIFG0; //人为制造第一次中断条件(置中断标志位)
}
_DINT(); //涉及FIFO操作时不允许中断,以免指针错乱
UART_OutLen++;
TX_BUFF=Chr; //待发送数据通过写指针写入FIFO
If(++TX_IndexW>TXBUF_SIZE) //写指针递增,且判断是否下标越界
{
TX_IndexW=0;
}
IE1|=UTXIE0; //开启UART0的发送,在中断内依次发送数据
_EINT();
Return(1);
}
#progma vector=UART0TX_VECTOR
__interrupt void UART0_TX(void) //串口发送中断
{
If(UART_OutLen>0)
{
UART_OutLen--;
U0TXBUF=TX_BUFF;
If(++TX_IndexR >= TXBUF_SIZE)
{
TX_IndexR=0;
}
}
Else IE1&=~UTXIE0; //如果数据发生完毕则关闭UART0的发送中断,停止发送
}
Void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
FLL_CTL0 |= XCAP18PF;
U0CTL=CHAR;
ME1|=UTXE0+URXE0;
U0TCTL|=SSEL0;
U0BR1=0;
U0BR0=13;
U0MCTL=0x6B;
P2SEL|=BIT4+BIT5;
_EINT();
While(1)
{
UART0_PutChar(0x01);
UART0_PutChar(0x02);
UART0_PutChar(0x03);
UART0_PutChar(0x04);
UART0_PutChar(0x05);
}
}
页:
[1]