串口UART实现电脑发送数据当430接收到数据后再发回电脑
单片机源程序如下:
- #include<msp430g2553.h>
- #include "UART_Global.h"
- unsigned char Rx_FIFO[RX_FIFO_SIZE]={0}; //UART接收FIFO数组
- unsigned int Rx_FIFO_DataNum=0; //UART接收FIFO的“空满”指示变量
- unsigned int Rx_FIFO_IndexR=0; //UART接收FIFO的模拟“读指针”变量
- unsigned int Rx_FIFO_IndexW=0; //UART接收FIFO的模拟“写指针”变量
- unsigned char Tx_FIFO[TX_FIFO_SIZE]={0}; //UART发送FIFO数组
- unsigned int Tx_FIFO_DataNum=0; //UART发送FIFO的“空满”指示变量
- unsigned int Tx_FIFO_IndexR=0; //UART发送FIFO的模拟“读指针”变量
- unsigned int Tx_FIFO_IndexW=0; //UART 发送 FIFO 的模拟“写指针”变量
- char Rx_FIFO_WriteChar(unsigned char Data)
- {
- if(Rx_FIFO_DataNum==RX_FIFO_SIZE) return(0);
- //判断FIFO是否已装满未读数据,如果装满返回0
- __disable_interrupt(); //操作FIFO前一定要关总中断
- Rx_FIFO_DataNum++; //未读取数据个数加一
- Rx_FIFO[Rx_FIFO_IndexW]=Data; //将数据写入写读指针位置的FIFO数组
- Rx_FIFO_IndexW++; //写指针移位
- if (Rx_FIFO_IndexW>=RX_FIFO_SIZE) //判断指针是否越界
- Rx_FIFO_IndexW=0; //写指针循环归零
- __disable_interrupt(); //恢复总中断使能
- return(1); //返回成功
- }
- char Rx_FIFO_ReadChar(unsigned char *Chr)
- {
- if(Rx_FIFO_DataNum==0) return(0); //判断FIFO是是否有未读数据,如果没有返回0
- __disable_interrupt(); //操作FIFO前一定要关总中断
- Rx_FIFO_DataNum --; //待读取数据个数减一
- *Chr=Rx_FIFO[Rx_FIFO_IndexR]; //将读指针位置的FIFO数据赋给指针所指变量
- Rx_FIFO_IndexR++; //读指针移位
- if (Rx_FIFO_IndexR>=RX_FIFO_SIZE) //判断指针是否越界
- Rx_FIFO_IndexR=0; //读指针循环归零
- __disable_interrupt(); //恢复总中断使能
- return(1);
- }
- void Rx_FIFO_Clear()
- {
- __disable_interrupt(); //操作FIFO前一定要关总中断
- Rx_FIFO_DataNum=0; //FIFO中未读取数据数目
- Rx_FIFO_IndexR=0; //FIFO中模拟读指针清零
- Rx_FIFO_IndexW=0; //FIFO中模拟写指针清零
- __disable_interrupt(); //恢复总中断使能
- }
- char Tx_FIFO_WriteChar(unsigned char Data)
- {
- if(Tx_FIFO_DataNum==TX_FIFO_SIZE) return(0);
- //判断FIFO是否已装满未读数据,如果装满返回0
- __disable_interrupt(); //操作FIFO前一定要关总中断
- //-----“全新”一次发送数据必须手动触发Tx 中断-----
- if((Tx_FIFO_DataNum==0) &&( !(UCA0STAT & UCBUSY)))
- //判断是否为一次“全新”发送
- IFG2 |=UCA0TXIFG; // 手动触发一次
- Tx_FIFO_DataNum++; //未读取数据个数加一
- Tx_FIFO[Tx_FIFO_IndexW]=Data; //将数据写入写读指针位置的FIFO数组
- Tx_FIFO_IndexW++; //写指针移位
- if (Tx_FIFO_IndexW >= TX_FIFO_SIZE) //判断指针是否越界
- Tx_FIFO_IndexW=0; //写指针循环归零
- __disable_interrupt(); //恢复总中断使能
- return(1); //返回成功
- }
- char Tx_FIFO_ReadChar(unsigned char *Chr)
- {
- if(Tx_FIFO_DataNum==0) return(0); //判断FIFO是是否有未读数据,如果没有返回0
- __disable_interrupt(); //操作FIFO前一定要关总中断
- Tx_FIFO_DataNum --; //待读取数据个数减一
- *Chr=Tx_FIFO[Tx_FIFO_IndexR]; //将读指针位置的FIFO数据赋给指针所指变量
- Tx_FIFO_IndexR++; //读指针移位
- if (Tx_FIFO_IndexR>=TX_FIFO_SIZE) //判断指针是否越界
- Tx_FIFO_IndexR=0; //读指针循环归零
- __disable_interrupt(); //恢复总中断使能
- return(1); //返回成功
- }
- void Tx_FIFO_Clear()
- {
- __disable_interrupt(); //操作FIFO前一定要关总中断
- Tx_FIFO_DataNum=0; //FIFO中未读取数据数目清零
- Tx_FIFO_IndexR=0; //FIFO中模拟读指针清零
- Tx_FIFO_IndexW=0; //FIFO中模拟写指针清零
- __disable_interrupt(); //恢复总中断使能
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
串口UART实现电脑发送数据当430接收到数据后再发回电脑.rar
(120.48 KB, 下载次数: 42)
|