1.波特率
串口通信就是单片机与电脑端,单片机与单片机,单片机与模块器件之间互发信息进行通信,比如单片机发送一个“1”的字符给电脑端,电脑端的窗口就会接收到“1”。我们常用的波特率为9600,所谓9600指的是一秒钟单片机可以发送9600个数据位,也就是1秒钟的时间里单片机可以发送(9600/8)=1200字节。
如果我们想发送一个字符“A”给电脑端的窗口,那么字符“A”对应的ASCII值就是65,二进制表示为01000001。
2.通信引脚
单片机的P3.1是发送引脚,也就是说要发送字符“A”,这个引脚的变化如下图所示
单片机要发送一个字节给电脑端,首先发送引脚需要先拉高,然后拉低持续(1/9600)秒,电脑端检测到这个低电平信号就会准备接收数据字节。然后我们要发送的二进制位是01000001,但是串口通信发送的字节是低位在前,高位在后,所以上图的发送顺序就是01000001反过来为10000010。一个字节发送完成之后还要发送一个停止位1,电脑端接收到这个停止位就认为一个字节发送完成了。
我们用定时器来实现引脚的持续时间,怎么定时(1/9600)秒怎么设置,计算一下就可以了
(1/9600)=X*(12/11059200)
解得X=96。
因为定时时间间隔比较短,所以我们使用定时器0的工作模式2就可以了。填充TH0的初始值就是256-96=160=0xA0。
因为P3.1在“#include 3.代码 1.波特率 串口通信就是单片机与电脑端,单片机与单片机,单片机与模块器件之间互发信息进行通信,比如单片机发送一个“1”的字符给电脑端,电脑端的窗口就会接收到“1”。我们常用的波特率为9600,所谓9600指的是一秒钟单片机可以发送9600个数据位,也就是1秒钟的时间里单片机可以发送(9600/8)=1200字节。 如果我们想发送一个字符“A”给电脑端的窗口,那么字符“A”对应的ASCII值就是65,二进制表示为01000001。 2.通信引脚 单片机的P3.1是发送引脚,也就是说要发送字符“A”,这个引脚的变化如下图所示 10.1.png 单片机要发送一个字节给电脑端,首先发送引脚需要先拉高,然后拉低持续(1/9600)秒,电脑端检测到这个低电平信号就会准备接收数据字节。然后我们要发送的二进制位是01000001,但是串口通信发送的字节是低位在前,高位在后,所以上图的发送顺序就是01000001反过来为10000010。一个字节发送完成之后还要发送一个停止位1,电脑端接收到这个停止位就认为一个字节发送完成了。 我们用定时器来实现引脚的持续时间,怎么定时(1/9600)秒怎么设置,计算一下就可以了 (1/9600)=X*(12/11059200) 解得X=96。 因为定时时间间隔比较短,所以我们使用定时器0的工作模式2就可以了。填充TH0的初始值就是256-96=160=0xA0。 因为P3.1在“#include 3.代码 #include #include #include void TIM0_Mode2_Init() { TMOD&=0xF0; //清0低四位 TMOD|=0x02; //设置定时器0为工作模式2 TH0 = 0xA0; //计算出波特率9600 TL0 = 0xA0; ET0 = 1; //闭合定时器0中断的开关 TR0 = 1; //启动定时器0 } void main() { u8 key; LED_Init(); //初始化LED硬件模块 KEY_Init(); //初始化按键模块 EA = 1; //闭合总中断开关 TIM0_Mode2_Init(); //定时(1/9600)秒 TR0 = 0; //先关闭定时器 while(1) { key=KEY_Scan(0,1000); if(key==4)TR0 = 1;//开启定时器启动一次字节传输,按一次发送一次。 } } void TIM0_IRQHandler() interrupt 1 { static u8 cnt=0,i,TXDBUF=65; //字符“A”的ASCII值为65 cnt++; //cnt一直在1~10之间变化 if(cnt==1)TXD=0; //cnt变为1,发送起始位,这次的中断函数就执行完了,持续够(1/9600)秒之后,再次进入中断函数,然后就是进入发送数据字节的8位的任务 if (cnt>=2 && cnt<=9) //发送8位数据位,从低位开始引脚的变化为 1 0 0 0 0 0 1 0 { TXD = TXDBUF & 0x01; //“TXDBUF & 0x01”的表达式就是,要么等于1要么等于0,这样P3.1的引脚要么保持高电平,要么保持低电平 TXDBUF >>= 1; } if (cnt == 10) { TXD = 1; //发送停止位 TR0 = 0; //关闭定时器,结束一次字节传输 cnt=0; i++; TXDBUF=65+i; //下次按按键发送的是 B C D E··· } } 大家可能对中断函数里的内容感到艰涩难度,这里简单说明一下,我们按下K4启动了定时器,然后第一次进入中断函数时,做的任务就是拉低P3.1,然后这次的中断函数的任务就结束了,等过了(1/9600)秒之后,再次进入中断函数,上一次拉低P3.1的时间已经持续够(1/9600)秒了,这第二次的中断函数任务就是拉高P3.1,因为发送字符A这个字节的最低位为1,持续够(1/9600)秒进入第三次执行中断函数,拉低P3.1,第四,第五,第六,第七都是拉低P3.1发送0,以此类推,到第10次中断函数执行就是拉高P3.1发送停止位,关闭定时器结束一次字节的传输,要想再次发送需要按K4启动定时器,“TXDBUF=65+i; ”表示下次发送的是66这个数据,再下次就是发送67······ 4.软件设置 在软件界面选择串口助手,选用字符格式显示,查看波特率是否为9600,最后点击“打开串口”。 不断地间隔按K4,就会看到电脑端显示出单片机发送过来的字符数据
上一篇:51单片机-超声波模块
下一篇:51单片机-简洁式串口通信
推荐阅读最新更新时间:2024-11-16 21:55
推荐帖子
- 求基于单片机音乐彩灯控制电路
- 基于单片机的数字音乐芯片控制电路,通过对音响设备输出端子中输出信号的音乐节奏进行识别和数据采集,合理地利用芯片的接口技术,并利用嵌入式单片机系统实现对音乐节奏识别,灯光系统的智能控制,使灯光随着音乐的节奏、大小、音调而变化(1)基本性能要求①有三路不同控制方法的彩灯,用不同颜色的LED表示;②第一路为音乐节奏控制彩灯,按音乐节拍变换彩灯花样;③第二路按音量大小控制彩灯。音量大,彩灯亮度加大,且彩灯被点亮的数目增多,反之亦然;④第三路按音调高低控制彩灯,低音时,某一
- fyhsam 51单片机
- Micrium针对STR9的UC/OS系统
- 从Micrium网站上下载了移植到STR9上的UC/OS系统,生成intel标准格式的.hex文件时因为文件太大而出错,只能生成.sim文件。CAPS软件如何烧录.sim文件呢?Micrium针对STR9的UC/OS系统从Micrium网站上下载的移植到STR9上的UC/OS系统根本就生成不了.hex的文件。没有人遇上这问题吗?试了试把一些用不上的c函数注释掉,并且让编译器最大优化size。虽然生成了一个.hex文件,但把程序下载到板上后,使用ping
- 64331351 stm32/stm8
- 改造4-20mA两线制无源数显表第九帖(硬件照片)
- 搞到半夜了,终于把所有硬件都准备齐,先给个照片吧,明天再收官软件总调。目标仪表由电流源驱动并处于测电流模式:硬件合影:总合影图中左下绿板为自制实验板,上半部是光耦隔离板,本项目最终用板;下半部分是针对需要改造对象仪表主板上应用的主控芯片--ATMEL单片机ATMega329而选用的同厂家芯片ATMega88,为尽量接近仪表所采用芯片便于模拟实际效果,主要测试串口隔离通信
- 7905 安森美和安富利物联网创新设计大赛
- 数字万用表图纸
- 数字万用表图纸数字万用表图纸不错,顶一个!LZ有没有FLUKE19万用表图纸呀你要做万用表??!不是我自已一个万用表有点问题了,想找找这图纸Re:数字万用表图纸挣钱!!!Re:数字万用表图纸没签只好回帖Re:数字万用表图纸没钱只好回帖Re:数字万用表图纸好东西收下了好东西,好东东,谢了!下载来看看~~顶一下请教一下楼主,八位半电表目前国内有人做出来了吗?有什么技术上的难点?谢谢!非常感谢楼主的辛勤工作!先下留着,谢谢楼主了呵呵好东
- ailiaowjd PCB设计
- can总线通信
- 在WINCE下,想通过调用WIN32函数完成CAN总线通信功能,即通过CreateFile()获取CAN1的句柄,再通过调用ReadFile()和WriteFile()进行收发操作,大概思路就是这些,谁做过类似的项目,最好有具体的源码,兄弟我感激不尽!can总线通信帮顶一下.源码没有,只能帮顶。引用楼主chenglidexiaoxue的帖子:在WINCE下,想通过调用WIN32函数完成CAN总线通信功能,即通过CreateFile()获取CAN1的句柄,再通过调用ReadFile
- jjphero 嵌入式系统
- 刚发现ST的旧网站还可以用,直接通过IP访问
- http://211.100.26.51/只是不知道还会不会update刚发现ST的旧网站还可以用,直接通过IP访问前几个页面真他妈快,不过到里面就没东西了,估计转移了只能看看页面,下载链接都无效了这是来自路由服务器的缓冲区,需要获取具体文件时就会发现原服务器不存在了。哈哈,还不知道看来大伙还是比较怀念旧网站
- 64331351 stm32/stm8
设计资源 培训 开发板 精华推荐
- 【课程设计】基于单片机的机械时钟
- LT3973IDD-5 1.8V 降压转换器的典型应用
- LTC3859AIUHF 高效率、宽输入范围、双路 5V/8.5V 降压/升压同步转换器的典型应用电路
- AD8075-EVAL,AD8074评估板,双电源运算放大器
- PCB 尺子
- 鼠标连点改装件,
- EVAL-ADF7012DB3,ADF7012 ISM 频段发射器评估板,单芯片低功耗 UHF 发射器
- PTN5100 USB Type-C供电PHY和协议IC的典型应用
- 具有内置诊断功能的 TDA7563BPD 4 x 50W 多功能四路功率放大器的典型应用电路
- LT3470ITS8 12V 降压转换器的典型应用电路