tangwei039 发表于 2011-6-30 18:00:38

谁有《MSP430_系列_单片机_系统工程_设计与_实践》 共享下。谢谢!!!

谁有《MSP430_系列_单片机_系统工程_设计与_实践》 共享下。谢谢!!!

tangwei039 发表于 2011-6-30 18:33:13

看来真没有

jjj206 发表于 2011-6-30 19:13:28

本坛搜搜吧。记得有人发过好多本MSP430的书。

tangwei039 发表于 2011-6-30 20:11:03

回复【2楼】jjj206
本坛搜搜吧。记得有人发过好多本msp430的书。
-----------------------------------------------------------------------

呵呵~~就没有这本书,今天无意间在书店发现这本书,大概看了下,写的非常不错。就想找找有pdf没。我还是明天去买本回来吧。

tangwei039 发表于 2011-6-30 22:27:34

这段是这本书上高效串口部分。

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]
查看完整版本: 谁有《MSP430_系列_单片机_系统工程_设计与_实践》 共享下。谢谢!!!