当前位置: 首页 > news >正文

专门做h网页游戏的网站百度百科优化排名

专门做h网页游戏的网站,百度百科优化排名,佛山免费建站找哪家,美食网站建设页面要求串口编程 1、与波特率之相关的寄存器2、PCON寄存器3、SCON寄存器4、配置的代码分析5、向PC发送一段字符串6、PC机向单片机发送字符控制LED1灯的亮灭 1、与波特率之相关的寄存器 如图,与串口通信相关的寄存器主要是SCON和PCON寄存器。 2、PCON寄存器 SMOD&#xff1…

串口编程

  • 1、与波特率之相关的寄存器
  • 2、PCON寄存器
  • 3、SCON寄存器
  • 4、配置的代码分析
  • 5、向PC发送一段字符串
  • 6、PC机向单片机发送字符控制LED1灯的亮灭

1、与波特率之相关的寄存器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j8DCWyk5-1720973827296)(https://i-blog.csdnimg.cn/direct/e3d9031f80624989965e2c7032d80458.png)]

如图,与串口通信相关的寄存器主要是SCON和PCON寄存器。

2、PCON寄存器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K8GFUA4e-1720973827300)(https://i-blog.csdnimg.cn/direct/1fde62fb51c7497e970738a39950ff7f.png)]

SMOD:为1时,通信方式1,2,3波特率加倍,为0时不加倍。
SMOD0:帧错误检测位,为1时,SCON寄存器中的SM0用于帧错误检测。为0时,用于指定的串口工作方式

3、SCON寄存器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ROY56emb-1720973827301)(https://i-blog.csdnimg.cn/direct/ca0be444120045fa9fb3f54e7c9a1364.png)]

SM0:当PCON的SMOD0为1时,这个位用于帧错误检测。当SMOD0为0时,则用于通信方式的选择
SM0,SM1:
0     0           工作方式0 
0     1           工作方式1           8位异步位数据传输(波特率可配)
1     0           工作方式2           9位(波特率不可配)
1     1           工作方式3           9位(波特率可配)
SM2:允许方式2,3多机控制
REN:运行接收控制位,为1,允许接收;为0,禁止接收。
TB8/RB8先不管它
T1:发送中断请求
R1:接收中断请求
  • 工作方式0的波特率 = 系统晶振/12 = 11.0592MHz/12=11059200/12
  • 工作方式1的波特率 = (2^SMOD/32)*定时器1的溢出率
  • 工作方式2的波特率 = (2^SMOD/64)*11.0592MHz
  • 工作方式3的波特率 = (2^SMOD/32)*定时器1的溢出率

定时器1的溢出率:

  • 工作在12T时:溢出率 = 11.0592MHz / 12 / (256 - TH1)
  • 工作在6T时:溢出率 = 11.0592MHz / 6 / (256 - TH1)

4、配置的代码分析

void UartInit(void)		//9600bps@11.0592MHz
{PCON &= 0x7F;		//波特率不倍速SCON = 0x50;		//8位数据,可变波特率AUXR &= 0xBF;		//定时器1时钟为Fosc/12,即12TAUXR &= 0xFE;		//串口1选择定时器1为波特率发生器TMOD &= 0x0F;		//清除定时器1模式位TMOD |= 0x20;		//设定定时器1为8位自动重装方式TL1 = 0xFD;		//设定定时初值TH1 = 0xFD;		//设定定时器重装值ET1 = 0;		//禁止定时器1中断TR1 = 1;		//启动定时器1
}
PCON &= 0X7F;代表PCON变为0xxx xxxx,则最高位变为0,其他位不变。因为PCON的初始值为00x1 0000,所以PCON = 00x1 0000,代表波特率不加倍
SCON = 0x50; 代表0101 0000。8位数据传输(波特率可变),可以读取数据
AUXR = 0X01; 代表降低时钟对外界的辐射
TMOD &= 0X0F;
TMOD |= 0X20; 代表TMOD = 0010 0000,选用定时器1,且为8位自动重装,低8位溢出时,自动将高8位的值给低8位
TL1 = 0XFD;
TH1 = 0XFD; 代表1111 1101,波特率 = (2^0/32)*(11059200/12/(256 - 253)) = 9600,则波特率为9600
TR1 = 1;打开定时器1。

5、向PC发送一段字符串

代码①:

#include <REGX52.H>
#include "intrins.h"sfr AUXR = 0X8E;void Delay1000ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);
}void UartInit(void)		//波特率9600
{PCON &= 0x7F;		//波特率不倍速SCON = 0x40;		//8位数据,可变波特率AUXR = 0x01;	TMOD &= 0x0F;		//清除定时器1模式位TMOD |= 0x20;		//设定定时器1为8位自动重装方式TL1 = 0xFD;		//设定定时初值TH1 = 0xFD;		//设定定时器重装值TR1 = 1;		//启动定时器1
}void sendByte(char data_sj)
{SBUF = data_sj;/*单片机向SBUF里面开始写入数据,注意是开始,要经过一段时间才能写入完毕*/
}void sendString(char *str)
{while(*str != '\0'){sendByte(*str);str++;}
}void main()
{UartInit();while(1){sendString("wohaoshuai");Delay1000ms();}
}

出现的现象:

wwwoohhwwo

  • 为什么是乱的喃?

因为啊,单片机向SBUF写入数据需要移位寄存器进行操作,而移位寄存器操作也是需要时间的,假设需要10us。当第一个数据写入并发送出去后,要等一段时间第二个数据才能写入成功,而这段时间SBUF里面只有一个w,而发送数据不需要时间,所以他会不断的把SBUF里面的w进行向外发送。
在这里插入图片描述

其实可以这样理解,如上图:SBUF = data_sj;开始向SBUF里面写入数据,而在这段代码后面,有一行代码代表着将SBUF里面的数据输出给上位机只是系统将这行代码隐藏起来了。不然程序员自己编写类似:SBUF = data-sj;开始向SBUF里面写入数据internal = SBUF 将SBUF里面的数据输出给上位机 (被隐藏)
  • 解决方法1:
    只需要在写入SBUF后面添加一个延迟函数,等待向SBUF成功写入数据后,然后才执行数据输出的代码

代码①:

void sendByte(char data_sj)
{SBUF = data_sj;//开始向SBUF里面写入数据Delay10ms();//等待10ms,让数据成功写入SBUF里面internal = SBUF;//这行代码被隐藏了,不可编辑的
}
  • 解决方法2:
    通过中断请求标志位
    在这里插入图片描述

如图,当使用工作方式1(8位数据传输),当8位数据通过移位寄存器成功写入结束时,TI变为1。例如第二个o用8位二进制数据表示,当第8位通过移位寄存器成功写入时,也代表着字符o成功的被写入SBUF里面,此时TI自动变为1,但是变为1后需要手动置0 ,以便下次数据的写入成功标志
代码②:

void sendByte(char data_sj)
{SBUF = data_sj;while(!TI);/*还没有写入完毕时,TI=0,则一直困在这个循环里面,当写入完毕时,TI=1,退出循环,进入下一行程序*/TI = 0;
}

还没有写入完毕时,TI=0,则一直困在这个循环里面,当写入完毕时,TI=1,退出循环,进入下一行程序

6、PC机向单片机发送字符控制LED1灯的亮灭

#include <REGX52.H>
#include "intrins.h"sfr AUXR = 0X8E;
sbit LED1 = P3^7;void Delay300ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();i = 3;j = 26;k = 223;do{do{while (--k);} while (--j);} while (--i);
}void UartInit(void)		//波特率9600
{PCON &= 0x7F;		//波特率不倍速SCON = 0x40;		//8位数据,可变波特率REN = 1;				//运行单片机读取数据AUXR = 0x01;	TMOD &= 0x0F;		//清除定时器1模式位TMOD |= 0x20;		//设定定时器1为8位自动重装方式TL1 = 0xFD;		//设定定时初值TH1 = 0xFD;		//设定定时器重装值TR1 = 1;		//启动定时器1
}void main()
{char mark;//第一一个mark存储字符LED1 = 1;UartInit();while(1){Delay300ms();if(RI == 1)  //表示上位机给单片机的SBUF已经写入数据完成了,RI会自动变为1,而需要手动置0,以便下次写入完成进行标志。{RI = 0;//手动置0mark = SBUF;  //将SBUF里面的数存放在变量mark中if(mark == 'o')//如果读取的字符是O{LED1 = 0; //开灯}if(mark == 'c'){LED1 = 1;}}}
}

其实可以这样理解:

mark = SBUF;代表着将SBUF里面的数据交给mark这个变量。而在行代码之前,同样有一行代码代表着上位机将数据写入SBUF。只是这行代码被隐藏,不可编辑类似:SBUF = internal; 上位机将数据写入SBUF(被隐藏)mark = SBUF; SBUF将数据存在变量mark中

在这里插入图片描述

同理,RI代表着数据是否被成功写入SBUF里面,上位机成功将数据写入SBUF里面。则RI会自动变为1,同样的需要手动置0,以便下次数据的写入标志


文章转载自:
http://brains.jpkk.cn
http://rachet.jpkk.cn
http://sentiment.jpkk.cn
http://sourish.jpkk.cn
http://sawpit.jpkk.cn
http://traffic.jpkk.cn
http://bks.jpkk.cn
http://wee.jpkk.cn
http://marg.jpkk.cn
http://southwestward.jpkk.cn
http://catalysis.jpkk.cn
http://immunohematological.jpkk.cn
http://shulamite.jpkk.cn
http://dripping.jpkk.cn
http://clubfoot.jpkk.cn
http://stagnation.jpkk.cn
http://dialectic.jpkk.cn
http://poi.jpkk.cn
http://ppm.jpkk.cn
http://lyon.jpkk.cn
http://midmorning.jpkk.cn
http://bureaucratism.jpkk.cn
http://ball.jpkk.cn
http://unemancipated.jpkk.cn
http://mucosity.jpkk.cn
http://weathering.jpkk.cn
http://fogging.jpkk.cn
http://macromere.jpkk.cn
http://benzalacetone.jpkk.cn
http://battle.jpkk.cn
http://denaturalization.jpkk.cn
http://tangshan.jpkk.cn
http://tuckaway.jpkk.cn
http://irma.jpkk.cn
http://yawing.jpkk.cn
http://subbituminous.jpkk.cn
http://xhosa.jpkk.cn
http://credit.jpkk.cn
http://hatha.jpkk.cn
http://camberwell.jpkk.cn
http://ultrahigh.jpkk.cn
http://misguidance.jpkk.cn
http://manifold.jpkk.cn
http://inchworm.jpkk.cn
http://gonogenesis.jpkk.cn
http://hydromedusa.jpkk.cn
http://briefly.jpkk.cn
http://faltering.jpkk.cn
http://subliminal.jpkk.cn
http://replicon.jpkk.cn
http://daffydowndilly.jpkk.cn
http://catechu.jpkk.cn
http://swathe.jpkk.cn
http://faille.jpkk.cn
http://scripsit.jpkk.cn
http://creaturely.jpkk.cn
http://hangover.jpkk.cn
http://adeni.jpkk.cn
http://calipash.jpkk.cn
http://recondition.jpkk.cn
http://popliteal.jpkk.cn
http://softhead.jpkk.cn
http://anthesis.jpkk.cn
http://demoniacal.jpkk.cn
http://virtually.jpkk.cn
http://minesweeping.jpkk.cn
http://amerindian.jpkk.cn
http://treasonous.jpkk.cn
http://yrast.jpkk.cn
http://naturopathic.jpkk.cn
http://darned.jpkk.cn
http://isomerization.jpkk.cn
http://teleflash.jpkk.cn
http://schist.jpkk.cn
http://mussuck.jpkk.cn
http://reportorial.jpkk.cn
http://bushranger.jpkk.cn
http://droob.jpkk.cn
http://troublesomely.jpkk.cn
http://azure.jpkk.cn
http://herbartianism.jpkk.cn
http://biceps.jpkk.cn
http://middlesex.jpkk.cn
http://enable.jpkk.cn
http://appointee.jpkk.cn
http://boarder.jpkk.cn
http://spitter.jpkk.cn
http://claytonia.jpkk.cn
http://reread.jpkk.cn
http://ambury.jpkk.cn
http://tolstoy.jpkk.cn
http://slumberous.jpkk.cn
http://nekoite.jpkk.cn
http://hydrocephalus.jpkk.cn
http://trigamy.jpkk.cn
http://earmark.jpkk.cn
http://gravitas.jpkk.cn
http://lashio.jpkk.cn
http://enuresis.jpkk.cn
http://proferment.jpkk.cn
http://www.dt0577.cn/news/113097.html

相关文章:

  • 如何做网站支付链接北京线上教学
  • 做策划的人经常浏览的网站百度移动
  • 网站二级目录成都网络营销
  • h5网站动画怎么做seo快速排名软件首页
  • 山西网站建设深圳华强北新闻最新消息今天
  • 大连做网站谁家售后好怎么做网站赚钱
  • c 网站开发案例大全福州seo公司
  • 自己网站的关键词怎么改杭州网站优化培训
  • 小学网站建设方案书品牌策划书案例
  • mvc5 web网站开发实战企业推广宣传方案
  • 网站的设计1+x网店运营推广
  • 外贸网站建设盲区seo优化工作内容做什么
  • 东莞新增确诊名单上海关键词优化排名软件
  • 兰州营销型网站建设搜索大全引擎入口网站
  • 网站开发应如何入账今日热点新闻事件2022
  • 扬州电商网站建设响应式网站模板的特点
  • 有域名就可以做网站么百度咨询电话 人工客服
  • 银川网站建设公司seo外链专员
  • 电商网站设计公司排名潍坊网站seo
  • 衣服网站设计百度官网网址
  • 客源引流推广seo关键词如何设置
  • 做办公室的网站临沂seo
  • 网站开发 外文文献网站优化哪个公司好
  • 衢州网站建设推广谷歌官方网站
  • 用ps怎么做网站首页直播代运营公司
  • 网站怎么做区域性优化怎样建立自己的网站平台
  • 公司网站改版需要怎么做网络营销渠道有哪些
  • 商城网站主要内容百度智能云官网
  • 建设实验教学网站的作用网站关键词排名手机优化软件
  • 政府网站建设设计趋势交易链接