搜索
bottom↓
回复: 22

MSP430G2553 串口的简单程序

[复制链接]

出0入0汤圆

发表于 2012-8-27 23:23:30 | 显示全部楼层 |阅读模式
/*----------------------------------------------------------------------------*/
/*
    File Name        :  UART.c

    Description        :  Use the UART to communication,
                    include sending and recviving.
    Author        :  Jones Lee
    Copyright_&Date_&Version : Jones_Studio _&<2012.8.27>_&<V1.0>
    Connector Fuction :
    Notes        :
*/
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/

/*---Head Files-----------*/
    #include "UART.h"

/*--Variable Definition---*/
    _UINT_8     Flag_Recv;

    _UINT_8     Byte_Recv;

    _UINT_8     Buffer_Recv[20];

/*---Function Definiton---*/
    void        Uart_Init();

    void        UART_SendOneChar(_UINT_8 byte);

    void        UART_SendChars(_UINT_8 *pBuffer,_UINT_8 cnt);

/*---Macro Definition-----*/

/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/*
Fuction Name     :Uart_Init()
Description      :
Input parameter  :

Output parameter :void
Creat Date       :2012.8.27
Author           :Jones Lee
Notes            :
*/
/*----------------------------------------------------------------------------*/
void Uart_Init()
{
    //Select the IO's function to uart.
    P1DIR  |= BIT2;             //P1.2  UART_TX
    P1DIR  &=~BIT1;             //P1.2  UART_RX
    P1SEL  |= BIT1+BIT2;        //select P1.1 and P1.2 as UART port
    P1SEL2 |= BIT1+BIT2;
    //Set the bus as uart.
    UCA0CTL1 |=UCSWRST;         //reset UART module,as well as enable UART module
    UCA0CTL1 |=UCSSEL_2;        //UART clock is SMCLK
    UCA0BR0  |=65;              //Baud N=BCLK/rate,rate=9600,BCLK=SMCLK=8M
    UCA0BR1  |=3;
    UCA0MCTL  = UCBRS1;         //UCBRSx=2
    UCA0CTL1 &=~UCSWRST;        //UART reset end
    //Open the UART recievc interrupt
    IE2 |= UCA0RXIE ;
}
/*----------------------------------------------------------------------------*/
/*
Fuction Name     :UART_SendOneChar()
Description      :The Sending one char function of UART
Input parameter  :<Class> _UINT_8 <name> byte

Output parameter :void
Creat Date       :2012.8.26-2012.8.27
Author           :Jones Lee
Notes            :
*/
/*----------------------------------------------------------------------------*/
void UART_SendOneChar(_UINT_8 byte)
{
    UCA0TXBUF = byte;

    while (!(IFG2&UCA0TXIFG));  //waiting UCA0TXBUF is empty

    IFG2 &=~UCA0TXIFG;           //clear TX interrupt flag
}
/*----------------------------------------------------------------------------*/
/*
Fuction Name      :UART_SendChars()
Description       :The Sending chars function of UART
Input parameter   :<Class> _UINT_8 <name>number
                           _UINT_8*     pBuffer
Output parameter  :void
Creat Date        :2012.8.26-2012.8.27
Author            :Jones Lee
Notes             :
*/
/*----------------------------------------------------------------------------*/
void UART_SendChars(_UINT_8 *pBuffer,_UINT_8 cnt)
{
   do
   {

    UART_SendOneChar(*pBuffer);
    cnt--;
    pBuffer++;
   }
   while(cnt != 0);
   //UART_SendOneChar('\n');
}
/*----------------------------------------------------------------------------*/
/*
Fuction Name      :USCI0RX_ISR()
Description       :The Recving chars function of UART
Input parameter   :<Class> _UINT_8* <name> number   (global variable)
                            _UINT_8*        pBuffer
Output parameter  :void
Creat Date        :2012.8.26 -2012.8.27
Author            :Jones Lee
Notes             :There are only some simple sentences,you can add some flex-
                    -ible sentences accroding to yourself.
*/
/*----------------------------------------------------------------------------*/
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)

{

     Byte_Recv  =UCA0RXBUF;      //load the recieve byte

     IFG2 &=~UCA0RXIFG;         //clear RX interrupt flag

     Flag_Recv = 1;

}

弄了半天,才弄出来,汗死了,就是感觉比LPC 的还难~~~
和大家分享下

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2012-8-28 08:24:44 | 显示全部楼层
感谢楼主分享,我最近也在整这个片子

出0入0汤圆

发表于 2012-8-28 08:54:24 | 显示全部楼层
厉害啊。

出0入0汤圆

发表于 2012-8-28 17:33:53 | 显示全部楼层
老哥:这程序中_UINT_8什么意思?怎么去定义呀?还有void UART_SendChars(_UINT_8 *pBuffer,_UINT_8 cnt)
中两个形参怎么赋值!举个例子如果我要发送0xA5怎么赋值!
求指点!

出0入12汤圆

发表于 2012-8-28 17:47:18 | 显示全部楼层
这个很难弄?参照TI的应该不难
倒是那个 用TIMA来模拟成串口的,那个至今糊涂,搞不清楚...

出0入0汤圆

 楼主| 发表于 2012-8-28 19:52:03 | 显示全部楼层
yurinacn 发表于 2012-8-28 08:24
感谢楼主分享,我最近也在整这个片子

嘿嘿  一样一样,刚买的弄了两天,开学了没时间了

出0入0汤圆

 楼主| 发表于 2012-8-28 19:53:24 | 显示全部楼层
skynet 发表于 2012-8-28 17:47
这个很难弄?参照TI的应该不难
倒是那个 用TIMA来模拟成串口的,那个至今糊涂,搞不清楚...
...

不难, 只不过我第一次弄,和51 lpc17等系列不太一样,波特率产生器不一样。
用TIMA 占用资源吧

出0入0汤圆

 楼主| 发表于 2012-8-28 19:55:50 | 显示全部楼层
tingbao0700 发表于 2012-8-28 17:33
老哥:这程序中_UINT_8什么意思?怎么去定义呀?还有void UART_SendChars(_UINT_8 *pBuffer,_UINT_8 cnt)
...

typedef         unsigned char           _UINT_8;
typedef         unsigned short int      _UINT_16;
typedef         unsigned int            _UINT_32;
typedef         unsigned long int       _UINT_64;

这个是预处理 。

_UINT_8 就是无符号8位 即 一个字节。

如果你发一个字节 就调用那个函数 UART_SendOneChar(0xa5);  即可
这个函数用来发字符串和数组的。

出0入12汤圆

发表于 2012-8-28 19:56:24 | 显示全部楼层
你仔细研究1下430的片子,特别是IO少的就会发现,其实有时候是很郁闷的,因为管脚复用太......用了usart,spi占用,或者i2c占用.唉,有时候无奈阿.
还有1写2xx的,没有硬串口的

出0入0汤圆

 楼主| 发表于 2012-8-28 19:58:16 | 显示全部楼层
tingbao0700 发表于 2012-8-28 17:33
老哥:这程序中_UINT_8什么意思?怎么去定义呀?还有void UART_SendChars(_UINT_8 *pBuffer,_UINT_8 cnt)
...

下面的是他的头文件

/**************************************************
*
* Intrinsic
*
* Copyright
*
* $Revision:
*
**************************************************/

#ifndef __UART_H
#define __UART_H


    //Head Files
   #include "main.h"

    //Function Definition
    extern      void    Uart_Init();

    extern      void    UART_SendOneChar(_UINT_8 byte);

    extern      void    UART_SendChars(_UINT_8 *pBuffer,_UINT_8 cnt);

    //Constant Definition


    //Data Type Definition


    //Variable Definition
    extern      _UINT_8     Flag_Recv;

    extern      _UINT_8     Byte_Recv;

    extern      _UINT_8     Buffer_Recv[20];


#endif /* __UART_H */

出0入0汤圆

 楼主| 发表于 2012-8-28 20:00:34 | 显示全部楼层
skynet 发表于 2012-8-28 19:56
你仔细研究1下430的片子,特别是IO少的就会发现,其实有时候是很郁闷的,因为管脚复用太......用了usart,spi占 ...

低功耗~~嘿嘿。
貌似 UART和SPI 只能开一个同一时间, 同步 与异步  
我也搞不明白 时序的问题。 呵呵。

LPC1768 挺好。 LPC1114等

出0入12汤圆

发表于 2012-8-28 20:02:16 | 显示全部楼层
错,在80pin以上的里面,全部都可以开

出0入0汤圆

 楼主| 发表于 2012-8-28 21:33:26 | 显示全部楼层
skynet 发表于 2012-8-28 20:02
错,在80pin以上的里面,全部都可以开

新手 新手

出0入0汤圆

发表于 2012-8-28 22:32:37 来自手机 | 显示全部楼层
谢谢lz…顶一下…

出0入0汤圆

发表于 2012-8-29 08:18:42 | 显示全部楼层
貌似MSP430G2553这类片子串行口模块只能是一种模式吧,要么是uart,要么是i2c,要么是spi...

出0入0汤圆

 楼主| 发表于 2012-8-29 08:43:57 | 显示全部楼层
yurinacn 发表于 2012-8-29 08:18
貌似MSP430G2553这类片子串行口模块只能是一种模式吧,要么是uart,要么是i2c,要么是spi...
...

嗯   但是串口比较常用、。

出0入0汤圆

发表于 2013-4-9 16:32:54 | 显示全部楼层

不错,必须定下!也是刚搞这个新型号的430,

出0入0汤圆

发表于 2013-8-12 11:25:39 来自手机 | 显示全部楼层
mark……
顶一个…

出0入0汤圆

发表于 2013-12-28 22:57:28 | 显示全部楼层
用串口调试助手能正确收发么,俺调试了老半天一致是乱码(程序是俺自己写的,有空试试你这个)

出0入0汤圆

发表于 2013-12-30 17:29:35 | 显示全部楼层
我觉得只是波特率那一部分可能不好弄吧,其他的还行

出0入0汤圆

发表于 2014-11-10 11:01:50 | 显示全部楼层
thanks for you share your ziliao

出0入0汤圆

发表于 2014-11-15 22:56:54 | 显示全部楼层
学习 + 关注, 感谢楼主分享!

出0入0汤圆

发表于 2016-11-11 22:03:58 | 显示全部楼层
最近也在调串口,参考一下,谢谢楼主
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 14:51

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表