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中串口调试的方法。
我要赚赏金
