MSP430F149实现超声波测距并通过串口和PC机通信进行显示
使用IAR实现超声波测距,但是用串口在PC机显示时是16进制显示。
#include <msp430x14x.h>typedef unsigned char uchar;
typedef unsigned int uint;#define CPU_F ((double)32768) //外部低频晶振32.768KHZ
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) #define Trig1(a) if(a==1) P1OUT |= BIT3; else P1OUT &= ~BIT3
#define RISE 1
#define FALL 0
void Delays(void);
void PutString(uchar *ptr);
void Hc_sr_Init(void);
void Hc_sr_Open(void);uint TA_Overflow_Cnt;
unsigned int cap_new = 0; // 首次捕捉的ta0r值
unsigned int cap_old = 0; // 二次捕捉的ta0r值
char cap_N = 0; // 溢出次数
char state = 0x00;
long cap_data = 0; // 距离值
uint value = 0;void main(void)
{Hc_sr_Init(); //初始化定时器WDTCTL = WDTPW + WDTHOLD; // 关狗//初始化串口P3SEL |= 0xC0; // P3.6,7 = USART1 TXD/RXDME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXDUCTL1 |= CHAR; // 8-bit characterUTCTL1 |= SSEL0; // UCLK = ACLKUBR01 = 0x03; // 32k/9600 - 3.41UBR11 = 0x00; UMCTL1 = 0x4A; // ModulationUCTL1 &= ~SWRST; // Initialize USART state machineIE2 |= URXIE1; // Enable USART1 RX interrupt_EINT();while(1){ Hc_sr_Open();while (!(IFG2 & UTXIFG1));TXBUF1 = (int)(cap_data);Delays();}
}void PutString(uchar *ptr)
{while(*ptr != '\0'){while (!(IFG2 & UTXIFG1)); // TX缓存空闲TXBUF1 = *ptr++; // 发送数据}while (!(IFG2 & UTXIFG1));TXBUF1 = '\n';
}void Delays(void)
{uchar i=20;uint j;while(i--){j=2000;while(j--);}
}void Hc_sr_Init(void)
{/** P1.2 为echo引脚 捕获模式* P1.3 为Trig 数字i/o模式*/P1OUT &= ~( BIT2 + BIT3 );P1DIR |= BIT3;P1SEL |= BIT2;TACTL = TASSEL_2 + ID_3 + MC_2 + TACLR + TAIE;TACCTL1 = CM_1 + SCS +CAP + CCIE + CCIS_0;
}
void Hc_sr_Open(void) //生成一个持续10us的高电平
{Trig1(1);__delay_cycles(40);Trig1(0);
}
#pragma vector=TIMERA1_VECTOR
__interrupt void TIMER0_A1_ISR(void)
{switch(TAIV){case 2 :state = TACCTL1 >> 14;TACCTL1 &= ~CCIFG;if( TACCTL1 & CM_1){cap_new = TACCR1;TACCTL1 &= ~CM_1;TACCTL1 |= CM_2;}else if ( TACCTL1 & CM_2){cap_old = TACCR1;cap_data = ( cap_old - cap_new ) * 340/2000; //转化为cm/sTACCTL1 &= ~CM_2;TACCTL1 |= CM_1;}break;case 4: break; case 10: TA_Overflow_Cnt++;//溢出标志 break;default:break;}
}
MSP430F149实现超声波测距并通过串口和PC机通信进行显示相关推荐
- STM32开发,串口和PC机通信(串口中断、FIFO机制),安富莱+正点原子程序合并
STM32开发,串口和PC机通信(串口中断.FIFO机制),安富莱+正点原子程序合并 1 概述 1.1 资源概述 1.2 实现功能 2 软件实现 2.1实现步骤 2.2 main()函数代码 2.3 ...
- 51单片机进阶案例(1)——基于MATLAB GUI的单片机串口与PC的通信实现实时时钟和双向可调时钟功能(利用DS1302时钟芯片和LCD1602液晶屏)
目录 一.案例描述 二.实现功能 三.51单片机部分实现 3.1 实时时钟的实现 3.2 串口通信的实现 3.2.1 接收数据 3.2.2 发送数据 四.MATLAB部分实现 4.1 GUI界面 4. ...
- STM32学习之旅④ USART串口和上位机通信
STM32系列博客: STM32学习之旅① 开发环境搭建 STM32学习之旅② 固件库的使用及工程模板的建立 STM32学习之旅③ 从点灯到代码移植 STM32学习之旅④ USART串口和上位机通信 ...
- 【 FPGA 】超声波测距小实验(四):数码管显示测距结果
上篇博文:测了回响脉冲的宽度为多少个10us,这篇博文要算出距离,且用数码管显示距离的十进制结果. 功能框图如下: . 距离计算: 还是先给出程序之后在简单解释吧. 顶层模块: / //工程硬件平台: ...
- 基于matlab的串口通信,基于Matlab GUI的单片机串口与PC的通信 附源码
我也是最近学习单片机和MATLAB的小白平时在看学习的时候 下载了一些有价值的参考文献 概述采用51单片机,atmel的STC89C52RC芯片,主要用到的是七段数码管用来做一个时钟,程序编写软件为k ...
- 甲机通过传串口控制乙机的LED显示状态
一.目标 单片机甲机P1端口外接8位拨码开关:乙机P0外接8只LED.要求使用单片机串行口通信,在查询状态下使单片机乙机的8只LED能够显示甲机8位拨码开关的状态. 二.布线 三.实现 1.首先我们先 ...
- 学习并使用HC-SR04超声波测距模块+STM32
** 超声波测距原理 ** 参考博客: https://blog.csdn.net/qq_40734815/article/details/105992801 https://blog.csdn.ne ...
- 【 FPGA 】超声波测距小实验(一)
超声波测距原理: 超声波测距原理是在超声波发射装置发出超声波,它的根据是接收器接到超声波时的时间差,与雷达测距原理相似. 超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播 ...
- 通过串口打印--超声波测距模块测得距离
通过串口打印--超声波测距模块测得距离 原理 超声波测距模块 串口传输 实战代码 原理 超声波测距模块 在这里首先需要了解超声波测距模块的原理.在我的这篇博客有很多介绍.超声波模块介绍 串口传输 串口 ...
- ROS通过串口,读写STM32和HC-SR04超声波测距信息
ROS通过串口,读写STM32和HC-SR04超声波传感器测距信息,ROS判断距离值,将控制信息通过串口发回给STM32,点亮led灯 ROS可以通过串口与stm32进行通信,以超声波传感器为例实现R ...
最新文章
- 拿到WP官方主题Twenty Ten就是一顿nofollow伺候
- 用python做系统程序_新手小白做毕设,想用Python做一个系统,那么该学习哪方面的知识?...
- 车端激光和双目相机的自动标定算法
- 服务器设置为自动登录,Windows Server 2008 R2怎样设置自动登陆(登录)
- et超排真正免狗能用版 真正好用的东西_真正合格小户型,收纳都特别能“装”...
- Taro+react开发(61) 一条虚线
- 计算机绘图的展望,计算机绘图技的术发展与展望.doc
- postgreSQL源码分析——索引的建立与使用——GIN索引(3)
- 问题二十六:C++全局变量的使用实例
- 使用mybaits遇见有大写的sql语句错误的bug分析
- SQL:pgsql插入数据
- SQL语句设置标识种子
- python模拟登录浏览器_Python爬虫常用之登录(二) 浏览器模拟登录
- STP的安全特性详解与环路保护机制
- HTML5的基础认知 与 css的部分内容
- 编写一个Python程序,计算任意圆锥体的体积和表面积。
- office excel WORD文档不能打印 提示未安装打印机
- [mybatis] sql语句无错误,但是执行多条sql语句时,抛出java.sql.SQLSyntaxErrorException...
- 应用Python爬虫技术获取福彩历史数据
- 数据分析案例:APP热点标签分析
热门文章
- 微信游戏,微信小说系统域名防封是如何做到的
- 求助vscode格式化插件beautify的用法
- 明翰英语教学系列之雅思写作篇V0.2(持续更新)
- C#WinForm程序 窗口不在任务栏显示的处理方法
- 自学考试-“软件开发工具”
- Java 升级那么快,多个版本如何灵活切换和管理?
- nuxt.js 全局 js_使用nuxt js在vuetify js中进行高级颜色管理
- pymol安装教程linux,Pymol安装与问题解决
- r去掉向量中的空字符串 在R里如何去掉字符串矩阵中的空字符串 r r 识别字符串中的双引号 识别字符串中的双引号 str_detect
- [Open3D ERROR] GLFW Error: WGL: Failed to make context current解决方案