精华内容
下载资源
问答
  • 满意答案attis542014.11.27采纳率:41%等级:12已帮助:11315人我们用汇编语言写单片机延时10ms的程序(用的是12MHz晶振的MCS-51),可以编写下面的程序来实现:MOVR5,#5①D1:MOVR6,#4②D2:MOVR7,#248③DJNZR7,$④...

    满意答案

    02ae427d08e371d7e90d5b995e828d6d.png

    attis54

    2014.11.27

    02ae427d08e371d7e90d5b995e828d6d.png

    采纳率:41%    等级:12

    已帮助:11315人

    我们用汇编语言写单片机延时10ms的程序(用的是12MHz晶振的MCS-51),可以编写下面的程序来实现:MOVR5,#5①D1:MOVR6,#4②D2:MOVR7,#248③DJNZR7,$④DJNZR6,D2⑤DJNZR5,D1⑥RET⑦这个延时程序共有七条指令,现在就每一条指令执行的次数和所耗时间进行分析:第一条,MOVR5,#5在整个程序中只执行一次,且为单周期指令,所以耗时1μs,第二条,MOVR6,#4看⑥的指令可知,只要R5-1不为0,就会返回执行这条指令,共执行了R5次,共耗时5μs,第三条,MOVR7,#248同第二条类似,只要R6-1不为0,就会返回执行这条指令,同时受到外部循环R5的控制,共耗时R5*R6*1=20μs,第四条,DJNZR7,$只要R7-1不为0,就执行这条指令,同时受到外部循环的控制,由于该指令是双周期指令,共耗时为R7*R6*R5*2=9920μs,第五条,DJNZR6,D2只要R6-1不为0,就反复执行此条指令(内循环R6次),又受外循环R7的控制,共耗时R6*R5*2=40μs,第六条,DJNZR5,D1只要R5-1不为0,就反复执行此条指令,耗时为R5*2=10μs,第七条,RET此指令为双周期指令,耗时为2μs,我们也要考虑在调用子程序时用到LCALL指令,耗时2μs,最后可以得到总的延时为:1+5+20+9920+40+10+2=9998μs=10ms我们可以总结延时总时间的公式:延时总时间=[(2*一层循环次数+3)*二层循环次数+3]*三层循环次数+3注意此公式只适用于三层以内的循环

    00分享举报

    展开全文
  • 单片机晶振频率与波特率

    千次阅读 2018-05-17 20:52:28
    晶振频率与周期 振荡周期:石英振荡器的振荡周期,频率的...机器周期:单片机完成一次完整的具有一定功能的动作所需要的时间周期,1个机器周期=6个状态周期=12个振荡周期,如石英频率12MHz12MHz12MHz,则一个...

    晶振频率与周期

    振荡周期:石英振荡器的振荡周期,为频率的导数,如石英频率为 12MHz 12 M H z ,在振荡周期为 1/12us 1 / 12 u s

    状态周期:单片机完成一个最基本动作需要的时间周期,1个状态周期=2个振荡周期

    机器周期:单片机完成一次完整的具有一定功能的动作所需要的时间周期,1个机器周期=6个状态周期=12个振荡周期,如石英频率为 12MHz 12 M H z ,则一个机器周期为 1us 1 u s

    指令周期:执行完某条指令所需要的时间周期,一般指令需要1~4个机器周期

    晶振频率与波特率

    波特率是指串行端口每秒内可以传输的波特位数,如标准的9600是指每秒可传送9600个二进位,一个字节要8个二进位,如用串口模式1来传输,加上起始位和停止位,每个数据字节要占用10个二进位,因此9600波特率用模式1传输时,每秒传输的字节数是9600/10=960字节。串口通讯中,一个有四种工作方式,如下图

    这里写图片描述

    方式0和方式2的波特率
    方式0的波特率是固定的,一个 12MHz 12 M H z 的晶振,其波特率为 1M 1 M
    方式2的波特率是固定在 fosc/64 f o s c / 64 fosc/32 f o s c / 32 ,具体取决于PCON寄存器中的SMOD位

    方式1和方式3的波特率
    方式1和方式3的波特率是可变的,取决于定时器1或2的溢出速率,计算公式为:

    bound=(2SMOD/32)(fosc/12)/(256TH1) b o u n d = ( 2 S M O D / 32 ) ∗ ( f o s c / 12 ) / ( 256 − T H 1 )

    可根据此公式计算TH1的值,对于 9600 9600 波特率,晶振分别为 11.0592MHz 11.0592 M H z 12MHz 12 M H z ,SMOD设为1,,代入上式:
    11.0592MHz: 11.0592 M H z :
    9600=(2/32)(11.0592M/12)/(256TH1) 9600 = ( 2 / 32 ) ∗ ( 11.0592 M / 12 ) / ( 256 − T H 1 )
    TH1=250 T H 1 = 250

    12MHz: 12 M H z :
    9600=(2/32)(12M/12)/(256TH1) 9600 = ( 2 / 32 ) ∗ ( 12 M / 12 ) / ( 256 − T H 1 )
    TH1=249.49 T H 1 = 249.49

    上面的计算可以看出,使用 12MHz 12 M H z 晶振算出来的TH1不为整数,而TH1的值只能取整数,这样就会有一定的误差存在而不能产生精确的 9600 9600 波特率。

    展开全文
  • 已知8051单片机的时钟频率为6MHZ,通过定时器1的工作方式1在P1^1引脚输出一个1KHZ占空比60%的矩形波。 已知条件分析: 1、时钟频率6MHZ,从这里我们可以得出它的机器周期1/f=1/6us; 2、定时器1,工作方式1,...

    题目:

    已知8051单片机的时钟频率为6MHZ,通过定时器1的工作方式1在P1^1引脚输出一个1KHZ占空比为60%的矩形波。

    已知条件分析:
    1、时钟频率6MHZ,从这里我们可以得出它的机器周期为1/f=1/6us;
    2、定时器1,工作方式1,那么对应TMOD寄存器也就是0x10;
    3、输出一个1KHZ占空比60%,这里其实有两个条件,第一个输出1KHZ,他告诉我们输出的波形周期是1/f=1ms,然后是占空比,推出高电平为1ms*60%=600us,那么低电平就是400us;
    4、机器周期=时钟周期*12=2us;
    5、定时器工作方式1:定时时间=(65536-初值x)*机器周期,可算出初值为65486,即计数个数N为50;
     

    编程:

    //已知8051单片机的时钟频率为6MHZ
    //通过定时器1的工作方式1在P1^1引脚输出一个1KHZ占空比为60%的矩形波。
    #include <reg52.h>
    #define uint unsigned int  
    #define uchar unsigned char
    sbit wave=P1^1;
    
    static uint count=0;
    
    void Timer1Init()
    {
    	TMOD |= 0x10;
    	TMOD &= 0xf0;
    	TH1 = (65536-65486)/256;//定时100us
    	TL1 = (65536-65486)%256;
    	EA = 1;
    	ET1 = 1;
    	TR1 = 1;
    }
    
    void main()
    {
    	Timer1Init();
    	while(1);
    }
    
    void Timer1() interrupt 3
    {
    	TH1 = (65536-65486)/256;
    	TL1 = (65536-65486)%256;
    	count++;
    	if(count==6)
    		wave=0;
    	if(count==10)
    	{
    		wave=1;
    		count=0;
    	}
    }

     

    展开全文
  • 在设计51系列的单片机系统时,一般选用11.0592MHz的晶振而不选用12MHz的晶振,什么?... 51单片机的串口工作方式有4种,方式0、方式2的波特率是固定的,只与单片机系统晶振频率有关。方式1、方式3波特...
            在设计51系列的单片机系统时,一般选用11.0592MHz的晶振而不选用12MHz的晶振,为什么?12M的晶振,振荡频率明显高于11.0592M的,按理说12MHz的晶振可以提高单片机的性能,那么我们为什么不用12M的呢?这个问题与单片机的串口波特率有关。
    


            51单片机的串口工作方式有4种,方式0、方式2的波特率是固定的,只与单片机的系统晶振频率有关。方式1、方式3波特率是可变的,不止与系统晶振频率有关,还与定时器T1有关(为什么是T1呢?因为51单片机的波特率发生器只能由定时器T1或定时器T2产生,由于我们使用的是STC98C52单片机,是标准51架构的单片机没有T2模块。)


            对于串口通信来讲最常用的是方式1,以下以串口的模式1来分析。由串口发送原理知,串口发送一次,实际上要发,1位起始位,8位数据位,1位结束位。由于使用模式1没有第9位数据位,所以,串口发送一次,一共要发10位数据,有一点要注意,在串口发送数据时,两次发送之间是没有累计误差的。


    串口工作在方式1下的波特率计算公式为:
    Baud = ((2^SMOD)/32)*(T1定时器溢出率)
    其中SMOD为寄存器PCON的最高位,当SMOD = 0时,串口通信方式1、2、3波特率正常;当SMOD = 1时,串口通信方式1、2、3波特率加倍。

    我们这里以不加倍,即SMOD = 0为例。


    还有一个问题,由于串口方式1要用到T1定时器,而T1定时器也有4种工作方式,那么用哪一种工作方式呢?
    方式0,兼容8048单片机的13位定时器,现在很少用到了,不予考虑;方式3,禁用定时器1,自然也不行;方式1、2都可以使用,那么用哪个更好呢?答案是用方式2,因为如果使用方式1,在中断中手动装载初值的方法来求溢出率的话,由于在进入中断、装值、出中断这个过程中,很容易产生时间上的微小误差,当多次操作时微小误差不断累积,终会产生错误。而方式2,由于当定时器计满溢出后单片机自动为其装载初值,并且无需进入中断服务程序进行任何处理,这样定时器溢出的速率就会相对更稳定。
    综上所述,我们这里使用串口模式1、定时器模式2、SMOD = 0,由此查阅数据手册,得到以下计算公式:
    Baud = Fosc/(256 - REDLOAD)/32/12
    Fosc = 晶振频率
    RELOAD = 自动重装载值
    上述公式可以改写为
    Baud = Fosc/(256 - RELOAD)/2/16/12

    有几点注意一下,由图知:



            51单片机串口工作在方式1,上时,给串口使用的时钟频率要先除2,再除16,为什么要除2呢?因为实际上对于单片机的串口及外部的通信模块来说,单片机的晶振频率即使在12分频后,依然太快,所以先除2,降低串口模块所使用的的时钟频率。为什么要除16呢?因为在串口通信中为了保证所接收的数据的正确性,先对每位信号采集16次,再取其中的7、8、9次,如果有两次是高电平,就认定这一位是1,如果有2位是低电平,就认定这一位是0,所以,公式中频率要除16,。至于为什么要除12是因为公式中的频率Fosc是晶振频率,但是单片机所使用的的频率是经过了12分频的。所以对单片机而言一个机器周期等于12个时钟周期,为了理解上诉公式,有以下知识点需了解:

    1个时钟周期  =1/晶振周期 = 1/Fosc

    1个机器周期 =  12*(1/Fosc)

    定时器T1的计数值每经过一个机器周期加1,即每经过12*(1/Fosc)秒,TL1加1,当TL1等于256就溢出,TH1将值重新赋给TL1,TL1开始重新计数。

    如此我们设经过Y个机器周期TL1溢出,则:

    Y*(12/Fosc) = (1/Baud)/2/16

    Y =Fosc/Baud/32/12

    由于使用T1的模式2,所以,设自动重装载值为RELOAD,则:

    RELOAD= 256 – Y

         = 256- (Fosc/Baud/32/12)

    Baud =Fosc/(256 - RELOAD)/32/12

    由高中物理知识知,误差等于实际值减理论值,再除理论值,再乘以100%,所以误差计算公式为:

    Error= ((Baud – Baud0)/Baud0 )*100%

    Baud0= 标准波特率

    Baud =实际波特率

     

    综上所述,可以得到以下公式:

    RELAOD= 256 – INF(Fosc/Baud0/32/12   +  0.5)

    Baud =Fosc/(256 - RELOAD)/32/12

    Error= (Baud – Baud0)/Baud0  * 100%

     

     

    RELOAD= 自动重装载值

    Baud0= 标准波特率

    Baud =实际波特率

    Fosc =晶振频率

    Error = 偏差

    INF()表示取整运算(RELOAD只能为整数),即去掉小数,0.5可以达到四舍五入的目的。

    当Baud0 =9600时,使用12MHz晶振:

    RELOAD= 256 – INF(Fosc/Baud0/32/12  +  0.5)

         = 256 - 3

         = 253

    Buad =Fosc/(256 - RELOAD)/32/12

       = 12 * 10^6/3/32/12

       = 10416.67

    Error= (Buad – Buad0)/Buad0 * 100%

        =8.51%

    当Baud0 =9600时,使用11.059200MHz晶振:

    RELOAD= 256 – INF(Fosc/Baud0/32/12    +  0.5)

                 = 253

    Buad =Fosc/(256 -RELOAD)/32/12

              = 9600

    Error = 0


     

            由上图知,理论上,要使采集的数为正确的,则第8位必须正确,则允许发送一字节累加误差不能超过50%,单个的位误差不能超过50/10*100% = 5%,由此可知在9600的波特率下,使用12MHz的晶振时,单个位超过5%,必定会出现传错的位。

    实际上,单位误差控制在2%以内可以比较可靠的通信,超过5%串口通信就不可靠了,附上常用波特率使用12MHz晶振和11.0592MHz晶振的误差表:





            由表知,使用12MHz的晶振在2400波特率下还是可以忍受的,但是超过2400后通信变得极不可靠。


    注:
            关于通信波特率为什么要用4800、9600、19200等类似的数,有一种说法是,根据电、传输介质等的物理特性给串口设备的要求:
            为了保证有效通讯,根据电、传输介质等的物理特性结合串口设备的使用要求,确定RS232最大传输速率只能是115200,然后逐级二分得到57600、28800、19200。。。。为适应这些速率设计的相应的晶振频率。
    另一种说法是,这是由电信线路特性决定的:
    电话线路的带通是300—3KHz,当时HAYES先搞得modem,所以用的2400Hz信号,对应波特率是2400,由于基本频率确定了,以后采用的提高通信速率的方法都是2400基础上倍频的,所以形成了9600、19200。。。。
    不管哪种说法都是先有波特率在有晶振频率的,也就是,波特率是前人在试验下得出的最佳的通信速率,我们使用的时候直接用现有的通信速率就行,但是要注意单片机使用的晶振频率,使用时会不会使串口产生误差,如果误差太大就会产生通信错误。


    2018/4/1 青岛理工大学琴岛学院计算机工程系 -- 离远,本文为原创,转载请注明出处。


    参考文献:
    《手把手教你学51单片机(C语言版)》清华大学出版社,宋雪松、李冬明、崔长胜编著
    《51单片机C语言教程——入门、提高、开发、拓展全攻略》电子工业出版社,郭天祥编著
    STC89C52的数据手册
    参考网络资料:


    https://wenku.baidu.com/view/c1ca295684868762cbaed597.html
    http://blog.sina.com.cn/s/blog_6202cb4101011udd.html
    http://bbs.21ic.com/icview-207428-1-1.html
















    展开全文
  • 单片机晶振频率(CPU频率)计算HZ=1/T,电脑处理速度频率也是这么来的,从硬件来看HZ代表单位时间处理任务的多少,显然HZ越高,单位时间内处理的任务越多,故就像玩英雄联盟,HZ高的,延迟小 传输速率计算 1s传输的...
  • 单片机开发板在成型之时,已经确定了相应的晶振频率,51单片机最常用的有11.0592MNz、12MHz。 2、时钟周期 时钟周期=晶振频率的倒数,晶振频率的值即时钟频率的值。 3、机器周期 在计算机中,通常将一条指令的执行...
  • 51系列单片机定时/计数器工作方式,波特率计算,晶振频率12MHz与11.0592MHz应用区别,
  • 什么51单片机爱用11.0592MHZ晶振

    千次阅读 2020-01-19 10:04:55
    其一:因为它能够准确地划分成时钟频率,与UART(通用异步接收器/发送...用51单片机的定时器做波特率发生器时,如果用11.0592Mhz晶振,根据公式算下来需要定时器设置的值都是整数;如果用12Mhz晶振,则波特率都是有...
  • 一、晶振频率 ...1、英文全称:Clock Cycle,为晶振频率12Mhz倒数。 2、时钟周期是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。 3、时钟周期 = 晶振周期 = 振荡周期...
  • 单片机晶振的作用

    2021-01-20 06:14:03
    如果一个单片机选择了12MHz晶振,它的时钟周期是1/12us,它的一个机器周期是12×(1/12)us,也就是1us.  MCS-51单片机的所有指令中,有一些完成得比较快,只要一个机器周期就行了,有一些完成得比较馒,得要2个机器...
  • 在初学单片机的时候,...如果一个单片机选择了12MHz晶振,它的时钟周期是1/12us,也是一个晶振周期。它的一个机器周期是12×(1/12)us,也就是1us。机器周期不仅对于指令执行有着重要的意义,而且机器周期也是单片机
  • 8051单片机系统中,已知振荡频率为12MHz,用定时/计数器T1,实现从P1.1产生周期2s的方波。C语言进行编程。从P1.1输出周期2s的方波,只须P1.1每1s取反一次则可。当系统时钟12MHZ,定时/计数器T1工作于方式1时,...
  • stm32F4修改时钟频率,更换8MHz晶振

    千次阅读 2020-06-21 19:18:17
    stm32F4修改时钟的方法和stm32F103修改时钟的方法不大一样,毕竟库...F4要修改时钟,首先确定外部晶振频率 如果是25MHz外部晶振,需要内部168MHz的运行速度。那么不用更改,因为stm32F4的标准库中默认就是25M晶振,...
  • 本文仅以学生角度总结定时器的学习当中的问题。...**eg:**晶体频率为12MHZ,则代表1秒振荡12M次,1次耗时1/12us, 一个机器周期就是12 * 1/12 = 1us 即1us一次计数 所以,一个16位定时器,从0计数到65535
  • 单片机晶振到底有什么关系?

    千次阅读 2020-02-28 12:12:57
    在初学单片机的时候,总是伴随很多有关于晶振的问题,其实晶振就如同人的心脏,是血液的脉搏。把单片机晶振问题搞明白了,51单片机的其他问题迎刃而解。 什么是晶振 晶振一般叫做晶体谐振器,是一种机电器件,是...
  • 如果一个单片机选择了12MHz晶振,它的时钟周期是1/12us,它的一个机器周期是12×(1/12)us,也就是1us.  MCS-51单片机的所有指令中,有一些完成得比较快,只要一个机器周期就行了,有一些完成得比较馒,得要2个机器...
  • STM32 晶振 系统时钟8MHZ和72Mhz的原因

    千次阅读 2018-01-17 14:37:00
    1、自己画的板子和淘宝买的最小系统系统时钟不一致,自己画的是8Mhz,HSE失败;最小系统板72Mhz 2、最小系统板在程序1运行仿真的时候,查看peripherals->Power,Reset and Clock Control(PRCC)是72MHZ,在程序...
  • 51单片机晶振与定时器

    千次阅读 2020-10-04 20:54:15
    晶振与定时器晶振晶振工作原理晶体单频振荡产生时钟脉冲合理的创建标题,...晶振-晶体震荡器,主要用于产生高度稳定的信号用于单片机时钟 晶振工作原理 晶振的工作原理–压电效应:在晶体两级外加电压后,晶体会发生形
  • 其中晶振已经讲解了,而12T指的是将12MHz频率进行分频除以12 达到1MHz 因为51单片机的时钟频率为1MHz 也就是一秒能处理1除以1000条指令 这就有一个问题什么不用直接用1MHz晶振?原因是1.自然界没有你想要多少...
  • 假如我的单片机晶振频率是12MHz,那么晶振单位时间发出的脉冲则: 12MHz=12∗106(s/个) 12MHz = 12 * 10^{6} (s/个) 12MHz=12∗106(s/个) 时钟周期与脉冲的关系 时钟周期脉冲 以一个时钟周期例,那么...
  • 分析单片机晶振大多11.0592的原因

    万次阅读 2016-12-22 19:04:42
    单片机晶振大多11点0592的原因: 1.这里有郭天祥老师的解释: 2.分析: 但是,在这里博主还是存在一些疑问,什么不是其他数呢?或者说11.0592M这个数则么产生的? 我们假定0-12_000_000之间有一个数满足以下...
  • 晶振是什么?全称是石英晶体振荡器... 一,什么51单片机爱用11.0592MHZ晶振? 其一:因为它能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)量常见的波特率相关。特别是较高的波特率(19600,19200),
  • 晶振是什么?全称是石英晶体振荡器,是... 一,什么51单片机爱用11.0592MHZ晶振? 其一:因为它能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)量常见的波特率相关。特别是较高的波特率(19600,19200
  • 晶振是什么?全称是石英晶体振荡器,是一种... 一,什么51单片机爱用11.0592MHz晶振? 其一:因为它能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)量常见的波特率相关。特别是较高的波特率(19600,19200)
  • STC单片机不同晶振时1MS精确延时程序
  • 单片机定时一秒程序(晶振12MHZ

    千次阅读 2020-11-16 11:14:48
    $MOD52 ; This includes 8052 definitions for the Metalink assembler ORG 0000H RESET:LJMP MAIN ORG 000BH LJMP ITOP ORG 1000H MAIN:MOV SP,#60H MOV B,#14H MOV TMOD,#01H MOV TL0,#0B0H ...M.
  • 要求:晶振为12M,用T0做定时器,在P1的低四位输出四种频率的方波: P1.3 = 1.25kHz、P1.2 = 2.5kHz、P1.1 = 5kHz、P1.0 = 10kHz 另外,P1.6、P1.7的输出做四选一数据选择器的选择位,它们由P3.0按键控制
  • 单片机晶振是普遍存在的,那么晶振为什么这么必要,原因就在于单片机能否正常工作的必要条件之一就是时钟电路,所以单片机就很需要晶振。电子学习资料大礼包​mp.weixin.qq.com打个比方来说:晶振好比单片机的...
  • 这个代码的时序调整的比较好,抗干扰能力强 晶振24Mhz针对ds18b20时序的问题,完美解决,什么单片机都可以参考以下程序,每一部分的延时都很明确#include &lt;STC15F2K60S2.H&gt;#include "...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,874
精华内容 1,949
关键字:

单片机系统晶振频率为6mhz