您的位置 首页 软件

51单片机定时器形式2与波特率的使用

51单片机定时器模式2与波特率的应用-一般来说,我们都是采用定时器1的模式2(自动重装模式)来作为波特率发生器的,同理,定时器1的中断也就被我们遗弃了,因为为了波特率产生的时候不会受到干扰(如果定时器1有中断函数,那么处理中断函数会关闭定时器1中断,这时候波特率发生器就处于关闭状态了)。

这儿咱们首要说的是波特率和定时器2的运用。

一般来说,咱们串口通讯用到的都是异步串行通讯,作业的办法为办法1.

办法1即为发送一个完好的信号为10个bit.起始信号为低电平,停止信号为高电平,串口通讯的两根线在往常时分都是处于高电平状况,当一旦有数据要进行转发的时分,电平拉低,通讯芯片立刻对信号进行监听。这姿态就能正常收发数据了。

一般来说,咱们都是选用定时器1的形式2(主动重装形式)来作为波特率发生器的,同理,定时器1的中止也就被咱们遗弃了,由于为了波特率发生的时分不会遭到搅扰(假如定时器1有中止函数,那么处理中止函数会封闭定时器1中止,这时分波特率发生器就处于封闭状况了)。依据STC给咱们的文档,定时器1所具有的功用是比定时器2更强壮的,所以,咱们更倾向于把定时器1作为一个正常的中止定时器运用,而经过定时器是用阐明也可以了解,定时器2的三种

51单片机定时器形式2与波特率的运用

用处:

1.捕获形式,简单点说便是检测外部引脚跳变时刻,在整个负跳变时期记录下地点数值,然后请求中止,咱们人工读取数值,得到波形宽度。

2.主动重装形式。跟定时器01的办法2相同,不过这时分他的定时器规模可以到达2^16,而且这儿是用的是硬件重载,所以不存在推迟效果,假如咱们要运用在对精度有严厉要求,而且苦恼于定时器01只能重装到2^8=256,那这个定时器的确便是很强壮的挑选。

3.波特率发生器,这儿跟定时器1的波特率发生器是相同的,同理,他运用的也是主动重装形式,不过这儿是运用的是16位的主动重装,这或许也是他其间的长处之一吧,波特率变化规模很广。

关于波特率:波特率便是用来界说串口通讯时分每秒传送的数据量,用bps表明,像咱们界说的波特率为600,即每秒发送600个二进制位,而咱们每个字符占用十个二进制位,所以咱们一秒总共可以发送6个二进制位。

关于波特率选定:一般来说,咱们是选用低一点的波特率来进行通讯,由于高的波特率假如在12MHZ的晶振作业形式下,会发生很大的差错,假如时刻长了,会导致数据没有办法对上时钟而导致通讯乱码。而且高的波特率由于传送的数据量大,在线的间隔拉长的时分,简单发生很严重的搅扰,所以仍是优先挑选低波特率进行通讯。

关于波特率和定时器2:定时器2作为波特率发生器的时分,是经过状况位的设定,来攫取定时器1的波特率发生器的效果,所以这时分咱们可以经过设定,让定时器仅仅作为咱们程序单纯中止的用处,然后定时器2作为专门的波特率发生器,这时分咱们不必设定定时器2的中止,而且当初始化之后,就不必去管定时器2的中止了,咱们要注意的仅仅串口中止,即通讯电平拉低那一瞬间所发生的中止请求。同理,串口中止跟定时器2中止是彻底不同的,这儿咱们不需求运用定时器2中止,定时器2溢出的时分,会履行两种功用,一便是发生定时器2中止,别的一个是会向波特率发生器发送溢出信号,这时分发生器接纳到这个信号的时分,主动进行时钟校正,发生一个bps的时钟信号,所以波特率发生器是这么来的,定时器2说简单点便是用来决议时钟信号的波形宽度的。溢出率越高,那么同一个时刻段里边发生的时钟信号也就越密布,发送数据同步了时钟信号,同理也就可以发送更多的数据。

经过上图可得,在600bps的状况下,T2的主动重装值为FD8F.

经过上图的时序图,咱们也可以明晰的得到,在上位机和下位机,下位机的时钟频率是由程序规则的,而上位机的时钟频率是由人工设定的,咱们只需知道,两个时钟频率是要彻底共同的,否则收发数据没有办法正常进行。

(发送)当send信号拉低的时分,txd也拉低表明要进行数据通讯,这时分发送的数据在每个时钟信号高电平的时分进行改换,在时钟信号电平的时分安稳,这姿态发送出去的数据就会严厉有固定的电平波长和高电平波长,当上位机进行接纳到时分,当他检测到接纳端的电平拉低的时分也对时钟信号进行同步,把时钟信号的高电平同步到数据接纳端第一次电平拉低时刻,然后在时钟信号的低电平期间进行数据收集,比方第第二个时钟信号低电平表明的是这时分数据端的电平状况表明的是数据的第三个bit正在等候捕获,所以,假如时钟有必要严厉共同便是这个原因。当整个进程完结的时分,TI置位,表明接纳完结,所以咱们可以一向监听TI的状况,同理,置位状况下要记住给他人工清零。

(接纳)接纳会有点不同,尽管他也是在时钟同步的状况下进行,可是他是在shift为高电平期间捕获信号,(上位机或许也是这种状况,暂时没有找到更清晰的材料),每个bit的改换时刻很短,安稳时刻很长,一般来说他是在时钟信号低电平中心进行信号捕获的。当整个进程完结的时分,RI置位,表明接纳完结,所以咱们可以一向监听RI的状况,同理,置位状况下要记住给他人工清零。

下面咱们经过一小段程序来验证下上面的理论:

1 #include 2 3 unsigned char flag,dat; 4 5 void Init(); 6 void SendData(); 7 void main() 8 { 9 //初始化10 //死循环11 Init();12 while (1)13 {14 if (flag==1)15 {16 SendData();17 }18 }19 }20 21 void Init()22 {23 //悉数设定完再敞开中止24 25 //定时器2设定26 RCAP2L=0x8F;//载入初值27 RCAP2H=0xFD;28 T2CON=0x34;//定时器2设定29 //串口设定SCON30 SCON=0x50;//SM01=01;REN=131 //敞开定时器2,串口中止,es,串口中止,et2,定时器232 RI=0x00;33 TI=0x00;34 IE=0x90;35 }36 37 void Uart_int() interrupt 4//外部触发38 {39 //封闭中止40 //定时器是用来发生波特率的,所以不必封闭 41 if (RI=1)//这时分接纳到数据42 {43 RI=0;44 dat=SBUF;45 flag=1;46 }47 }48 49 void SendData()50 {51 ES=0;//封闭串口中止52 SBUF=dat;53 while (!TI);54 TI=0;55 ES=1;//敞开串口中止56 flag=0;57 }

关于初始化:在初始化中,咱们要做的三件工作便是装备定时器的中止,第二敞开或封闭定时器,第三,进行初始值设定

可以看如下图:装备如下,敞开总中止EA,敞开ES串口中止,0x90

串口中止形式为SM01=01,REn=1,答应串行接纳,没敞开这个是没有办法进行上位机发送过来的数据进行接纳的。

同理,一开始咱们要对RI和TI进行初始化,由于我一开始没初始化如同老犯错,仍是清零下比较安全。

定时器2设定,RCAP为定时器的16位主动重载值.T2CON=0x34装备如下:

TF2:溢出清零

EXF2:外部中止清零

RCLK,TCLK:攫取定时器1的波特率发生器权力。

EXEN2:外部中止清零

TR2:置位定时器启动器

CT2:挑选内部时钟发生器

CP/RL2:随意。咱们清零

void Init(){ //悉数设定完再敞开中止//定时器2设定RCAP2L=0x8F;//载入初值RCAP2H=0xFD; T2CON=0x34;//定时器2设定//串口设定SCON SCON=0x50;//SM01=01;REN=1 //敞开定时器2,串口中止,es,串口中止,et2,定时器2 RI=0x00; TI=0x00; IE=0x90;}

这时分咱们应该设定中止4,即上位机发送过来的中止处理:

1 void Uart_int() interrupt 4//外部触发2 { 3 //定时器是用来发生波特率的,所以不必封闭 4 if (RI=1)//这时分接纳到数据5 { 6 RI=0; 7 dat=SBUF; 8 flag=1; 9 }10 }

首要,由于只需当上位机发送结束时分RI=1;这时分SBUF现已存储着上位机发送过来的数据了,咱们把它移走,而且进行flag标志方位位表明接纳到数据,请进行处理。

处理程序:

1 void SendData()2 {3 ES=0;//封闭串口中止4 SBUF=dat;5 while (!TI);6 TI=0;7 ES=1;//敞开串口中止8 flag=0;9 }

处理程序比较简单,就不过多赘述了。

最终经过串口通讯帮手看下咱们发送的数据时分可以接纳而且回来。

发送流程图如下:

小结:个人感觉,我是写程序写到一半才发现我的定时器1现已是用了,所以没办法,交换其他办法,定时器2的确很强壮,首要是它是比较独立的定时器,在程序移植的时分十分便利。由于只需修正总中止就可以了,便利许多。所以,假如有串口通讯需求的,定时器2是不贰挑选。

PS:下期将为我们带来这个的两个下位机通讯的一些深入研究。以这个为根底.

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/ruanjian/346799.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部