九齐NY8B072A单片机使用笔记(三)模拟串口RX

因为这款单片机没有硬件串口,所以需要我们自己做软件模拟串口。

用PA3作为RX,因为PA3可以作为外部输入中断EXTI1。

本人首先用轮询的方式查PA3是否从高电平跳变到低电平(起始信号),但是因为还有别的业务逻辑,导致查询到低电平的时候,不能确定此时低电平过了多少us,导致后续数据采样时间点不正确, 实时性较差。

改用中断了以后问题解决。

GPIO初始化代码如下

void Ny8b072a_Gpio_Init(void)
{AWUCON = C_PA1_Wakeup;	// Enable PA1 input change wakeup functionIOSTA = C_PA0_Input | C_PA1_Input | C_PA2_Input | C_PA3_Input | C_PA6_Input | C_PA7_Input ; // set PA0/1/3/6/7 to input modeAPHCON = (unsigned char)~( C_PA0_PHB | C_PA1_PHB | C_PA2_PHB| C_PA3_PHB | C_PA6_PHB | C_PA7_PHB ); // Enable PA0/1/3/6/7 Pull-High Resistor,others disablePORTA = 0x20;	// PA5 output high//PA3INTEDG = C_INT1_En | C_INT1_FallingEdge;	// External interrupt 1 will be set while rising edge occurs on pin PA4INTE = C_INT_EXT1 | C_INT_PABKey;		// Enable External interrupt & PortB input change interruptBWUCON = C_PB5_Wakeup;	// Enable PB5 input change wakeup functionIOSTB =  C_PB5_Input | C_PB7_Input;		// Set PB5/7 to input mode,others set to output modeBPHCON = (unsigned char)~( C_PB5_PHB | C_PB7_PHB);PORTB = 0x0F;	// PB0/1/2/3 output highIOSTC = C_PC_Output;PORTC = 0x03;	// PC0/1 output highCPHCON = (unsigned char)~( C_PC0_PHB | C_PC1_PHB);
}

用了休眠功能,EXTI也可以唤醒。

 

中断里面接收代码如下

volatile unsigned int g_i = 0; 
unsigned char g_uart_rx_length = 0;
unsigned char g_uart_rx_buff[13] = {0};//! interrupt service routine
void isr(void) __interrupt(0)
{	if(INTFbits.INT1IF){ App_Delay_Us(26); //消抖52us//起始信号if(0 == REMOTE_RX_IO){//INTEDG = 0;	//PA4 is gpiowhile(1){for(g_i = 0; g_i < 8; g_i++){g_uart_rx_buff[g_uart_rx_length] >>= 1;App_Delay_Us(59); //104USif(1 == REMOTE_RX_IO){g_uart_rx_buff[g_uart_rx_length] |= 0x80;}}App_Delay_Us(59); //104US// 结束信号if(1 == REMOTE_RX_IO){if ( ('\n' == g_uart_rx_buff[g_uart_rx_length]) || (12 == g_uart_rx_length ) ){//INTEDG = C_INT1_En | C_INT1_FallingEdge;	// External interrupt 0 will be set while rising edge occurs on pin PA4//INTE = C_INT_EXT1;		// Enable External interrupt & PortB input change interruptINTF = (unsigned char)~(C_INT_EXT1);	// Clear INT0IF(External interrupt 0 flag bit)return;}else{g_uart_rx_length++;//wait for new startwhile (1 == REMOTE_RX_IO);App_Delay_Us(26); }}else{//INTEDG = C_INT1_En | C_INT1_FallingEdge;	// External interrupt 0 will be set while rising edge occurs on pin PA4//INTE = C_INT_EXT1;		// Enable External interrupt & PortB input change interruptINTF = (unsigned char)~(C_INT_EXT1);	// Clear INT0IF(External interrupt 0 flag bit)return;}}}else{INTF = (unsigned char)~(C_INT_EXT1);	// Clear INT0IF(External interrupt 0 flag bit)	return;}}
}//@16M  2T   2.5us
//App_Delay_Us(26); //52US
//App_Delay_Us(59); //104US
void App_Delay_Us(unsigned int count)
{	for(; count > 0; count--);
}

波特率9600 每一bit的时间是1/9600=104us,所以两个延时一个是52us一个是104us

延时函数是用示波器看过的,这里配置的是16M 2T

TX因为用不上所有没有去实现,不过思路是相同的,把IO口改为输出即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[LindCode] Binary Tree Postorder Traversal

Binary Tree Postorder Traversal Given a binary tree, return the postorder traversal of its nodes values. Example Given binary tree {1,#,2,3}, 1\2/3return [3,2,1]. Challenge Can you do it without recursion? SOLUTION 1: recursion&#xff1a; 分治法解决之&am…

金山毒霸垃圾清理

金山毒霸-垃圾清理-单文件封装,清洁洁癖的爱好&#xff01; 实话&#xff0c;金山的软件确实不错。展望金山可以在软件行业&#xff0c;做出让世界都使用的。为国人扛起一片天 下载地址&#xff1a; http://pan.baidu.com/s/1dFa7GdV转载于:https://www.cnblogs.com/xiaochina/…

python-break循环中断

Python break语句&#xff0c;就像在C语言中&#xff0c;打破了最小封闭for或while循环。 break语句用来终止循环语句&#xff0c;即循环条件没有False条件或者序列还没被完全递归完&#xff0c;也会停止执行循环语句。 break语句用在while和for循环中。 如果您使用嵌套循环&am…

asp.net+mvc+easyui+sqlite 简单用户系统学习之旅(二)—— easyui的简单实用

下面开始在UserManager.Web中利用easyUI构建web。 1. 先删除自带的controllers、models和views&#xff08;里面的shared和web.config可以保存&#xff09;下面的文件 2. 要利用easyUI&#xff0c;首先去网上下载jquery-easyui-1.3.2.zip&#xff0c;同时下载一份EasyUI-1.3.2.…

adc如何获取周期_LOL:千珏拥有ADC最需要的位移和无敌能力,为什么没人用她打下路?...

— 点击蓝字 关注我们 —英雄联盟自国服上线以来&#xff0c;已经陪伴玩家走过了9个年头&#xff0c;目前英雄联盟中的英雄数量已经达到了151位&#xff0c;每一位都各具特色。千珏是一位深受玩家们喜爱的英雄&#xff0c;其在官方英雄的定位中&#xff0c;属于打野英雄&#x…

android surfaceview 大小_Android 使用Camera2 API采集视频数据

Android 视频数据采集系列的最后一篇出炉了&#xff0c;和前两篇文章想比&#xff0c;这篇文章从系统API层面进行一些探索&#xff0c;涉及到的细节更多。初次接触 Camera2 API 会觉得它的使用有些繁琐&#xff0c;涉及到的类有些多&#xff0c;不过就像第一次使用Activity, Fr…

使用Java VisualVM分析您的应用程序

当您需要发现应用程序的哪个部分消耗更多的CPU或内存时&#xff0c;必须使用探查器执行此操作。 默认情况下&#xff0c;Sun JDK中附带的一个探查器是Java VisualVM。 这个事件探查器非常简单易用&#xff0c;功能强大。 在这篇文章中&#xff0c;我们将看到如何安装它并使用它…

ArcSDE for SQL Server安装及在ArcMap中创建ArcSDE连接

ArcSDE for SQL Server安装及在ArcMap中创建ArcSDE连接 原文:ArcSDE for SQL Server安装及在ArcMap中创建ArcSDE连接安装ArcSDE for SQL Server&#xff0c;最后一步成功后的界面如下&#xff1a;在ArcMap中创建ArcSDE连接&#xff0c;截图如下&#xff1a;posted on 2016-08-0…

python调用c函数传字符串参数_Python使用ctypes模块调用DLL函数之传递数值、指针与字符串参数...

在Python语言中&#xff0c;可以使用ctypes模块调用其它如C语言编写的动态链接库DLL文件中的函数&#xff0c;在提高软件运行效率的同时&#xff0c;也可以充分利用目前市面上各种第三方的DLL库函数&#xff0c;以扩充Python软件的功能及应用领域&#xff0c;减少重复编写代码、…

沁恒CH554 KEIL环境搭建

首先下载WCHISPTool_Setup.exe http://www.wch.cn/products/CH554.html 123这三个可下载的都下吧&#xff0c;后面开发都要用的 安装好后运行&#xff0c;菜单栏上&#xff0c;功能->添加WCH MCU到KEIL器件库 这时候在KEIL安装目录里面的UV4文件夹下可以看到wch.cdb的文件…

【CV论文阅读】Rank Pooling for Action Recognition

这是期刊论文的版本&#xff0c;不是会议论文的版本。看了论文之后&#xff0c;只能说&#xff0c;太TM聪明了。膜拜~~ 视频的表示方法有很多&#xff0c;一般是把它看作帧的序列。论文提出一种新的方法去表示视频&#xff0c;用ranking function的参数编码视频的帧序列。它使用…

VS2019 WPF制作OTA上位机(一)新建工程

首先创建新项目&#xff0c;文件 -> 新建 -> 项目 下拉菜单选择C#和Window&#xff0c;选择WPF应用程序&#xff0c;下一步 输入项目名&#xff0c;下一步 这里选择.NET 5.0&#xff0c;也可以选择其他的&#xff0c;个人习惯.NET&#xff0c;点击创建 这时候出现初始…

户籍恢复需要体检吗_脑梗死后脚麻能恢复吗?需要多久能恢复呢?

脑梗死之后脚部麻木&#xff0c;这个有一部分是能够恢复的&#xff0c;但是相对而言&#xff0c;恢复的时间比较长&#xff0c;在临床当中出现脚麻主要是因为梗死破坏了患者的感觉神经中枢从而造成。脚部感觉麻木&#xff0c;瘙痒或者是有蚂蚁在上面爬的感觉。而且有的更加严重…

Alpha版本测试报告

一、测试计划 Alpha版本即将发布&#xff0c;我们组织队员进行这一版本的测试。 测试主要针对两方面&#xff1a;浏览器兼容性和功能完善性。 测试分兼容性测试与功能完善性两部分&#xff0c;兼容性测试分Windows操作系统、Linux系操作系统、Mac OS X操作系统以及手机端Androi…

VS2019 WPF制作OTA上位机(二)获取bin文件路径

OTA升级是通过无线通信远程把bin文件内容传输到单片机&#xff0c;完成升级。 因此上位机需要获取bin文件的路径&#xff0c;读取bin文件内容&#xff0c;将内容分割依次发送&#xff08;因为单片机的接收缓存不会开得和bin文件一样大&#xff08;十几K甚至几十K&#xff09;&a…

linux更改用户名_破旧安卓手机第二春,在安卓手机上使用Linux_deploy运行Linux

由于服务器位于国外&#xff0c;害怕被墙掉导致数据丢失&#xff0c;所以在本地写了脚本每小时从服务器上导出并下载到本地。但是电脑不可能二十四小时开机&#xff0c;所以很想买一个树莓派4玩玩。但是太贵辽&#xff0c;还好搜索到了Android运行Linux的方法&#xff0c;下面记…

MCUXpress IDE常用设置

NXP的开发工具Xpress是基于eclipse制作的&#xff0c;我们如果需要设置一些东西可以直接搜索eclipse是怎么设置的。 1、字体大小 搜索eclipse字体大小&#xff0c;菜单Window > Preference 而Xpress是汉化了的&#xff0c;英语不好的同学可能懵逼&#xff0c;其实就是菜单栏…

C语言中空格符、空字符、字符数组结束符、换行、回车的区别

空格符和空字符是不一样的,在ASCII里面,空格(space)符号的ASCII码是32,而空字符是0, 2个是完全不一样的2个字符 空字符 一般来描述一个字符串的结尾,其实是控制符的一种,但不能理解为没有字符,应该理解为代表什么都没有的字符.好比回车0x0A和换行0x0D虽然不显示,但是也是控制字…

anaconda如何卸载库_小白必看!Anaconda安装全攻略

本文作者&#xff1a;戴 雯文字编辑&#xff1a;方 言技术总编&#xff1a;张馨月爬虫俱乐部云端课程来袭&#xff01;爬虫俱乐部将于2020年8月25日至28日在线上举行Stata数据分析法律与制度专题训练营&#xff0c;主要是为了让学员掌握Stata软件进阶操作&#xff0c;涉及…

iOS开发网络篇—文件的上传

说明&#xff1a;文件上传使用的时POST请求&#xff0c;通常把要上传的数据保存在请求体中。本文介绍如何不借助第三方框架实现iOS开发中得文件上传。 由于过程较为复杂&#xff0c;因此本文只贴出部分关键代码。 主控制器的关键代码&#xff1a; YYViewController.m 1 #import…