51单片机串口通信定时器初值怎么计算啊?公式和计算原理麻烦说一下!

来自:    更新日期:早些时候
51单片机用汇编语言设计1S延时子程序,晶振为12MHz。 (麻烦附上详细计算过程以及详细说明,~

如果单纯延时,可以用实验的办法,在keilc51里面仿真
void Delay1S(char n)
{
char i,j;
n=n*4;
for(;n;n--)
{
for(i=6;i;i++)
{
for(j=7;j;j++) // 一个循环约为1mS
;
}
}
}

看编译后的汇编:
C:0x0805 7D01 MOV R5,#0x06;j=1,1时钟
C:0x0807 0D INC R5;j++,1时钟
C:0x0808 ED MOV A,R5;A=R5,1时钟
C:0x0809 70FC JNZ C:0807;A=0?,2时钟
循环共249次,一个循环共需4个时钟周期,加上第一个赋值语句1周期。
共997uS,加上外层循环,一次约1mS,
如果要精确的延时建议采用中断:
#include "reg51.h"
//timer init
void initTimer(void)
{
TMOD=0x2;
TH0=0x6;
TL0=0x6;
}
int T250uS;
char T_mark;
//timer0/counter0 interrupt
void timer0(void) interrupt 1
{
//add your code here.
T250uS++;
T_mark=0;
}
void Delay1S(char n)
{
for(;n;n--)
for(T250uS=0;T250uS<4000;)
{
T_mark=1;
while(T_mark);
}
}
//the main fun
void main(void)
{
initTimer();
TR0=1;
ET0=1;
EA=1;
while(1)
{
Delay1S(1);
}
}

单息即每月本金×利率,复息每月(本金+已发生利息)×利率。

串口通信方式1和方式3,要用T1来控制波特率。

T1,使用定时方式2,其初始值,和晶振频率、波特率、SMOD的关系式如下:
T1初值 = 256 - fosc * (SMOD + 1) / (384 * 波特率)

--我不明白波特率跟这个定时器的关系。麻烦你详细一点!

这个关系,是由硬件决定的,只有搞微电子的,才能弄明白。
软件人员,编程的时候,会用这个公式即可,也没有必要弄明白这个。

基本上,也没有几个人,能够弄明白集成电路内部,究竟是怎么处理的。
其它的很多人,好像是很明白,其实都是在瞎编理由,包括写书的那些人。

//工作频率12M,所以定时器脉冲频率为1M=1000000
#define F 12 //时钟频率,单位MHz
#define BaudRate 1200
#define oTH1 (256-(((F*1000000)/384) / BaudRate)) // 定时器1计数器高字节初值

看看我的这个回答肯定会帮到你的。
http://zhidao.baidu.com/question/472019671?&oldq=1

我在网上也找到了这个答案,但是我不明白波特率跟这个定时器的关系。麻烦你详细一点!
就是计数器溢出一次的时间就是串口一位数据的时间


51单片机串口通信定时器初值怎么计算啊?公式和计算原理麻烦说一下!视频

相关评论:
  • 1527770683351单片机串口通信定时器初值怎么计算?公式和计算原理是什么?
    甄杨翟串口通信方式1和方式3,要用T1来控制波特率。T1,使用定时方式2,其初始值,和晶振频率、波特率、SMOD的关系式如下:T1初值 = 256 - fosc * (SMOD + 1) \/ (384 * 波特率)--我不明白波特率跟这个定时器的关系。麻烦你详细一点!这个关系,是由硬件决定的,只有搞微电子的,才能弄明白。软件人...

  • 1527770683351单片机串口通信定时器初值怎么计算啊?公式和计算原理麻烦说一下...
    甄杨翟串口通信方式1和方式3,要用T1来控制波特率。T1,使用定时方式2,其初始值,和晶振频率、波特率、SMOD的关系式如下:T1初值 = 256 - fosc * (SMOD + 1) \/ (384 * 波特率)--我不明白波特率跟这个定时器的关系。麻烦你详细一点!这个关系,是由硬件决定的,只有搞微电子的,才能弄明白。软件人...

  • 1527770683351单片机定时初值是多少?
    甄杨翟2、定时1ms=1*1000=1000us;3、工作在方式0下:最大计数值是2^13=8192;4、定时初值=8192-(1*1000)=7192;5、换算成十六进制数为:定时初值=1C18H。定时器中断是由单片机中的定时器溢出而申请的中断。51单片机中有两个定时器T0和T1。定时\/计数器T0和T1分别是由两个8位的专用寄存器组成,即...

  • 1527770683351单片机串口通信,定时器1,8位自动重装初值的求法
    甄杨翟1 公式一的结果为TH1=TL1=-3 2 公式二结果为TH1=TL1=253 无论使用哪个参数,程序都可以正常运行,这就对了。因为这俩数 表面上看着不同 实际是一样的。公式二结果为TH1=TL1=253 为正数,公式一的结果为TH1=TL1=-3 为负数 在计算机中要用补码表示,应表示为FDH=253.呵呵 这俩个数...

  • 1527770683351单片机定时器初值怎样计算
    甄杨翟周期是1us,因此定时1mS就是1000个脉冲,由于51定时器是加法计数,计数到最大值65536溢出,定时结束,产生中断,因此初值应该写为65536-1000,计数器分高8位和低8位,高8位的1代表256,低8位是不足256的那一部分,因此高8位初值为TH=(65536-1000)\/256,低8位TL=(65536-1000)%256。

  • 1527770683351单片机波特率计算公式和定时器初值
    甄杨翟在这个定时模式2下定时器1溢出速率的计算公式如下:   溢出速率=(计数速率)\/(256-TH1初值)   溢出速率=fosc\/[12*(256-TH1初值)]     上式中的“计数速率”与所使用的晶体振荡器频率有关,在51 芯片中定时器启动后会在每一个...

  • 1527770683351单片机的定时器初值到底是TH0 = (65536-x) \/256;还是TH0 = (65535...
    甄杨翟16位计数器,最大可写入65535 若定时1US(假设频率是12M),即来一个脉冲就溢出了,就该写入65535 刚好65536-1=65535 (65536-x) \/256是正确的 因既然要用定时器,定时时间不可能是0,所以 (65536-x) \/256结果不会是256 小于256的数都是可以装入的 对于TL0同样不会是256,因256的倍数除256...

  • 1527770683351定时器初值计算有什么简便算法吗?
    甄杨翟51单片机定时器初值计算:void main(void){ s1=1;TMOD=0x01; \/\/使用定时器T0的模式1 TH0=(65536-46083)\/256; \/\/定时器T0的高8位设置初值 TL0=(65536-46083)%256; \/\/定时器T0的低8位设置初值 函数功能:定时器T0的中断服务函数 void Time0(void ) interrupt 1 using 0 \/\/定时器T0...

  • 1527770683351单片机定时器初值公式
    甄杨翟2.12Mhz时,单周期指令时间为12\/fsoc=1us 方式1为16位定时\/计数器 故定时1ms为:TH0=(2^16-1000)\/2^8,TL0=(2^16-1000)%256 当为11.0592MHz时,单周期指令时间为12\/fsoc=12\/11.0592us 由于采用方式0,为13为定时器,TH0高8位和TL0的低5位 故定时1ms为:TH0=(2^13-1000\/(12...

  • 15277706833用51单片机串行通信传输数据,每秒传输一个十六位数据,定时器和波特率怎 ...
    甄杨翟TL0 =(65536-2500)%256; \/\/约2.50MS定时器初值 ET0 = 1;TR0 = 1; \/\/启动定时器 TR1 = 1; \/\/启动定时器 SM0 SM1 SM0 = 0; \/\/串口通信模式设置 0 0 = 0 SM1 = 1; \/\/ 0 1 = 1 REN = 1; \/\/串口允许接收数据 ES = 1; \/\/开串中断 ...

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网