这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » MSP单片机的设计与实践(三)

共1条 1/1 1 跳转至

MSP单片机的设计与实践(三)

助工
2014-10-05 22:34:30     打赏
16位定时器Timer_A


         1.分频系数不等于1时候TACTL|=TACLR与TAR=0清零的不同。


         2. Timer_A定时器的应用


                   1.周期性定时


                   2.比较模块应用


                   3.测量时间间隔


                   4.计数器应用


                   5.PWM闭环应用


                   6.作为DAC应用—如果将PWM调制波进行低通滤波,取出其直流分量(平均值),滤波后的输出将正比于PWM的占空比。根据这个原理可以利用PWM输出作物额低速DAC使用。例如产生正弦波。


                   7捕获模式的应用


2. 增强型异步通信


         1. 串口在多机中的应用


         2. 为了能随时写串口,且不阻塞CPU运行,通常做法是用软件实现一个FIFO来作为高速的数据填入与低速的数据发送之间的缓冲。


实例程序        

#include <msp430x42x.h>


#define     TXBUF_SIZE     32     //发送FIFO的最大容量


Unsigned char TX_BUFF[TXBUF_SIZE];   //发送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[TX_IndexW]=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[TX_IndexR];


         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);


}


}

 


3.      串口在超级终端中的应用—scanf()与printf()函数在单片机与超级终端交互中的应用


         这个我会在上位机调制单片机中写出来。2中串口调试的方法。



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]