打印

【转】MSP430G2553-PC通讯协议代码欣赏

[复制链接]
493|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lwsn|  楼主 | 2016-10-25 21:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
main.c
/****************************************************************************/
/*                                                                          */
/*                Copyright (c) 2016, 老马工作室                                                                            */
/*                     All rights reserved.                                 */
/*                                                                          */
/*      Email:pcwebmaster@163.com                                           */
/****************************************************************************/
/****************************************************************************/
/* 文 件 名:comint.c                                                                       */
/* 版    本:Version 1.0                                                                    */
/* 描    述:串行口中断带通讯协议测试                                                                                                                               */
/* 主控芯片:MSP430G2553                                                                                                                */
/* 晶振频率:内部1MHz                                                                                                                */
/* 编译环境:CCS5.4         Grace初始化                                                                                                        */
/* 作    者:pcwebmaster(北极狼)                                                            */
/* 函    数:                                                                                                                                                                       */
/*                 system_init                                                     */
/*                 com_send_command                                                */
/*                 com_command_receive                                                                                                */
/*                        CalCRC16_1021                                                                                                        */
/*                        command_decoder                                                                                                        */
/*                        send_command                                                                                                        */
/* 测    试: 发送:16 16 02 01 02 01 00 35 03 94 BD接收:49 AA 15                                        */
/* 测试现象:                                                                                                                                        */
/* 历史记录:20016.02.23测试通过                                                                                                                          */
/* 北极狼          20016-02-23     Creat Inital version. (Version 1.0)                              */
/****************************************************************************/
#include <msp430.h>
/* ======== Grace related includes ======== */
#include <ti/mcu/msp430/Grace.h>

unsigned char *str = "Hello World!\n\r Serial test normal!\n\r";
unsigned char *str1= "串口测试正常!\n\r";

/*  ======== main ======== */
int main(void)
{
    Grace_init();                   // Activate Grace-generated configuration
    buff_init();
    // >>>>> Fill-in user code here <<<<<
    Send_String(str);//测试
    Send_String(str1);//测试
    while(1)
    {
            com_command_receive();
    }
    return (0);
}

Comint.c
/****************************************************************************/
/*                                                                          */
/*                Copyright (c) 2016, 老马工作室                            */
/*                     All rights reserved.                                 */
/*                                                                          */
/*      Email:pcwebmaster@163.com                                           */
/****************************************************************************/
/****************************************************************************/
/* 文 件 名:comint.c                                                                       */
/* 版    本:Version 1.0                                                                    */
/* 描    述:串行口中断带通讯协议测试                                                                                                                               */
/* 主控芯片:MSP430G2553                                                                                                                */
/* 晶振频率:内部1MHz                                                                                                                */
/* 编译环境:CCS5.4         Grace初始化                                                                                                        */
/* 作    者:pcwebmaster(北极狼)                                                            */
/* 函    数:                                                                                                                                                                       */
/*                 system_init                                                     */
/*                 com_send_command                                                */
/*                 com_command_receive                                                                                                */
/*                        CalCRC16_1021                                                                                                        */
/*                        command_decoder                                                                                                        */
/*                        send_command                                                                                                        */
/* 测    试: 发送:16 16 02 01 02 01 00 35 03 94 BD接收:49 AA 15                                        */
/* 测试现象:                                                                                                                                        */
/* 历史记录:20016.02.23测试通过                                                                                                                          */
/* 北极狼          20016-02-23     Creat Inital version. (Version 1.0)                              */
/****************************************************************************/
#include <msp430.h>
#include <ti/mcu/msp430/Grace.h>
#include "comint.h"


uint8_t  pint_buf[MAX_RINTL];   /* 串口接收缓冲区       */
uint8_t  pint_read;             /* 串口缓冲区读指针     */
uint8_t  pint_write;            /* 串口缓冲区写指针     */
//uint8_t  psend_int;             /* 串口发送允许标志     */
uint8_t  serial_flag = 0;       /* 串口接收数据标志位   */


uint8_t  prec_buf[MAX_COMMAND_LEN];                /* 命令接收缓冲区    */
uint8_t  prec_num;                    /* 命令接收缓冲区字节数 */

uint8_t serial_lengthl = 0;           /* 消息命令长度低8位    */
uint16_t  serial_length = 0;          /* 消息命令长度16位     */

uint8_t ADDRESS[2]={ZU,ZHAN};               /* byte0:通讯组地址, byte1:站地址 */

//-----------------------------------------------------------------
// 串口初始化
//-----------------------------------------------------------------
void USCI_A0_graceInit(void)
{
    /* USER CODE START (section: USCI_A0_graceInit_prologue) */
    /* User initialization code */
    /* USER CODE END (section: USCI_A0_graceInit_prologue) */

    /* Disable USCI */
    UCA0CTL1 |= UCSWRST;

    /*
     * Control Register 1
     *
     * UCSSEL_2 -- SMCLK
     * ~UCRXEIE -- Erroneous characters rejected and UCAxRXIFG is not set
     * ~UCBRKIE -- Received break characters do not set UCAxRXIFG
     * ~UCDORM -- Not dormant. All received characters will set UCAxRXIFG
     * ~UCTXADDR -- Next frame transmitted is data
     * ~UCTXBRK -- Next frame transmitted is not a break
     * UCSWRST -- Enabled. USCI logic held in reset state
     *
     * Note: ~<BIT> indicates that <BIT> has value zero
     */
    UCA0CTL1 = UCSSEL_2 | UCSWRST;

    /*
     * Modulation Control Register
     *
     * UCBRF_0 -- First stage 0
     * UCBRS_1 -- Second stage 1
     * ~UCOS16 -- Disabled
     *
     * Note: ~UCOS16 indicates that UCOS16 has value zero
     */
    UCA0MCTL = UCBRF_0 | UCBRS_1;

    /* Baud rate control register 0 */
    UCA0BR0 = 104;

    /* Enable USCI */
    UCA0CTL1 &= ~UCSWRST;

    /* USER CODE START (section: USCI_A0_graceInit_epilogue) */
    /* User code */
    /* USER CODE END (section: USCI_A0_graceInit_epilogue) */
}
//-----------------------------------------------------------------
// 串口发送一个字节
//-----------------------------------------------------------------
void com_send_command(char Onebyte)
{
        UCA0TXBUF = Onebyte;
        __delay_cycles(2000);//发送汉字参数2000,发送字符参数为1000
}

//------------------------------------------------------------------
// 串口接收中断程序
//------------------------------------------------------------------
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR_HOOK(void)
{
    uint8_t temp;
    uint8_t temp1;
    // USER CODE START (section: USCI0RX_ISR_HOOK)
    // replace this comment with your code
    // USER CODE END (section: USCI0RX_ISR_HOOK)
        while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
        //判断串口的发送是否正在工作,
        //因为要使用发送功能,所以得判断发送是否忙碌,
        //只有在不忙碌的时候才可以启用发送。
        //这一句就是判断发送是否在工作,如果是在工作,那么一直等待到不工作为止。
        temp1 =  UCA0RXBUF;       //读取数据             // TX -> RXed character
        temp  = pint_write + 1; /* 判断是否可以写入 */
        if (temp == MAX_RINTL)
        {
                        temp=0;
        }
        if (temp != pint_read)
        {
                        pint_buf[pint_write] = temp1; /* 读取数据 */
                        pint_write = temp;
        }
}
void buff_init(void)
{
    uint8_t loop;
    loop = UCA0RXBUF;   /* 清串口缓冲区   */
    for (loop=0; loop<MAX_RINTL; loop++)
    {
        pint_buf[loop] = 0;
    }
}
Comint.h
#ifndef __COMINT_H__
#define __COMINT_H__

#include <stdio.h>
#include <msp430.h>


#define INT8U   unsigned char
#define INT16U  unsigned int
#define uint8_t   unsigned char
#define u_short  unsigned int
#define uint16_t  unsigned int

#define ZU                        0x01                 /*组地址*///通讯地址修改这两项
#define ZHAN                0x02                 /*站地址*///通讯地址修改这两项

#define MAX_RINTL       16   /* 串口接收缓冲区长度   */
#define SYN           0x16   /* 通讯同步位*/
#define STX           0x02   /* 通讯起始位*/
#define ETX           0x03   /* 通讯结束位*/

#define ACK           0x06
#define NAK           0x15

#define MSG_ACK          2    /* 正确应答信息         */
#define MSG_NAK          3    /* 错误应答信息         */
#define MAX_COMMAND_LEN  16   /* 串口接受命令长度     */

extern uint8_t  pint_read;             // 串口缓冲区读指针     */
extern uint8_t  pint_write;            // 串口缓冲区写指针
extern uint8_t  pint_buf[MAX_RINTL];   // 串口接收缓冲区      
extern uint8_t serial_flag;              /* 串口接收数据标志位   */

extern uint8_t  prec_buf[MAX_COMMAND_LEN];/* 命令接收缓冲区 */        

/* 串口初始化*/
void Serial_port_init(void);
/* 串口发送一个字节 */
void com_send_command(char Onebyte);
void Send_String(char *str);// 向PC机发送字符串
/* 串口接收数据处理 */
void com_command_receive(void);
/* 串口接收初始化 */
void buff_init(void);

///* 串口接收一字节数据 */
//unsigned char UartReadChar(void); //reentrant
/*计算CRC校验和使用MTT(0X1021)
参数:
pBuff 为需计算CRC的缓冲区的头指针
BufferLen 缓冲区长度(以字节计)
*/
u_short CalCRC16_1021(uint8_t x[], u_short BufferLen);

/* 命令解码子程序 */
void command_decoder(void);
/* 向主机发送消息帧,入口参数:消息类型 */
void send_command(uint8_t command);

#endif

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

122

主题

824

帖子

1

粉丝