找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4741|回复: 0
收起左侧

串口UART实现电脑发送数据当430接收到数据后再发回电脑

[复制链接]
ID:301892 发表于 2018-4-22 21:41 | 显示全部楼层 |阅读模式
串口UART实现电脑发送数据当430接收到数据后再发回电脑
0.jpg

单片机源程序如下:
  1. #include<msp430g2553.h>
  2. #include  "UART_Global.h"

  3. unsigned  char  Rx_FIFO[RX_FIFO_SIZE]={0};    //UART接收FIFO数组
  4. unsigned  int  Rx_FIFO_DataNum=0;      //UART接收FIFO的“空满”指示变量
  5. unsigned  int  Rx_FIFO_IndexR=0;        //UART接收FIFO的模拟“读指针”变量
  6. unsigned  int  Rx_FIFO_IndexW=0;        //UART接收FIFO的模拟“写指针”变量
  7. unsigned  char  Tx_FIFO[TX_FIFO_SIZE]={0};    //UART发送FIFO数组
  8. unsigned  int  Tx_FIFO_DataNum=0;      //UART发送FIFO的“空满”指示变量
  9. unsigned  int  Tx_FIFO_IndexR=0;        //UART发送FIFO的模拟“读指针”变量
  10. unsigned  int  Tx_FIFO_IndexW=0;        //UART 发送 FIFO 的模拟“写指针”变量

  11. char Rx_FIFO_WriteChar(unsigned  char  Data)
  12. {
  13.         if(Rx_FIFO_DataNum==RX_FIFO_SIZE)  return(0);
  14.         //判断FIFO是否已装满未读数据,如果装满返回0
  15.         __disable_interrupt();             //操作FIFO前一定要关总中断
  16.         Rx_FIFO_DataNum++;                      //未读取数据个数加一
  17.         Rx_FIFO[Rx_FIFO_IndexW]=Data;            //将数据写入写读指针位置的FIFO数组
  18.         Rx_FIFO_IndexW++;                          //写指针移位
  19.         if  (Rx_FIFO_IndexW>=RX_FIFO_SIZE)        //判断指针是否越界
  20.         Rx_FIFO_IndexW=0;                    //写指针循环归零
  21.         __disable_interrupt();                         //恢复总中断使能
  22.         return(1);               //返回成功
  23. }
  24. char Rx_FIFO_ReadChar(unsigned  char *Chr)
  25. {
  26.         if(Rx_FIFO_DataNum==0)  return(0);  //判断FIFO是是否有未读数据,如果没有返回0
  27.         __disable_interrupt();        //操作FIFO前一定要关总中断
  28.         Rx_FIFO_DataNum --;        //待读取数据个数减一
  29.         *Chr=Rx_FIFO[Rx_FIFO_IndexR];    //将读指针位置的FIFO数据赋给指针所指变量
  30.         Rx_FIFO_IndexR++;         //读指针移位
  31.         if  (Rx_FIFO_IndexR>=RX_FIFO_SIZE)    //判断指针是否越界
  32.         Rx_FIFO_IndexR=0;       //读指针循环归零
  33.         __disable_interrupt();        //恢复总中断使能
  34.         return(1);
  35. }
  36. void  Rx_FIFO_Clear()
  37. {
  38.         __disable_interrupt();          //操作FIFO前一定要关总中断
  39.         Rx_FIFO_DataNum=0;          //FIFO中未读取数据数目
  40.         Rx_FIFO_IndexR=0;           //FIFO中模拟读指针清零
  41.         Rx_FIFO_IndexW=0;          //FIFO中模拟写指针清零
  42.         __disable_interrupt();          //恢复总中断使能
  43. }
  44. char Tx_FIFO_WriteChar(unsigned  char Data)
  45. {
  46.         if(Tx_FIFO_DataNum==TX_FIFO_SIZE)  return(0);
  47.         //判断FIFO是否已装满未读数据,如果装满返回0
  48.         __disable_interrupt();                        //操作FIFO前一定要关总中断
  49.         //-----“全新”一次发送数据必须手动触发Tx 中断-----
  50.         if((Tx_FIFO_DataNum==0) &&( !(UCA0STAT & UCBUSY)))
  51.         //判断是否为一次“全新”发送
  52.         IFG2 |=UCA0TXIFG;            //  手动触发一次
  53.         Tx_FIFO_DataNum++;                        //未读取数据个数加一
  54.         Tx_FIFO[Tx_FIFO_IndexW]=Data;             //将数据写入写读指针位置的FIFO数组
  55.         Tx_FIFO_IndexW++;                          //写指针移位
  56.         if  (Tx_FIFO_IndexW  >= TX_FIFO_SIZE)          //判断指针是否越界
  57.         Tx_FIFO_IndexW=0;                      //写指针循环归零
  58.         __disable_interrupt();                          //恢复总中断使能
  59.         return(1);               //返回成功
  60. }
  61. char Tx_FIFO_ReadChar(unsigned  char *Chr)
  62. {
  63.         if(Tx_FIFO_DataNum==0) return(0);    //判断FIFO是是否有未读数据,如果没有返回0
  64.         __disable_interrupt();                  //操作FIFO前一定要关总中断
  65.         Tx_FIFO_DataNum --;                  //待读取数据个数减一
  66.         *Chr=Tx_FIFO[Tx_FIFO_IndexR];       //将读指针位置的FIFO数据赋给指针所指变量
  67.         Tx_FIFO_IndexR++;                   //读指针移位
  68.         if  (Tx_FIFO_IndexR>=TX_FIFO_SIZE)   //判断指针是否越界
  69.         Tx_FIFO_IndexR=0;               //读指针循环归零
  70.         __disable_interrupt();                  //恢复总中断使能
  71.         return(1);               //返回成功
  72. }
  73. void  Tx_FIFO_Clear()
  74. {
  75.         __disable_interrupt();             //操作FIFO前一定要关总中断
  76.         Tx_FIFO_DataNum=0;              //FIFO中未读取数据数目清零
  77.         Tx_FIFO_IndexR=0;                  //FIFO中模拟读指针清零
  78.         Tx_FIFO_IndexW=0;               //FIFO中模拟写指针清零
  79.         __disable_interrupt();              //恢复总中断使能
  80. ……………………

  81. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
串口UART实现电脑发送数据当430接收到数据后再发回电脑.rar (120.48 KB, 下载次数: 42)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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