MSP430笔记3——串口发送数据

发布者:西周以前的最新更新时间:2022-09-26 来源: csdn关键字:MSP430  串口  发送数据 手机看文章 扫描二维码
随时随地手机看文章

通用串行通信接口 UART模式

串口调试助手: 串口号;波特率 ;校验位(无校验); 数据位(8);停止位(1)(后三位默认即可)


USCI——Ax模块:UART、SPI模式

USCI——Bx模块


UART模式:

在异步模式中,USCI_Ax模块通过两个外部引脚,UCAxRXD(发送数据线)和UCAxTXD(接受数据线)(记得共地),把MSP430和一个外部系统连接起来。 当UCSYNC位被清零时就选择了UART模式

设置波特率

UCAxCTL0,USCI_Ax寄存器

UACxBR0,USCI_Ax波特率控制寄存器


定时器模式选择

时钟内部

计数模式

四种

向上

连续:即使时间固定值

加减:定时周期为2倍

定时器模式

工作模式

两种:捕捉/比较


三种用途:定时、产生PWM波(脉冲宽度调制)、测量频率(两个信号时间间隔)

<一>定时功能

1、查询实现定时功能


/*查询实现定时功能*/


#include  

#include "stdint.h"

/*

 * main.c

 */

int main(void)

{

uint8_t cnt = 0;            //定义一个变量

    WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer

/*配置DCO频率为1MHz*/

    DCOCTL = CALDCO_1MHZ;

    BCSCTL1 = CALBC1_1MHZ;

   

    /*设置P1.6为输出*/

    P1DIR |= BIT6;


    /*设置时钟源为SMCLK*/

    TA1CTL |= TASSEL_2;   // TASSEL_2为选择SMCLK

    /*TACLK默认为A0;A1要打出来*/

    /*设置工作模式为Up Mode*/

   

    TA1CTL |= MC_1;     //Up Mode模式下,16bit Timer计数器 TAR会从0递增到TACCR0,然后回到0,重复这个过程

    

    /*设置定时间隔*/

    TA1CCR0 = 49999;       //1MHz 计 50000个数,1/1MHz * 50000 20Hz 0.05s

    /*采用TACCR0 CCIFG标志位则产生+1个数即50000;TAIFG标志位则是本身*/

    /*默认比较工作模式,捕捉模式不能用来计时*/

    

    while(1)

    {

    if(TA1CTL & TAIFG)     //TAIFG为标志位;查询方式实现计数

    {

    cnt ++;             //计数器变量

    TA1CTL &= ~TAIFG;   //清除标志位

    if(cnt == 20)       //0.05s * 20 = 1s

    {

    P1OUT ^= BIT6;

    cnt = 0;

    }

    }

    }

return 0;

}


2、中断法实现定时功能


#include  

#include "stdint.h"

/*

 * main.c

 */

uint8_t flag = 0;


int main(void)

{

    WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer

    InitSystemClock();

    InitUART();

    /*设置P1.6为输出*/

    P1DIR |= BIT6;


    /*设置时钟源为SMCLK*/

    TA1CTL |= TASSEL_2;

    /*设置工作模式为Up Mode*/

    TA1CTL |= MC_1;

    /*设置定时间隔*/

    TA1CCR0 = 49999;// 50ms 1MHz 1/1MHz 1ns 50ms / 1ns = 50000 50000 - 1 = 49999


    /*开启TAIFG中断,相当于一个溢出中断*/

    TA1CTL |= TAIE;

    /*打开全局中断*/

    __bis_SR_register(GIE);

    while(1)

    {

    if(flag == 1)

    {

    flag = 0;

    P1OUT ^= BIT6;

    PrintTime(currenttime);

    }

    }

return 0;

}


<二>PWM波的输出

利用比较模式(CAP=0)TAR计数到TACCRx时,输出管脚由内部信号EQUx决定

输出单元

几种模式:输出/置位set/翻转goggle/复位reset(若为两个描述则 捕捉比较寄存器/最大值,可用于调整占空比,产生PWM波;若为一个描述则 捕捉比较寄存器)

捕捉比较寄存器TACCRx从对应管脚x输出


代码实例


/*输出产生PWM波*/

#include  


/*

 * main.c

 */

int main(void)

{

unsigned int cnt = 0;

    WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer

/*配置DCO频率为1MHz*/

    DCOCTL = CALDCO_1MHZ;

    BCSCTL1 = CALBC1_1MHZ;

    /*初始化P1.6为输入*/

    P1DIR &= ~BIT6;


    /*设置时钟源为SMCLK*/

    TA1CTL |= TASSEL1;

    /*设置工作模式为Up&Down*/

    TA1CTL |= MC0|MC1;

    /*设置TA1CCR0为0x00FF*/

    TA1CCR0 = 0x00FF;

    /*设置TA1CCR2为0x00FF*/

    TA1CCR2 = 0x00FF;  //占空比(TACCR0 - TACCR2) / TACCR0(由于是up/down模式,看半个周期即可);频率=SMCLK/(TACCR0+1)/2 

    /*改变占空比可以改变TACCR0/TACCR2,但改变前者会影响频率,故改变后者*/

    /*设置为比较模式*/

    TA1CCTL0 &= ~CAP;

    TA1CCTL2 &= ~CAP;

    /*设置比较输出模式*/

    TA1CCTL2 |= OUTMOD_6;  //模式6为Toggle/Set

    /*设置IO复用*/

    P2SEL |= BIT5;

    P2DIR |= BIT5;

    /*到此为止输出占空比为0%*/

    while(1)

    {

    for(cnt = 0;cnt < 0x00FF;cnt ++)

    {

    TA1CCR2 = cnt;

    __delay_cycles(5000);   //值增大,占空比减小

    }

    for(cnt = 0x00FF;cnt > 0;cnt --)

    {

    TA1CCR2 = cnt;

    __delay_cycles(5000);   //值减小,占空比增加

    }

    }

return 0;

}

关键字:MSP430  串口  发送数据 引用地址:MSP430笔记3——串口发送数据

上一篇:基于MSP430G2553的模拟风扇控制系统
下一篇:MSP430笔记4——定时器

推荐阅读最新更新时间:2024-11-04 17:41

c51模拟串口
在电路设计当中,经常会感觉控制器mcu的串口sci数量太少,一般mcu的sci数量不会超过3个(其实包含有3个的就是很多的了)。要想使用更多的串口sci,就得选用硬件串口uart扩展芯片或者采用软件协议利用一般的端口来模拟sci协议。利用软件模拟的方法是最廉价的设计方法。现在把c51模拟串口sci的程序提供出来,供大家享用。 /********************************************** IO 口模拟232通讯程序,频率9600 占用定时器0 **********************************************/ #i nclude MAIN.h #i nclude
[单片机]
神舟IV学习笔记(三)蜂鸣器与串口1打印
今天多学习几个模块,首先是蜂鸣器。板上所用的是无源蜂鸣器,可以用直流电压直接驱动。还有一种叫有源蜂鸣器,要使用频率的方波才能驱动。 使用的蜂鸣器的驱动电压,典型值为5V,额定工作电流为30mA。STM32的GPIO管脚绝大多数能承受5V的电压,但是承受的电流最多为25mA,还需要使用三极管将电流放大,并且采用了一个限流电阻。我们把与蜂鸣器的GPIO设置为推挽输出,当输出1时,蜂鸣器响。当输出0时蜂鸣器灭。下面是我封装的文件: BEEP.C #include beep.h void BEEP_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2P
[单片机]
神舟IV学习笔记(三)蜂鸣器与<font color='red'>串口</font>1打印
MSP430F247串口发送字符串并接受PC机发来的并送回电脑显示
//****************************************************************************** // MSP430x24x Demo - USCI_A0, 9600 UART Echo ISR, DCO SMCLK // // 实验效果说明:首先发送一个数组的数据到PC,然后接受PC发送来的数据,在发送到 // PC机上。 // Baud rate divider with 1MHz = 1MHz/9600 = ~104.2 // ACLK = n/a, MCLK = SMCLK = CALxxx_1MHZ = 1MHz // //
[单片机]
STM32F103标准库开发---Uart串口通信实验---printf()函数重定向
一、printf()函数重定向 方法一:使用MicroLIB库 1. 勾选 Use MicroLIB 具体如下图所示: 2. 重定向 fputc 函数 具体代码如下: #include stdio.h //需要调用stdio.h文件 /**********************printf重定向****************************/ int fputc(int ch, FILE *f) { USART_SendData(USART1, ch); //发送数据 while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);//等待发送完
[单片机]
STM32F103标准库开发---Uart<font color='red'>串口</font>通信实验---printf()函数重定向
MSP430与ATMEL 93C46通讯子程序
/* ;Discription:本程序为ATMEL93C46与MSP430通讯程序 1。管脚连接如下: 93C46 MSP430 CS P4。0 CK P4。1 DI P4。2 DO P4。3 2。晶振:4/8M晶振,4M晶振4分频,选择8M时8分频,选择XT2为MCLK 3。Date:2006.03.23,Write by: Benny Chen */ #define CS_93C46_LOW P4OUT &= ~0x01 #define CS_93C46_HIGH P4OUT |= 0x01 #define SK_93C46_LO
[单片机]
stm32f103——串口UART
在学习UART之前,我们先来了解一下单片机与外围设备之间的通信: 单片机与外围设备之间的信息交换和传输我们称为通信。过去通信方式有两种:并行通信和串行通信。 并行通信: 定义:并行通信是指利用多条传输线将一个数据的各位同时传送。 传输方式:传输一个字节(8个位)的数据时,并口是将8个位一字排开,分别在8条连接线上同时传输。 特点:传输速度块,适用于短距离通信。 缺点:虽然,并行通信传输速度快,但是由于,线与线之间存在电磁干扰,会导致数据错误。而且由于线比较多,PCB布线比较麻烦,所以并行通信不常用,而串行通信用得比较广泛。 串行通信: 定义:串行通信是指利用一条传输线将数据一位位地顺序传送。 传输方式:传输一个字节(8
[单片机]
stm32f103——<font color='red'>串口</font>UART
STM32的串口配置(中断方式)
STM32的串口中断配置,也是很简单的. 首先是配置UART的GPIO口 首先是配置UART的GPIO口 /********************************************** * Name : UART1_GPIO_Configuration * Deion : Configures the uart1 GPIO ports. * Input : None * Output : None * Return : None **********************************************************/ void UART1_GPIO_Configur
[单片机]
嵌入式系统中串口通信帧的同步方法
引 言 串口通信是日前单片机和DSP等嵌入式系统之间,以及嵌入式系统与PC机或无线模块之间的一种非常重要且普遍使用的通信方式。在嵌入式系统的硬件结构中,通常只有一个8位或16位的CPU,不仅要完成主流程的工作,同时还要处理随时发生的各种中断,因而嵌入式系统中的串口通信程序设计与PC机有很大的不同。若嵌入式系统中.中断服务子程序在系统运行过程中占用了较多的时间,就有可能在中断眼务子程序正运行时,又产生一个同类型或其他类型的中断,从而造成主程序得不到执行或后续中断数据丢失。所以,嵌入式系统中的串口通信虽然看似简单,但其中仍有许多问题值得研究,例如串口通信过程中的帧同步问题。本文针对该问题给出了逐次比较、基于FIFO队列和基于状态机的
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved