社区首页
技术讨论创新帖
全部新帖
资料区
社区活动
联系管理员
★ 社区积分制度
★ 新手必读
★ 申请版主★
专业技术中心
TI技术论坛
MSPM0 MCU
模拟与混合信号
无线连接
微控制器MCU
DSP与ARM处理器
DigiKey得捷技术专区
ST传感器与低功耗无线技术论坛
ST MEMES传感器创意设计大赛
意法半导体-低功耗射频
MEMS传感器
ADI工业技术
电子技术交流
边缘AI
嵌入式系统
ARM技术
Linux与安卓
实时操作系统RTOS
编程基础
单片机
国产MCU
stm32/stm8
NXP MCU
瑞萨电子MCU
TI MCU
Microchip MCU
GD32 MCU
51单片机
国产芯片交流
电机驱动控制(Motor Control)
FPGA/CPLD
模拟电子
TI 模拟与混合信号
电源技术
开关电源学习小组
LED专区
TI 模拟与混合信号
无线连接
TI无线连接
传感器
PCB设计
综合技术交流
测试/测量
分立器件
电路观察室
下载中心专版
大学堂专版
maychang趣味电子技术课堂
测评中心专版
行业应用
汽车电子
机器人开发
工业自动化与控制
ADI工业技术
能源基础设施
医疗电子
消费电子
创意与实践
电子竞赛
DIY/开源硬件专区
东芝光电继电器TLP3547评测专区
MAX32630FTHR设计大赛专区
MicroPython开源版块
创新实验室
以拆会友
ON和Avnet物联网创新设计大赛
淘e淘
创意市集
休息一下
聊聊笑笑闹闹
工作这点儿事
求职招聘
为我们提建议&公告
EEWorld颁奖专区
信息发布
请
登录
后使用快捷导航
没有帐号?
注册
首页
|
电子技术
|
嵌入式
模拟电子
单片机
电源管理
传感器
半导体
电子应用
|
工业控制
物联网
汽车电子
网络通信
医疗电子
手机便携
测试测量
安防电子
家用电子
机器人
新能源
电子头条
|
社区
|
论坛
测评
博客
大学堂
|
下载
|
下载中心
电路图
精品文集
电路图
|
参考设计
|
Datasheet
|
活动
|
直播
datasheet
datasheet
文章
搜索
登录
注册
中文
En
论坛
切换旧版
论坛首页
版块列表
专业技术中心
TI技术论坛
DigiKey得捷技术专区
ST传感器与低功耗无线技术论坛
ADI工业技术论坛
电子技术交流
边缘AI
嵌入式系统
单片机
国产芯片交流
电机控制
FPGA/CPLD
模拟电子
电源技术
无线连接
传感器
PCB设计
综合技术交流
下载中心专版
大学堂专版
测评中心专版
行业应用
汽车电子
机器人开发
工业自动化与控制
能源基础设施
医疗电子
消费电子
创意与实践
电子竞赛
DIY/开源硬件专区
淘e淘
创意市集
休息一下
聊聊、笑笑、闹闹
工作这点儿事
为我们提意见&公告
EEWorld颁奖专区
信息发布
最新帖子
最新帖子
最新回复
精华
消灭零回复
测评中心
活动中心
积分兑换
E金币兑换
芯积分
厂商专区
TI技术论坛
DigiKey得捷技术专区
ST传感器与低功耗无线技术论坛
ADI工业技术论坛
电子工程世界-论坛
»
论坛
›
专业技术中心
›
TI技术论坛
›
微控制器 MCU
›
分享编程例程:MSP430单片机UART_FIFO 发送 接受
返回列表
发新帖
回复
阅
1396
|
回
0
Jacktang
当前离线
五彩晶圆(高级)
最后登录
2025-3-27
在线时间
637 小时
威望
7640分
芯积分
7030分
(兑换)
E金币
0枚
(兑换)
(兑换)
好友
1
Jacktang
7023
帖子
0
TA的资源
五彩晶圆(高级)
+ 好友
私信
楼主
发表于2017-4-25 20:37
只看该作者
分享编程例程:MSP430单片机UART_FIFO 发送 接受
[复制链接]
MSP430单片机UART_FIFO 发送 接受
关于本程序的详细解说大家可以下载电子书点击上图即可
原书一共有2个程序
程序1发送:
#include
#define TXBUF_SIZE 32 /*发送FIFO的最大容量*/
unsigned char TX_BUFF[TXBUF_SIZE]; /*发送FIFO缓冲区数组*/
unsigned int UART_OutLen=0; /*发送FIFO内待发出的字节数*/
unsigned int TX_IndexR=0; /*发送FIFO内的读指针*/
unsigned int TX_IndexW=0; /*发送FIFO内的写指针*/
/*****************************************************************
* 名 称:UART0_PutChar()
* 功 能:从串口发送1字节数据(向缓冲队列内填入1字节待发送数据)
* 入口参数:Chr:待发送的字节
* 出口参数:返回1表示发送成功,
返回0表示发送失败。
* 说 明: 发送过程中,不阻塞CPU运行
*****************************************************************/
char UART0_PutChar(unsigned char Chr)
{
if(UART_OutLen == TXBUF_SIZE) //如果FIFO已满
{
return (0); // 不发送数据,返回发送失败标志
}
if(UART_OutLen==0) // 如果是第一个字节
{
IFG1|=UTXIFG0; // 人为制造第一次中断条件
}
_DINT(); // 涉及FIFO操作时不允许中断,以免数据错乱
UART_OutLen++; // 待发送字节数加1
TX_BUFF[TX_IndexW] = Chr; // 待发送数据通过写指针写入FIFO
if (++TX_IndexW >= TXBUF_SIZE)// 写指针递增,且判断是否下标越界
{
TX_IndexW = 0; // 如果越界则写指针归零(循环队列)
}
IE1 |= UTXIE0; // 允许UART0的发送中断,在中断内依次发送数据
_EINT(); // FIFO操作完毕,恢复中断允许
return (1); // 返回发送成功标志
}
#pragma vector=UART0TX_VECTOR
__interrupt void UART_TX (void) // 串口发送中断
{
if(UART_OutLen>0) // FIFO内是否有待发送的数据?
{
UART_OutLen--; // 待发送数据字节数减1
U0TXBUF=TX_BUFF[TX_IndexR]; // 从尾指针读取一个字节并发送
if (++TX_IndexR >= TXBUF_SIZE)// 读指针递增,且判断是否下标越界
{
TX_IndexR = 0; // 如果越界则写指针归零(循环队列)
}
}
else IE1 &=~ UTXIE0; // 如果数据已发完,则关闭UART0的发送中断,停止发送
}
/*****************************************************************
* 名 称:UART0_PutChar_Legacy()
* 功 能:传统的从串口发送1字节数据程序,供对比用
* 入口参数:Chr:待发送的字节
* 说 明: 发送过程中,会阻塞CPU运行
*****************************************************************/
void UART0_PutChar_Legacy(char Chr)
{
TXBUF0=Chr;
while ((IFG1 & UTXIFG0)==0); // 等待该字节发完
}
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; // 停止看门狗
FLL_CTL0 |= XCAP18PF; // 配置晶振负载电容
U0CTL = CHAR; // 异步通讯模式,8位数据,无校验,1位停止位。
ME1 |= UTXE0 + URXE0; // 开启串口0收发模块
U0TCTL |= SSEL0; // 选择ACLK作为串口波特率时钟源。
U0BR1 = 0; //
U0BR0 = 13; // 分频系数整数部分=13
U0MCTL = 0x6B; // 分频系数小数部分调制=5/8。(2400bps)
P2SEL |= BIT4 + BIT5; // P2.4,5 开启第二功能,作为串口收发引脚(不同单片机有差别)
_EINT(); // 总中断允许
while(1)
{
TACTL = TASSEL_2 + MC_2 + TAIE + TACLR; // 用TA测量传统发送程序所需时间
UART0_PutChar_Legacy(0x01);
UART0_PutChar_Legacy(0x02);
UART0_PutChar_Legacy(0x03);
UART0_PutChar_Legacy(0x04);
UART0_PutChar_Legacy(0x05); //测试,发送8字节数据
UART0_PutChar_Legacy(0x06);
UART0_PutChar_Legacy(0x07);
UART0_PutChar_Legacy(0x08);
TACTL = TASSEL_2 + MC_0; // TA停止计时
_NOP(); // 在这一句设断点查看TAR值(29652个周期)
__delay_cycles(1000000);
TACTL = TASSEL_2 + MC_2 + TAIE + TACLR; // 用TA测量带FIFO的发送程序所需时间
UART0_PutChar(0x01);
UART0_PutChar(0x02);
UART0_PutChar(0x03);
UART0_PutChar(0x04);
UART0_PutChar(0x05); //测试,发送8字节数据
UART0_PutChar(0x06);
UART0_PutChar(0x07);
UART0_PutChar(0x08);
TACTL = TASSEL_2 + MC_0; // TA停止计时
_NOP(); // 在这一句设断点查看TAR值 (440个周期)
__delay_cycles(1000000); //约一秒发送一次
}
}
[color=rgb(51, 102, 153) !important]
复制代码
程序2接受:
#include
#define RXBUF_SIZE 32 /*接收FIFO的最大容量*/
unsigned char RX_BUFF[RXBUF_SIZE]; /*接收FIFO缓冲区数组*/
unsigned int UART_InpLen=0; /*接收FIFO内待读取的字节数*/
unsigned int RX_IndexR=0; /*接收FIFO的读指针*/
unsigned int RX_IndexW=0; /*接收FIFO的写指针*/
/*****************************************************************
* 名 称:UART0_GetChar()
* 功 能:从串口读取1字节数据(从缓冲队列内读取1字节已接收的数据)
* 入口参数:*Chr:读取数据所存放的地址指针
* 出口参数:返回1表示读取成功,返回0表示读取失败。
* 说 明: 读取过程中,不阻塞CPU运行
*****************************************************************/
char UART0_GetChar(unsigned char *Chr)
{
if(UART_InpLen==0) return(0); // 如果FIFO内无数据,返回0
_DINT(); // 涉及FIFO操作时不允许中断,以免指针错乱
UART_InpLen--; // 待读取数据字节数减1
*Chr=RX_BUFF[RX_IndexR]; // 从尾指针读取一个字节作为返回值
if (++RX_IndexR >= RXBUF_SIZE) // 读指针递增,且判断是否下标越界
{
RX_IndexR = 0; // 如果越界则写指针归零(循环队列)
}
_EINT(); // FIFO操作完毕,恢复中断允许
return (1); // 返回发送成功标志
}
/*****************************************************************
* 名 称:UART0_GetCharsInRxBuf()
* 功 能:获取FIFO内已接收的数据字节数
* 入口参数:无
* 出口参数:待读取的字节数
*****************************************************************/
unsigned int UART0_GetCharsInRxBuf()
{
return (UART_InpLen); // 返回FIFO内数据的字节数
}
/*****************************************************************
* 名 称:UART0_ClrRxBuf()
* 功 能:清除接收FIFO区
* 入口参数:无
* 出口参数:无
*****************************************************************/
void UART0_ClrRxBuf()
{
_DINT(); // 涉及FIFO操作时不允许中断,以免指针错乱
UART_InpLen=0; // 接收的数据清空
RX_IndexR=0;
RX_IndexW=0; // 头尾指针复位
_EINT();
}
#pragma vector=UART0RX_VECTOR
__interrupt void UART0_RX (void) // 串口接收中断
{
UART_InpLen++; // 接收字节计数加1
RX_BUFF[RX_IndexW] =U0RXBUF; // 串口接收数据通过写指针写入FIFO
if (++RX_IndexW >= RXBUF_SIZE) // 写指针递增,且判断是否下标越界
{
RX_IndexW = 0; // 如果越界则写指针归零(循环队列)
}
}
void main( void )
{
unsigned char RxDataBuff[8];
unsigned char Addr;
unsigned char Func;
int i;
WDTCTL = WDTPW + WDTHOLD; // 停止看门狗
FLL_CTL0 |= XCAP18PF; // 配置晶振负载电容
U0CTL = CHAR; // 异步通讯模式,8位数据,无校验,1位停止位。
ME1 |= UTXE0 + URXE0; // 开启串口0收发模块
U0TCTL |= SSEL0; // 选择ACLK作为串口波特率时钟源。
U0BR1 = 0; //
U0BR0 = 13; // 分频系数整数部分=13
U0MCTL = 0x6B; // 分频系数小数部分调制=5/8。(2400bps)
P2SEL |= BIT4 + BIT5; // P2.4,5 开启第二功能,作为串口收发引脚(不同单片机有差别)
IE1 |= URXIE0; // 开启UART0的接收中断,在中断内接收数据
_EINT(); // 总中断允许
while(1)
{
__delay_cycles(1000000);//模拟一个长耗时的程序,使CPU暂时不能读取串口
if(UART0_GetCharsInRxBuf()>=10) //每收到10字节数据
{
UART0_GetChar(&Addr); //读取第1字节
UART0_GetChar(&Func); //读取第2字节
for(i=0;i<8;i++) UART0_GetChar(RxDataBuff+i); //依次读取后8字节
}
}
}
[color=rgb(51, 102, 153) !important]
复制代码
单片机
此帖出自
微控制器 MCU论坛
点赞
关注
(0)
TI培训
回复
分享
扫一扫,分享给好友
复制链接分享
链接复制成功,分享给好友
举报
提升卡
变色卡
千斤顶
返回列表
发新帖
回复
您需要登录后才可以回帖
登录
|
注册
发表回复
回帖后跳转到最后一页
猜你喜欢
【帖子】分享编程例程:MSP430单片机UART_FIFO 发送 接受
【帖子】编程实例分享 MSP430单片机UART_FIFO 发送 接受
【帖子】有关MSP430单片机UART_FIFO 发送 接受 代码分享
【帖子】MSP430单片机UART_FIFO 发送 接受
【帖子】福利——分享400个proteus例程资料
【帖子】分享LPC1788网络例程
【帖子】基于 STM32F103C8T6的 WEB网页服务器例程 分享给大家
【帖子】msp430 USART模块-双向串口通信,接受长度为8的字符串,再发送回PC机
【下载】Dos 串口通信例程实现了FiFO ,中断发送中断接受!
【下载】介绍linux下的发送和接受udp数据报的编程实例。
【下载】GSM短信编程方法,描述了单片机控制GSM模块发送短信的基本方法和例程
【下载】VB编写的RS232串口通信测试程序,以txt格式接受,可定义发送字符
【下载】CC1110发送与接收例程
【下载】HART协议编程例程
【下载】LED显示屏控制卡的编程例程
【下载】AB PLC例程 rslogix5000编程实例
【设计】ADR02 的典型应用电路,可编程 4 mA 至 20 mA 发送器的 5V 电压基准
【文章】MSP430F247串口发送字符串并接受PC机发来的并送回电脑显示
【文章】单片机串口发送和接受程序
【文章】STM32使用串口中断发送和接受数据
【文章】用单片机接受并解码ps2键盘发送过来的数据
【文章】MSP430单片机USART串口发送字符和字符串
【文章】msp430单片机通过串口向上位机发送浮点数
活动
更多>>
有奖直播:当AI遇见仿真,会有什么样的电子行业革新之路?
聊汽车电子开发:功能冗余 or 安全至上?汽车电子可靠性硬知识,你知多少?
邀你聊一聊:学习MCU的正确方法和你的学习之路
有奖直播 | AI之眼——安森美图像传感器 报名中
有奖探索 | 和村田一起,深挖 GNSS 开发!
嵌入式Rust修炼营第一场直播:Rust入门基础知识和三个动手实战Rust任务解析
Vicor 白皮书下载有礼 | 在48V架构中使用高密度功率转换器构建更好的机器人
有奖直播报名中| TI 面向楼宇和工厂自动化行业的毫米波雷达解决方案
开源项目
更多>>
LT6656ACDC-2.5、2.5V ADC 电压基准和桥式激励电源的典型应用
AKD4366,带有内置耳机放大器的 AK4366 24 位 DAC 评估板
使用 NXP Semiconductors 的 MKW24D512VHA5 的参考设计
使用 Semtech 的 LP2951 的参考设计
LTC3815EUFE 6A 单片式同步 DC/DC 降压转换器的典型应用电路
ZXTR2012Z 100V输入、12V 30Ma稳压晶体管的典型应用
"40%键盘pcb"改进,加入typec
使用 Diodes Incorporated 的 ZR78L028 的参考设计
2相双极步进电机驱动IC —— TB6608FNG
ip5358充电宝
随便看看
测评颁奖:米尔 瑞芯微RK3576 工业AI开发板
感谢以下网友分享关于米尔瑞芯微RK3576工业AI开发板的测评内容,米尔官方评选的奖励如下。京东卡将由管理员微信转发给获奖网友,本帖为活动颁奖公示。 作者 米尔奖励 [url=homemod=space&uid=1469872]@快乐的小香蕉[/url] 200元京东卡 ...
测评颁奖: NXP MCX A系列 FRDM-MCXA156开发板(含NXP官方福利礼品)
测评颁奖: NXP 边缘AI FRDM-MCXN947开发板(含NXP官方福利礼品)
电子公交站牌也能“光合作用”
cc3200 GPIO的input模式出错
中国文化是如何影响世界的
关于STM32单片机以及MPU6050陀螺仪的使用...急求!
MSP430:ADC用TI的官方例程总是转换一两次之后就停了,求可能原因
查找数据手册?
搜索
EEWorld Datasheet 技术支持
热门标签
源代码
单片机
放大器
TI
ST
电源
分立器件
传感器
测试测量
模拟
小型直流继电器
光纤光栅测温仪
直流电能表
驱动电路
现实增强
短波天线
机顶盒
电力UPS
Keil C51
ISP
相关文章
更多>>
黄仁勋:GAA工艺或仅带来20%性能提升,架构与软件创新更为关键
3月27日消息,据EE Times报道,英伟达(Nvidia)首席执行官黄仁勋(Jensen Huang)在近期GTC大会的一场问答环节中表示,依赖全环绕栅极(Gate-All-Around, GA
消息称台积电将加快在美建厂速度,第三座晶圆厂今年动工
3 月 28 日消息,日经昨晚报道称,台积电在经历首座美国工厂五年建设周期后,已基本掌握在美建厂经验,计划将后续晶圆厂建设周期缩短至两年。 目前,该公司正在完成凤凰城 Fab 21 一期工厂的设备安
理想“开源”,安卓AOSP“刹车”:开源的破与立?
众所周知,开源是软件生态建设的重要引擎,比如说安卓就通过开源逐渐成为了霸主,再比如DeepSeek的开源也让AI大模型这一领域产生了更大的革新。 然而,昨日国内中就发生了戏剧性的一幕——一面是理想官
谷歌确认:安卓不会停止开源 将继续发布新版本源代码
美光发函确认正提升内存与存储产品定价,消息称涨幅 10%~15%
李想宣布开源自研汽车操作系统理想星环 OS
消息称英伟达H20芯片遭中国限购
英特尔前CEO:台积电巨额投资难振兴美国芯片制造
蔚来ET9搭载艾迈斯欧司朗 智能多像素LED产品EVIYOS HD 25
高通在全球三大洲投诉ARM垄断
新帖速递
STM32和无源蜂鸣器播放声音的问题
车规级AECQ200介绍,混合铝电解电容器的选择
嵌入式教程_DSP技术_DSP实验箱操作教程:2-28 搭建轻量级WEB服务器实验
OPA847IDBVR运放器国产替代
AG32VF407测试UART
【得捷电子Follow Me第二期】第一章 收到货物的分享
请问这个红外接收头是什么型号?能用哪个型号代替?谢谢
出售全新未拆封ZYNQ 7Z020 FPGA核心板
用在锂电池供电的水表设置上的LORA模块,当有100块水表集中安装在一个楼道内时,节能
请问一下,当某个端口被设置为 RX0后,这个端口的输入输出方向还有必要设置吗
今年怎么这么难,比疫情时还难,三十了面临失业好迷茫
请教稳压管测试问题
【小华HC32F448测评】关于小华半导体的UART中断发送和PRINTF构造和重定向
【BIGTREETECH PI开发板】 HDMI输出测试
【BIGTREETECH PI开发板】+08.音频测试(zmj)
有奖直播:当AI遇见仿真,会有什么样的电子行业革新之路?
首场直播:Simcenter AI 赋能电子行业研发创新
直播时间:04月15日14:00-14:50
查看 »
有奖直播 | AI之眼——安森美图像传感器 报名中
直播时间:2025年4月25日(周五)上午10:00-11:30
直播主题:AI之眼——安森美图像传感器
报名观看直播、直播间提问、填写问卷均有机会获得精美礼品!
查看 »
有奖探索 | 和村田一起,深挖 GNSS 开发!
活动时间:即日起-5月11日
活动奖励:智能手环、螺丝刀套装、双肩包
查看 »
TI 有奖直播火热报名中~
直播主题: | 使用 MSPM0 MCU 生态系统和 Zero Code Studio 加快产品上市速度
直播时间:4月29日(周二)10:00
活动奖励:双肩包、锁扣杯、胶囊伞
查看 »
Vicor 有奖下载 | 在48V架构中使用高密度功率转换器构建更好的机器人
活动时间:即日起-4月28日
活动奖励:螺丝刀套装、充电套装、电风扇
查看 »
有奖直播报名| TI 面向楼宇和工厂自动化行业的毫米波雷达解决方案
【内容简介】TI 60GHz IWRL6432和 IWRL1432毫米波雷达传感器如何帮助解决楼宇和工厂自动化应用中的感应难题
【直播时间】5月28日(周三)上午10:00
【直播礼品】小米双肩包、contigo水杯、胶囊伞、安克充电器
查看 »
【有奖直播】电机开发很复杂?MotorXpert™助您事半功倍!
直播时间:4月8日(周二)上午10:00
直播奖励:京东卡等您拿!
查看 »
立即报名 | 2025 瑞萨电子工业以太网技术日即将开启!
3月-4月 深圳、广州、北京、苏州、西安、上海 走进全国6城
2025瑞萨电子工业以太网技术巡回沙龙聚焦工业4.0核心需求,为工程师与企业决策者提供实时通信技术最佳解决方案。
预报从速,好礼等您拿~
查看 »
ADI 中国30周年,与你一起走过的那些精彩瞬间!
即日起-4月30日,阅读资料,您可以参与ADI真爱粉大考验,同时为ADI中国30周年送上祝福!我们将从参与者中随机抽取精美礼品送出!
查看 »
电源解决方案和技术 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~
查看 »
关闭
站长推荐
2
/10
有奖直播 | AI之眼——安森美图像传感器 报名中
直播时间:2025年4月25日(周五)上午10:00-11:30
直播主题:AI之眼——安森美图像传感器
报名观看直播、直播间提问、填写问卷均有机会获得精美礼品!
查看 »
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
电信业务审批[2006]字第258号函
京公网安备 11010802033920号
Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复
返回顶部
返回列表