单片机51如果时钟频率 时钟周期期的频率为12MHZ,那么alu的信号频率为多少

设80C51单片机晶振频率为12MHZ,定时器作计数器使用时,其最高的输入计数频率应为?_百度知道
设80C51单片机晶振频率为12MHZ,定时器作计数器使用时,其最高的输入计数频率应为?
具体怎么求的,求详细过程
我有更好的答案
即一次负跳变,需要2个机器周期首先要知道,确认一次记数,即24个时钟周期或震荡周期;2*10^6=500khz,那么频率就是1/24=500khz;或者按照时间计算,晶振频率12M的2个机器周期即2us,则最高记数频率为12M&#47
采纳率:90%
0592/12us,12M时应该是11最快计数频率应该是单指令周期的倒数,晶振为11.0592M时,单指令周期是1us,它倒数是1085069HZ
最高计数频率!已经有满意答案了
为您推荐:
其他类似问题
晶振的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。> 问题详情
机器周期是80C51单片机工作的______单位,简称机周。一个机器周期含有______个时钟周期,当时钟频率为12MHz时,
悬赏:0&答案豆
提问人:匿名网友
发布时间:
机器周期是80C51单片机工作的______单位,简称机周。一个机器周期含有______个时钟周期,当时钟频率为12MHz时,一个机器周期为______μs。
您可能感兴趣的试题
1P0~P3口用作输入时,均须先______;用作输出时,P0口应______。2当CPU______时,ALE以时钟振荡频率______的固定频率输出。380C51扩展:I/O口从______存储空间扩展,从理论上讲,最多可扩展______个。4数据指针DPTR是一个______位的特殊功能寄存器,由______组成。
我有更好的答案
请先输入下方的验证码查看最佳答案
图形验证:
验证码提交中……
找答案会员
享三项特权
找答案会员
享三项特权
找答案会员
享三项特权
选择支付方式:
支付宝付款
郑重提醒:支付后,系统自动为您完成注册
请使用微信扫码支付(元)
支付后,系统自动为您完成注册
遇到问题请联系在线客服QQ:
恭喜你被选中为
扫一扫-免费查看答案!
请您不要关闭此页面,支付完成后点击支付完成按钮
遇到问题请联系在线客服QQ:
恭喜您!升级VIP会员成功
提示:请截图保存您的账号信息,以方便日后登录使用。
常用邮箱:
用于找回密码
确认密码:后使用快捷导航没有帐号?
【51单片机】基础学习资料整理(转)(对单片机感兴趣的一定要看看)
51单片机串口的问题
想问一下:单片机串口在接收的时候是怎么接收的?如上位机一次发送一个字符串,通过串口助手下发给单片机。用下面的程序
/******************************************************************/
/* 串口中断程序 */
/******************************************************************/
void UART_SER () interrupt 4
uchar T // 定义临时变量
if(RI) // 判断是接收中断产生
RI=0; // 标志位清零
Temp=SBUF; // 读入缓冲区的值
P1=T // 把值输出到 P1 口,用于观察
SBUF=T // 把接收到的值再发回电脑端
if(TI) // 如果是发送标志位,清零
单片机能够把上位机的数据全部接收后原样传输回去
------------------------------------
我修改了一下程序:,把上面的判断改为
if(RI) // 判断是接收中断产生
RI=0; // 标志位清零
Temp=SBUF; // 读入缓冲区的值
P1=T // 把值输出到 P1 口,用于观察
SBUF=T // 把接收到的值再发回电脑端
while(!TI);
即想每次读入缓冲区内容后,送回上位机,然后再送回一个字母o,以此来判断单片机读入缓冲区内容的是每次读一个字节还是能够一次性都读完,运行结果为:
& && &&&上位机发送,单片机传回的是o
看来单片机每次串口接收终端后,缓冲区中能把全部数据读入,但是SBUF只有一个字节,怎么会能够都读入进来呢?
-------------------------------------
把中断函数里面的内容继续修改为:
if(RI) // 判断是接收中断产生
RI=0; // 标志位清零
Temp=SBUF; // 读入缓冲区的值
P1=T // 把值输出到 P1 口,用于观察
SBUF=T // 把接收到的值再发回电脑端
while(!TI);
while(!TI);
运行结果为:
& && & 上位机用串口助手发送,单片机收到后,传回串口助手,内容显示为1o1o2o3o4o
这就不明白了。
上位机发送的数据单片机每次应该只能收到一个字符,然后下一个字符会触发一个新的接收中断,如此经过多次中断处理后才能收到完整的内容,不知道我这么理解是否正确。请指点,谢谢。
NE5532回复:
楼主在犯一个常见错误——在接收中断里面等发送,接收缓冲区溢出了咋办?
楼主:确实如此,但是
RI=0; // 标志位清零
Temp=SBUF; // 读入缓冲区的值
P1=T // 把值输出到 P1 口,用于观察
SBUF=T // 把接收到的值再发回电脑端
while(!TI);
怎么就能全部收到,而且最后能加一个字符o
NE5532版主:
在错误的东西基础上研究如何错误没有任何意义,正确只有一种,错误有无数种。你实在要找是怎么错的,可能找得到,但是对解决问题意义不大,用来培养自己熟悉单片机还成。
中断倒不是不能在里面做事,是看在做事的同时,外面还有没有事要做,如果没有,呆里面也没问题。具体问题具体分析,不能胡子眉毛一把抓。总的来说中断服务程序是尽量短。
串口通信,详细见:http://www.21ic.com/jichuzhishi/mcu/series//148218.html
1f.jpg (80.17 KB, 下载次数: 2)
10:53 上传
26.jpg (51.47 KB, 下载次数: 2)
10:53 上传
MCS-51单片机时序
一、时序:单片机时序是指单片机执行指令时应发出的控制信号的时间序列。这些控制信号在时间上的相互关系就是CPU的时序。它是一系列具有时间顺序的脉冲信号。
CPU发出的时序有两类:一类用于片内各功能部件的控制,它们是芯片设计师关注的问题,对用户没有什么意义。另一类用于片外存储器或I/O端口的控制,需要通过器件的控制引脚送到片外,这部分时序对分析硬件电路的原理至关重要,也是软件编程遵循的原则,需要认真掌握。
扩展阅读:什么是单片机的时序
二、时钟周期、机器周期和指令周期
1、 时钟周期:又称振荡周期。指为单片机提供定时信号的振荡源周期。是最小的时序单位。
振荡源的频率越高,单片机的工作速度越快。
时钟周期被分成两个节拍P1和P2。每个时钟周期的前半周期P1信号有效,这时CPU通常完成算术逻辑操作;在每个时钟的后半周期P2信号有效,内部寄存器与寄存器之间的数据一般在此状态发生。
2、 机器周期:定义为实现特定功能所需要的时间。机器周期按其功能来命名,如取指机器周期等。
MCS-51的机器周期时间是不变的,均为12个晶振周期或6个状态周期。分为S1P1,SIP2;S2P1,S2P2;等
3、 指令周期:执行一条指令的时间。
按指令执行的时间可分为:单周期、双周期和四周期(只有乘法和除法两条指令)。
时钟周期、机器周期和指令周期均是单片机时序单位。机器周期是单片机计算其它时间值(如波特率、定时器的定时时间等)的基础时序单位。
如MCS-51外接晶振为12MHz,则:
时钟周期= = =0.167
机器周期= = =1
指令周期=(1~4) =(1~4) =1~4us.
例:若单片机时钟频率为12MHz,计算定时2ms所需要的定时器初值。(设定时器工作在方式1,即模为)
分析:MCS-51有两个8位的计数器,每过来一个机器周期,计数器加1。当计数器从0FFFFH~0000H时,定时器自动产生溢出请求。故方式1的最大定时时间为Tmax=×T0,其中T0为是一个机器周期的时间。由于时钟周期的频率为12MHz,这里的。
Tmax=×T0=65536×1us=65.536ms。
现在要产生2ms的定时时间,故必须在计数器中预先放置一定的初值x,使:
(216-x)T0=2ms。
(-x)T0=2ms=2×10-3s
X=- =216-2×103=6H。
十进制数与二进制数、十六进制数快速转换方法
1、 若十进制数小于256,则用这个数除16,得到商和余数。若把这个十进制的商写成二进制形式,则就是二进制的高4位。把这个十进制的余数写成二进制的形式,则就是二进制的低4位。合在一起就是转换的8位二进制数。同样,若把这个十进制的商写成十六进制的形式,则就是二进制的高4位的十六进制表示,把这个十进制的余数写成十六进制的形式,则就是二进制的低4位的十六进制表示,合在一起就是转换成的十六进制表示。
2、 若十进制数大于256小于65536,则用这个数除256,得到商和余数,再分别用商和余数除16。商除16后,又得到商和余数,这个商和余数是十进制形式,写成十六进制就是高8位的高4位和高8位的低4位的十六进制形式。余数除16也得到商和余数,这个商和余数也是十进制,写成十六进制,就是低8位的高4位和低8位的低4位的十六进制形式。
例:求出下列十进制数的二进制和十六进制。
(1)212; (2)65365
212/16=13……4
若把13写成十六进制,为D,4写成十六进制,为4,则转换成十六进制为:
若把13写成二进制,为1101,4写成二进制,为0100,则转换成二进制为:
(这个商除16就是高8位,这个余数除16就是低8位)
255/16=15……15
(这个商就是高8位的高4位,余数就是高8位的低4位)
把商15写成十六进制为F,把余数15写成十六进制为F,故高8位的十六进制为:FFH;
85/16=5……5
(这个商就是低8位的高4位,余数就是低8位的低4位)
把商5写成十六进制为5,把余数5写成十六进制为5,故低8位的十六进制为:55F。
高8位和低8位合在一起即为这个十进制数的十六进制形式:
65365=FF55(H)。
化为二进制为:65365=FF55(H)=01010(B)。
一、时序:单片机时序是指单片机执行指令时应发出的控制信号的时间序列。这些控制信号在时间上的相互关系就是CPU的时序。它是一系列具有时间顺序的脉冲信号。
CPU发出的时序有两类:一类用于片内各功能部件的控制,它们是芯片设计师关注的问题,对用户没有什么意义。另一类用于片外存储器或I/O端口的控制,需要通过器件的控制引脚送到片外,这部分时序对分析硬件电路的原理至关重要,也是软件编程遵循的原则,需要认真掌握。
扩展阅读:什么是单片机的时序
二、时钟周期、机器周期和指令周期
1、 时钟周期:又称振荡周期。指为单片机提供定时信号的振荡源周期。是最小的时序单位。
振荡源的频率越高,单片机的工作速度越快。
时钟周期被分成两个节拍P1和P2。每个时钟周期的前半周期P1信号有效,这时CPU通常完成算术逻辑操作;在每个时钟的后半周期P2信号有效,内部寄存器与寄存器之间的数据一般在此状态发生。
2、 机器周期:定义为实现特定功能所需要的时间。机器周期按其功能来命名,如取指机器周期等。
MCS-51的机器周期时间是不变的,均为12个晶振周期或6个状态周期。分为S1P1,SIP2;S2P1,S2P2;等
3、 指令周期:执行一条指令的时间。
按指令执行的时间可分为:单周期、双周期和四周期(只有乘法和除法两条指令)。
时钟周期、机器周期和指令周期均是单片机时序单位。机器周期是单片机计算其它时间值(如波特率、定时器的定时时间等)的基础时序单位。
如MCS-51外接晶振为12MHz,则:
时钟周期= = =0.167
机器周期= = =1
指令周期=(1~4) =(1~4) =1~4us.
例:若单片机时钟频率为12MHz,计算定时2ms所需要的定时器初值。(设定时器工作在方式1,即模为)
分析:MCS-51有两个8位的计数器,每过来一个机器周期,计数器加1。当计数器从0FFFFH~0000H时,定时器自动产生溢出请求。故方式1的最大定时时间为Tmax=×T0,其中T0为是一个机器周期的时间。由于时钟周期的频率为12MHz,这里的。
Tmax=×T0=65536×1us=65.536ms。
现在要产生2ms的定时时间,故必须在计数器中预先放置一定的初值x,使:
(216-x)T0=2ms。
(-x)T0=2ms=2×10-3s
X=- =216-2×103=6H。
十进制数与二进制数、十六进制数快速转换方法
1、 若十进制数小于256,则用这个数除16,得到商和余数。若把这个十进制的商写成二进制形式,则就是二进制的高4位。把这个十进制的余数写成二进制的形式,则就是二进制的低4位。合在一起就是转换的8位二进制数。同样,若把这个十进制的商写成十六进制的形式,则就是二进制的高4位的十六进制表示,把这个十进制的余数写成十六进制的形式,则就是二进制的低4位的十六进制表示,合在一起就是转换成的十六进制表示。
2、 若十进制数大于256小于65536,则用这个数除256,得到商和余数,再分别用商和余数除16。商除16后,又得到商和余数,这个商和余数是十进制形式,写成十六进制就是高8位的高4位和高8位的低4位的十六进制形式。余数除16也得到商和余数,这个商和余数也是十进制,写成十六进制,就是低8位的高4位和低8位的低4位的十六进制形式。
例:求出下列十进制数的二进制和十六进制。
(1)212; (2)65365
212/16=13……4
若把13写成十六进制,为D,4写成十六进制,为4,则转换成十六进制为:
若把13写成二进制,为1101,4写成二进制,为0100,则转换成二进制为:
(这个商除16就是高8位,这个余数除16就是低8位)
255/16=15……15
(这个商就是高8位的高4位,余数就是高8位的低4位)
把商15写成十六进制为F,把余数15写成十六进制为F,故高8位的十六进制为:FFH;
85/16=5……5
(这个商就是低8位的高4位,余数就是低8位的低4位)
把商5写成十六进制为5,把余数5写成十六进制为5,故低8位的十六进制为:55F。
高8位和低8位合在一起即为这个十进制数的十六进制形式:
65365=FF55(H)。
化为二进制为:65365=FF55(H)=01010(B)。
51单片机外部中断的总结
时间: 16:55:32 来源:路遥电子博客 作者:
51单片机的外部中断有两种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一个机器周期检测到中断源口线为高电平,下一个机器周期检测到低电平,即置位中断标志,请求中断。
这个原理很好理解。但应用时需要特别注意的几点:
1) 电平触发方式时,中断标志寄存器不锁存中断请求信号。也就是说,单片机把每个机器周期的S5P2采样到的外部中断源口线的电平逻辑直接赋值到中断标志寄存器。标志寄存器对于请求信号来说是透明的。这样当中断请求被阻塞而没有得到及时响应时,将被丢失。换句话说,要使电平触发的中断被CPU响应并执行,必须保证外部中断源口线的低电平维持到中断被执行为止。因此当CPU正在执行同级中断或更高级中断期间,产生的外部中断源(产生低电平)如果在该中断执行完毕之前撤销(变为高电平)了,那么将得不到响应,就如同没发生一样。同样,当CPU在执行不可被中断的指令(如RETI)时,产生的电平触发中断如果时间太短,也得不到执行。
2)边沿触发方式时,中断标志寄存器锁存了中断请求。中断口线上一个从高到低的跳变将记录在标志寄存器中,直到CPU响应并转向该中断服务程序时,由硬件自动清除。因此当CPU正在执行同级中断(甚至是外部中断本身)或高级中断时,产生的外部中断(负跳变)同样将被记录在中断标志寄存器中。在该中断退出后,将被响应执行。如果你不希望这样,必须在中断退出之前,手工清除外部中断标志。
3)中断标志可以手工清除。一个中断如果在没有得到响应之前就已经被手工清除,则该中断将被CPU忽略。就如同没有发生一样。
4)选择电平触发还是边沿触发方式应从系统使用外部中断的目的上去考虑,而不是如许多资料上说的根据中断源信号的特性来取舍。比如,有的书上说(《Keil C51使用技巧及实战》),就有类似的观点。
51单片机的中断系统有关单片机中断系统的概念:什么是中断,我们从一个生活中的例程引入。你正在家中看书,突然电话铃响了,你放下书本,去接电话,和来电话的人交谈,然后放下电话,回来继续看你的书。这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。仔细研究一下生活中的中断,对于我们学习单片机的中断也很有好处。第一、什么可经引起中断,生活中很多事件能引起中断:有人按了门铃了,电话铃响了,你的闹钟闹响了,你烧的水开了….等等诸如此类的事件,我们把能引起中断的称之为中断源,单片机中也有一些能引起中断的事件,8031中一共有5个:两个外部中断,两个计数/定时器中断,一个串行口中断。第二、中断的嵌套与优先级处理:设想一下,我们正在看书,电话铃响了,同时又有人按了门铃,你该先做那样呢?如果你正是在等一个很重要的电话,你一般不会去理会门铃的,而反之,你正在等一个重要的客人,则可能就不会去理会电话了。如果不是这两者(即不等电话,也不是等人上门),你可能会按你常常的习惯去处理。总之这里存在一个优先级的问题,单片机中也是如此,也有优先级的问题。优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中断已产生,又有一个中断产生的情况,比如你正接电话,有人按门铃的情况,或你正开门与人交谈,又有电话响了情况。考虑一下我们会怎么办吧。第三、中断的响应过程:当有事件产生,进入中断之前我们必须先记住现在看书的第几页了,或拿一个书签放在当前页的位置,然后去处理不一样的事情(因为处理完了,我们还要回来继续看书):电话铃响我们要到放电话的地方去,门铃响我们要到门那边去,也说是不一样的中断,我们要在不一样的地点处理,而这个地点常常还是固定的。计算机中也是采用的这种办法,五个中断源,每个中断产生后都到一个固定的地方去找处理这个中断的程序,当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。具体地说,中断响应能分为以下几个步骤:1、保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。2、寻找中断入口,根据5个不一样的中断源所产生的中断,查找5个不一样的入口地址。以上工作是由计算机自动完成的,与编程者无关。在这5个入口地址处存放有中断处理程序(这是程序编写时放在那儿的,如果没把中断程序放在那儿,就错了,中断程序就不能被执行到)。3、执行中断处理程序。4、中断返回:执行完中断指令后,就从中断处返回到主程序,继续执行。究竟单片机是怎么样找到中断程序所在位置,又怎么返回的呢?我们稍后再谈。MCS-51单片机中断系统的结构:5个中断源的符号、名称及产生的条件如下。INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起。INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起。T0:定时器/计数器0中断,由T0计满回零引起。T1:定时器/计数器l中断,由T1计满回零引起。TI/RI:串行I/O中断,串行端口完成一帧字符发送/接收后引起。整个中断系统的结构框图见下图一所示。
从零开始学51单片机定时器基于单片机的定时器电路原理图如下所示: 我们学单片机是首先学的就是 led 闪烁,那是用延时程序做的,现在回想起来,这样做不很恰当,为什么呢?我们的主程序做了灯的闪烁,就不能再干其它的事了,难道单片机只能这样工作吗?当然不是,我们能用定时器来实现灯的闪烁的功能。例 1:查询方式ORG 0000HAJMP STARTORG 30HSTART:MOV P1,#0FFH ;关所 灯MOV TMOD,#B ;定时/计数器 0 工作于方式 1MOV TH0,#15HMOV TL0,#0A0H ;即数 5536SETB TR0 ;定时/计数器 0 开始运行LOOP:JBC TF0,NEXT ;如果 TF0 等于 1,则清 TF0 并转 NEXT 处AJMP LOOP ;不然跳转到 LOOP 处运行NEXT:CPL P1.0MOV TH0,#15HMOV TL0,#9FH;重置定时/计数器的初值AJMP LOOPEND AJMP LOOPEND键入程序,看到了什么?灯在闪烁了,这可是用定时器做的,不再是主程序的循环了。简单地分析一下程序,为什么用 JBC 呢?TF0 是定时/计数器 0 的溢出标记位,当定时器产生溢出后,该位由 0 变 1,所以查询该位就可知宇时时间是否已到。该位为 1 后,要用软件将标记位清 0,以便下一次定时是间到时该位由 0 变 1,所以用了 JBC 指令,该指位在判 1转移的同时,还将该位清 0。以上程序是能实现灯的闪烁了,可是主程序除了让灯闪烁外,还是不能做其他的事啊!不,不对,我们能在 LOOP:……和 AJMP LOOP 指令之间插入一些指令来做其他的事情,只要保证执行这些指令的时间少于定时时间就行了。那我们在用软件延时程序的时候不是也能用一些指令来替代 DJNZ 吗?是的,但是那就要求你精确计算所用指令的时间,然后再减去对应的 DJNZ 循环次数,很不方便,而现在只要求所用指令的时间少于定时时间就行,显然要求低了。当然,这样的办法还是不好,所以我们常用以下的办法来实现。程序 2:用中断实现ORG 0000HAJMP STARTORG 000BH ;定时器 0 的中断向量地址AJMP TIME0 ;跳转到真正的定时器程序处ORG 30HSTART:MOV P1,#0FFH ;关所 灯MOV TMOD,#B ;定时/计数器 0 工作于方式 1MOV TH0,#15HMOV TL0,#0A0H ;即数 5536SETB EA ;开总中断允许SETB ET0 ;开定时/计数器 0 允许SETB TR0 ;定时/计数器 0 开始运行LOOP: AJMP LOOP ;真正工作时,这里可写任意程序TIME0: ;定时器 0 的中断处理程序PUSH ACCPUSH PSW ;将 PSW 和 ACC 推入堆栈保护CPL P1.0MOV TH0,#15HMOV TL0,#0A0H ;重置定时常数POP PSWPOP ACCRETIEND上面的例程中,定时时间一到,TF0 由 0 变 1,就会引发中断,CPU 将自动转至 000B处寻找程序并执行,由于留给定时器中断的空间只有 8 个字节,显然不足以写下所有有中断处理程序,所以在 000B 处安排一条跳转指令,转到实际处理中断的程序处,这样,中断程序能写在任意地方,也能写任意长度了。进入定时中断后,首先要保存当前的一些状态,程序中只 演示了保存存 ACC 和 PSW,实际工作中应该根据需要将可能会改变的单元的值都推入堆栈进行保护(本程序中实际不需保存护任何值,这里只作个演示)。上面的两个单片机程序运行后,我们发现灯的闪烁非常快,根本分辨不出来,只是视觉上感到灯有些晃动而已,为什么呢?我们能计算一下,定时器中预置的数是 5536,所以每计 60000 个脉冲就是定时时间到,这 60000 个脉冲的时间是多少呢?我们的晶体震荡器 是12M,所以就是 60000 微秒,即 60 毫秒,因此速度是非常快的。如果我想实现一个 1S 的定时,该怎么办呢?在该晶体震荡器濒率下,最长的定时也就是 65。536 个毫秒啊!上面给出 一个例程。ORG 0000HAJMP STARTORG 000BH ;定时器 0 的中断向量地址AJMP TIME0 ;跳转到真正的定时器程序处ORG 30HSTART:MOV P1,#0FFH ;关所 灯MOV 30H,#00H ;软件计数器预清 0MOV TMOD,#B ;定时/计数器 0 工作于方式 1MOV TH0,#3CHMOV TL0,#0B0H ;即数 15536SETB EA ;开总中断允许SETB ET0 ;开定时/计数器 0 允许SETB TR0 ;定时/计数器 0 开始运行LOOP: AJMP LOOP ;真正工作时,这里可写任意程序TIME0: ;定时器 0 的中断处理程序PUSH ACCPUSH PSW ;将 PSW 和 ACC 推入堆栈保护INC 30HMOV A,30HCJNE A,#20,T_RET ;30H 单元中的值到了 20 了吗?T_L1: CPL P1.0 ;到了,取反 P10MOV 30H,#0 ;清软件计数器T_RET:MOV TH0,#15HMOV TL0,#9FH ;重置定时常数POP PSWPOP ACCRETIEND先自己分析一下,看看是怎么实现的?这里采用了软件计数器的概念,思路是这样的,先用定时/计数器 0 做一个 50 毫秒的定时器,定时是间到了以后并不是立即取反 P10,而是将软件计数器中的值加 1,如果软件计数器计到了 20,就取反 P10,并清掉软件计数器中的值,不然直接返回,这样,就变成了 20 次定时中断才取反一次 P10,因此定时时间就延长了成了 20*50 即 1000 毫秒了。这个思路在工程中是非常有用的,有的时候我们需要若干个定时器,可 51 中总共才有 2个,怎么办呢?其实,只要这几个定时的时间有一定的公约数,我们就能用软件定时器加以实现,如我要实现 P10 口所接灯按 1S 每次,而 P11 口所接灯按 2S 每次闪烁,怎么实现呢?对了我们用两个计数器,一个在它计到 20 时,取反 P10,并清零,就如上面所示,另一个计到 40 取反 P11,然后清 0,不就行了吗?这部份的程序如下ORG 0000HAJMP STARTORG 000BH ;定时器 0 的中断向量地址AJMP TIME0 ;跳转到真正的定时器程序处ORG 30HSTART:MOV P1,#0FFH ;关所 灯MOV 30H,#00H ;软件计数器预清 0MOV TMOD,#B ;定时/计数器 0 工作于方式 1MOV TH0,#3CHMOV TL0,#0B0H ;即数 15536SETB EA ;开总中断允许SETB ET0 ;开定时/计数器 0 允许SETB TR0 ;定时/计数器 0 开始运行LOOP: AJMP LOOP ;真正工作时,这里可写任意程序TIME0: ;定时器 0 的中断处理程序PUSH ACCPUSH PSW ;将 PSW 和 ACC 推入堆栈保护INC 30HINC 31H ;两个计数器都加 1MOV A,30HCJNE A,#20,T_NEXT ;30H 单元中的值到了 20 了吗?T_L1: CPL P1.0 ;到了,取反 P10MOV 30H,#0 ;清软件计数器T_NEXT:MOV A,31HCJNE A,#40,T_RET ;31h 单元中的值到 40 了吗?T_L2:CPL P1.1MOV 31H,#0 ;到了,取反 P11,清计数器,返回T_RET:MOV TH0,#15HMOV TL0,#9FH ;重置定时常数POP PSWPOP ACCRETIEND
51单片机汇编延时程序算法详解
时间: 17:36:58 来源:21ic 作者:
51单片机汇编延时程序算法详解
将以12MHZ晶振为例,详细讲解MCS-51单片机中汇编程序延时的精确算法。
指令周期、机器周期与时钟周期
指令周期:CPU执行一条指令所需要的时间称为指令周期,它是以机器周期为单位的,指令不同,所需的机器周期也不同。
时钟周期:也称为振荡周期,一个时钟周期 =晶振的倒数。
MCS-51单片机的一个机器周期=6个状态周期=12个时钟周期。
MCS-51单片机的指令有单字节、双字节和三字节的,它们的指令周期不尽相同,一个单周期指令包含一个机器周期,即12个时钟周期,所以一条单周期指令被执行所占时间为12*(1/μs。扩展阅读:单片机有哪些延时方法详细介绍
例1 50ms 延时子程序:
DEL:MOV R7,#200 ①
DEL1:MOV R6,#125 ②
DEL2:DJNZ R6,DEL2 ③
DJNZ R7,DEL1 ④
精确延时时间为:1+(1*200)+(2*125*200)+(2*200)+2
=(2*125+3)*200+3 ⑥
由⑥整理出公式(只限上述写法)延时时间=(2*内循环+3)*外循环+3 ⑦
详解:DEL这个子程序共有五条指令,现在分别就 每一条指令 被执行的次数和所耗时间进行分析。
第一句:MOV R7,#200 在整个子程序中只被执行一次,且为单周期指令,所以耗时1μs
第二句:MOV R6,#125 从②看到④只要R7-1不为0,就会返回到这句,共执行了R7次,共耗时200μs
第三句:DJNZ R6,DEL2 只要R6-1不为0,就反复执行此句(内循环R6次),又受外循环R7控制,所以共执行R6*R7次,因是双周期指令,所以耗时2*R6*R7μs。
例2 1秒延时子程序:
DEL:MOV R7,#10 ①
DEL1:MOV R6,#200 ②
DEL2:MOV R5,#248 ③
DJNZ R5,$ ④
DJNZ R6,DEL2 ⑤
DJNZ R7,DEL1 ⑥
对每条指令进行计算得出精确延时时间为:
1+(1*10)+(1*200*10)+(2*248*200*10)+(2*200*10)+(2*10)+2
=[(2*248+3)*200+3]*10+3 ⑧
=998033μs≈1s
由⑧整理得:延时时间=[(2*第一层循环+3)*第二层循环+3]*第三层循环+3 ⑨
此式适用三层循环以内的程序,也验证了例1中式⑦(第三层循环相当于1)的成立。
注意,要实现较长时间的延时,一般采用多重循环,有时会在程式序里加入NOP指令,这时公式⑨不再适用,下面举例分析。
例3仍以1秒延时为例
DEL:MOV R7,#10 1指令周期1
DEL1:MOV R6,#0FFH 1指令周期10
DEL2:MOV R5,#80H 1指令周期255*10=2550
KONG:NOP 1指令周期128*255*10=326400
DJNZ R5,$ 2指令周期2*128*255*10=652800
DJNZ R6,DEL2 2指令周期2*255*10=5110
DJNZ R7,DEL1 2指令周期2*10=20
延时时间=1+10++0+20+2 =986893μs约为1s
整理得:延时时间=[(3*第一层循环+3)*第二层循环+3]*第三层循环+3 ⑩
结论:针对初学者的困惑,对汇编程序的延时算法进行了分步讲解,并就几种不同写法分别总结出相应的计算公式,只要仔细阅读例1中的详解,并用例2、例3来加深理解,一定会掌握各种类型程序的算法并加以运用。
51单片机仿真器简介
时间: 14:31:23 来源: 作者:
一、主要功能和特性
1,可以仿真63K程序空间,接近64K 的16位地址空间;
2,可以仿真64Kxdata 空间,全部64K 的16位地址空间;
3,可以真实仿真全部32 条IO脚;
4,完全兼容keilC51 UV2 调试环境,可以通过UV2 环境进行单步,断点, 全速等操作;
5,可以使用C51语言或者ASM汇编语言进行调试 ;
6,可以非常方便地进行所有变量观察,包括鼠标取值观察,即鼠标放在某 变量上就会立即显示出它此的值;
7,可选 使用用户晶振,支持0-40MHZ 晶振频率;
8,片上带有768字节的xdata,您可以在仿真时选 使用他们,进行xdata 的仿真;
9,可以仿真双DPTR 指针;
10,可以仿真去除ALE 信号输出. ;
11,自适应300-38400bps 的所有波特率通讯;
12,体积非常细小,非常方便插入到用户板中.插入时紧贴用户板,没有连接电缆,这样可以有效地减少运行中的干扰,避免仿真时出现莫名其妙的故障;
13,仿真插针采用优质镀金插针,可以有效地防止日久生锈,选择优质园脚IC插座,保护仿真插针,同时不会损坏目标板上的插座. ;
14,仿真时监控和用户代码分离,不可能产生不能仿真的软故障;
15,RS-232接口不计成本采用MAX202集成电路,串行通讯稳定可靠,绝非一般三极管的简易电路可比。
二、功能限制
仿真器占用单片机串口及定时器2,与Keil C(PC)通讯,故不支持串口及定时器2 的仿真功能。全速运行时单片机串口及定时器2 可供用户使用。
三、仿真器使用方法
1.将仿真器插入需仿真的用户板的CPU 插座中,仿真器由用户板供电;
2.将仿真器的串行电缆和PC 机接好,打开用户板电源;
3.通过Keil C 的IDE 开发仿真环境UV2 下载用户程序进行仿真、调试。
四、仿真器硬件说明
1、使用用户板的晶振:仿真器晶振旁有两组跳线用来切换内部晶振和用户板晶振,当两个短路块位于仿真器晶振一侧时,默认使用仿真板上的晶振(11.0592MHz), 当两个短路块位于电容一侧时,使用用户板的晶振。
2、为便于调试带看门狗的用户板,仿真器的复位端未与用户板复位端相连;故仿真器的复位按钮只复位仿真器,不复位用户板;若要复位用户板,请使用用户板复位按钮。
新手必看初学51单片机几个不易掌握的概念
时间: 14:37:39 来源:21ic 作者:
随着电子技术的迅速发展,计算机已深入地渗透到我们的生活中,许多电子爱好者开始学习单片机知识,但单片机的内容比较抽象,相对电子爱好者已熟悉的模拟电路、数字电路,单片机中有一些新的概念,这些概念非常基本以至于一般作者不屑去谈,教材自然也不会很深入地讲解这些概念,但这些内容又是学习中必须要理解的,下面就结合本人的学习、教学经验,对这些最基本概念作一说明,希望对自学者有所帮助。
一、总线:我们知道,一个电路总是由元器件通过电线连接而成的,在模拟电路中,连线并不成为一个问题,因为各器件间一般是串行关系,各器件之间的连线并不很多,但计算机电路却不一样,它是以微处理器为核心,各器件都要与微处理器相连,各器件之间的工作必须相互协调,所以就需要的连线就很多了,如果仍如同模拟电路一样,在各微处理器和各器件间单独连线,则线的数量将多得惊人,所以在微处理机中引入了总线的概念,各个器件共同享用连线,所有器件的8根数据线全部接到8根公用的线上,即相当于各个器件并联起来,但仅这样还不行,如果有两个器件同时送出数据,一个为0,一个为1,那么,接收方接收到的究竟是什么呢?这种情况是不允许的,所以要通过控制线进行控制,使器件分时工作,任何时候只能有一个器件发送数据(可以有多个器件同时接收)。器件的数据线也就被称为数据总线,器件所有的控制线被称为控制总线。在单片机内部或者外部存储器及其它器件中有存储单元,这些存储单元要被分配地址,才能使用,分配地址当然也是以电信号的形式给出的,由于存储单元比较多,所以,用于地址分配的线也较多,这些线被称为地址总线。
二、数据、地址、指令:之所以将这三者放在一起,是因为这三者的本质都是一样的──数字,或者说都是一串‘0’和‘1’ 组成的序列。换言之,地址、指令也都是数据。指令:由单片机芯片的设计者规定的一种数字,它与我们常用的指令助记符有着严格的一一对应关系,不可以由单片机的开发者更改。地址:是寻找单片机内部、外部的存储单元、输入输出口的依据,内部单元的地址值已由芯片设计者规定好,不可更改,外部的单元可以由单片机开发者自行决定,但有一些地址单元是一定要有的(详见程序的执行过程)。数据:这是由微处理机处理的对象,在各种不同的应用电路中各不相同,一般而言,被处理的数据可能有这么几种情况:
1·地址(如MOV DPTR,#1000H),即地址1000H送入DPTR。
2·方式字或控制字(如MOV TMOD,#3),3即是控制字。
3·常数(如MOV TH0,#10H)10H即定时常数。
4·实际输出值(如P1口接彩灯,要灯全亮,则执行指令:MOV P1,#0FFH,要灯全暗,则执行指令:MOV P1,#00H)这里0FFH和00H都是实际输出值。又如用于LED的字形码,也是实际输出的值。
理解了地址、指令的本质,就不难理解程序运行过程中为什么会跑飞,会把数据当成指令来执行了。
三、P0口、P2口和P3的第二功能用法初学时往往对P0口、P2口和P3口的第二功能用法迷惑不解,认为第二功能和原功能之间要有一个切换的过程,或者说要有一条指令,事实上,各端口的第二功能完全是自动的,不需要用指令来转换。如P3.6、P3.7分别是WR、RD信号,当微片理机外接RAM或有外部I/O口时,它们被用作第二功能,不能作为通用I/O口使用,只要一微处理机一执行到MOVX指令,就会有相应的信号从P3.6或P3.7送出,不需要事先用指令说明。事实上‘不能作为通用I/O口使用’也并不是‘不能’而是(使用者)‘不会’将其作为通用I/O口使用。你完全可以在指令中按排一条SETB P3.7的指令,并且当单片机执行到这条指令时,也会使P3.7变为高电平,但使用者不会这么去做,因为这通常这会导致系统的崩溃(即死机)。
四、程序的执行过程单片机在通电复位后8051内的程序计数器(PC)中的值为‘0000’,所以程序总是从‘0000’单元开始执行,也就是说:在系统的ROM中一定要存在‘0000’这个单元,并且在‘0000’单元中存放的一定是一条指令。
五、堆栈堆栈是一个区域,是用来存放数据的,这个区域本身没有任何特殊之处,就是内部RAM的一部份,特殊的是它存放和取用数据的方式,即所谓的‘先进后出,后进先出’,并且堆栈有特殊的数据传输指令,即‘PUSH’和‘POP’,有一个特殊的专为其服务的单元,即堆栈指针SP,每当执一次PUSH指令时,SP就(在原来值的基础上)自动加1,每当执行一次POP指令,SP就(在原来值的基础上)自动减1。由于SP中的值可以用指令加以改变,所以只要在程序开始阶段更改了SP的值,就可以把堆栈设置在规定的内存单元中,如在程序开始时,用一条MOV SP,#5FH指令,就时把堆栈设置在从内存单元60H开始的单元中。一般程序的开头总有这么一条设置堆栈指针的指令,因为开机时,SP的初始值为07H,这样就使堆栈从08H单元开始往后,而08H到1FH这个区域正是8031的第二、三、四工作寄存器区,经常要被使用,这会造成数据的浑乱。不同作者编写程序时,初始化堆栈指令也不完全相同,这是作者的习惯问题。当设置好堆栈区后,并不意味着该区域成为一种专用内存,它还是可以象普通内存区域一样使用,只是一般情况下编程者不会把它当成普通内存用了。
六、单片机的开发过程这里所说的开发过程并不是一般书中所说的从任务分析开始,我们假设已设计并制作好硬件,下面就是编写软件的工作。在编写软件之前,首先要确定一些常数、地址,事实上这些常数、地址在设计阶段已被直接或间接地确定下来了。如当某器件的连线设计好后,其地址也就被确定了,当器件的功能被确定下来后,其控制字也就被确定了。然后用文本编缉器(如EDIT、CCED等)编写软件,编写好后,用编译器对源程序文件编译,查错,直到没有语法错误,除了极简单的程序外,一般应用仿真机对软件进行调试,直到程序运行正确为止。运行正确后,就可以写片(将程序固化在EPROM中)。在源程序被编译后,生成了扩展名为HEX的目标文件,一般编程器能够识别这种格式的文件,只要将此文件调入即可写片。在此,为使大家对整个过程有个认识。
七、仿真、仿真机仿真是单片机开发过程中非常重要的一个环节,除了一些极简单的任务,一般产品开发过程中都要进行仿真,仿真的主要目的是进行软件调试,当然借助仿真机,也能进行一些硬件排错。一块单片机应用电路板包括单片机部份及为达到使用目的而设计的应用电路,仿真就是利用仿真机来代替应用电路板(称目标机)的单片机部份,对应用电路部份进行测试、调试。仿真有CPU仿真和ROM仿真两种,所谓CPU仿真是指用仿真机代替目标机的CPU,由仿真机向目标机的应用电路部份提供各种信号、数据,进行调试的方法。这种仿真可以通过单步运行、连续运行等多种方法来运行程序,并能观察到单片机内部的变化,便于改正程序中的错误。所谓ROM仿真,就是用仿真机代替目标机的ROM,目标机的CPU工作时,从仿真机中读取程序,并执行。这种仿真其实就是将仿真机当成一片EPROM,只是省去了擦片、写片的麻烦,并没有多少调试手段可言。通常这是二种不同类型的仿真机,也就是说,一台仿真机不能既做CPU仿真,又做ROM仿真。可能的情况下,当然以CPU仿真好。
对单片机初学者一点建议!新手必看!
时间: 16:42:40 来源:21ic 作者:
我开发单片机有5年了,积累了一点经验,这是对初学者的一点小建议!
工欲善其事必先利其器,有好的工具能大大提高效率!
硬件工具:
(1)示波器!示波器是必须有的,想学习的话,就算省吃俭用也必须买下来,当然,也不是说要买很高档的,我觉得单单用在单片机上面的话,国产的就很好了。我买了普源的DS1052E ,双通道50MHZ 数字示波器,全新 1700 左右,而且伴随我搞了很多开发方案了,很好用。在学校的学生怎么也要去找老师借一个回来,或者干脆去实验室折腾好了。当然,还有个选择就是买个二手的模拟示波器,不过搞单片机的话不是很建议。
(2) 万用表,国产胜利的表就不错了,也不贵,我买了个 FLUKE 15B ,320RMB,感觉挺好,就是测量电阻的时候有点慢,功能也比胜利的少。
(3)买个完整功能的学习板,因为51做的人特多,所以板子也相对的便宜了不少,全功能的也才 150-200 之间,什么数码管,液晶,24c02 什么的都有了,能做很多实验的。然后下载器还是买个USB的下载器比较好,这样不用折腾串口或者并口了。
有人建议不要买学习板,认为自己焊接元件才学得多,我的观点是:我不否认自己焊接元件学习得更加多,更加深刻,但是搞错了对象了,对于一个刚开始学习单片机的人来说,硬件电路有可能是致命的打击!到时候出了问题不知道是软件不好还是硬件有问题,折腾半天没有解决,信心都没了。
有以上的工具就可以了,烙铁元件什么的现在大可不必,因为还没有那个阶段。倒是示波器再次强调,这个是必须要的!!示波器就好像一对眼睛,捕捉人眼看不到的信号,比如说一个瞎子能画出漂亮的画,你信么?一些人喜欢装B,说什么不用示波器,不用仿真器都能写程序,那纯粹是扯蛋。有好的工具不用的人还有人崇拜他为高手,我表示不可理解。建议新手不要学。比如说 I2C 的时候,看半天资料,还不如用示波器夹一下 SDA 和 SCL 引脚,然后结合资料看看具体的时序是怎么样的,比你看几天的资料要深刻得多。当然,有人是捕捉不到那个信号的,你信不信?捉不到信号的要先学学怎么用示波器了,呵呵。
第一步应该直接学习写代码,而不要折腾硬件电路,买人家现成的好的电路,在一个平台上开发是很舒心的,只要代码写错,肯定就是软件的错误了,从而不需要去怀疑硬件有问题,直接调试就好了。
第二步,当你学习完学习板配套的程序后,基本算是个入门了。这个时候就应该自己去用万能板搭单片机的外围电路了,因为你之前的程序是写好了肯定是对的,这个时候就可以用好的程序去调试不好的硬件,出了问题肯定是硬件的问题,一步一步的改好硬件,最终和开发板的结果一样。
第三步,当你折腾完上面两步的时候,基本上可以说会写单片机了。不过离实际还是有点远,这个时候你需要学习的是怎么处理多任务。因为这个才是工作中真正用到的,包括时间片的概念,状态机的概念,这都是实际在用的。学会这个你可以去应聘了,因为实际的工作项目已经难不住你了。
第四步,修炼是没完没了的,平时多看人家的程序,自己也多练习写,不能说就一定很厉害,至少也少有点牛气!!
新手最重要的保持高亢的兴奋和自信心,觉得自己一定能学懂的,而且开始不要碰难的问题,而是从小问题不断的解决,看到实验结果后不断的加强自己的自信心,才有动力一步一步的学习下去。例如第一次用自己的程序写个跑马灯出来,那种满足感是凌驾于一切的。
还有就是不要浮躁,不要激进,学习还是慢慢的一步一步来为好,有些人一下子就要自己2个星期内学好,到头来基础部分不扎实,到了难的问题的时候就过不去了,倒还不如花几天做一个小实验,慢慢的想清楚,结合课本深刻的理解,这样做一个实验的收益是很大的。
最后,我不是卖开发板的,不要以为我是在吹嘘人家买我开发板。以上都是肺腑之言,不管你信不信,我反正是信了。
MCS-51单片机常见问题14问
时间: 14:49:54 来源:21ic 作者:
一、MCS-51单片机内部包含哪些主要功能部件?它们的作用是什么?
MCS-51单片机在一块芯片中集成了 CPU 、RAM、ROM、定时/计数器、多功能 I/O 口 和中断控制等基本功能部件。 单片机的核心部分是 CPU ,CPU 是单片机的大脑和心脏。 程序存储器用于存放编好的程序或表格常数。数据存储器用于存放中间运算结果、数据 暂存和缓冲、标志位等。 定时/计数器实质上是加法计数器,当它对具有固定时间间隔的内部机器周期进行计数时 ,它是定时器;当它对外部事件进行计数时,它是计数器。 I/O 接口的主要功能包括:缓冲与锁存数据、地址译码、信息格式转换、传递状态(外 设状态)和发布命令等。 中断控制可以解决 CPU 与外设之间速度匹配的问题,使单片机可以及时处理系统中许 多随机的参数和信息,同时,它也提高了其处理故障与应变能力的能力。
二、MCS-51单片机的 EA、ALE和PSEN 端的功能是什么?
答:ALE——ALE 为地址锁存允许信号,在访问外部存储器时,ALE 用来锁存 P0送出的低 8 位地址信号。 PSEN ——外部程序存储器的读选通信号。当访问外部 ROM 时, PSEN 产生负脉冲作 为外部 ROM的选通信号;在访问外部 RAM或片内 ROM时,不会产生有效的PSEN 信 号。 PSEN 可驱动 8 个LSTTL 门输入端。 EA ——访问外部程序存储器控制信号。对 8051 和8751 ,它们的片内有 4KB 的程序存 储器。当 EA 为高电平时,CPU 访问程序存储器有两种情况:一是访问的地址空间在 0 ~4K 范围内,CPU 访问片内程序存储器;二是访问的地址超出 4K 时,CPU 将自动执 行外部程序存储器的程序。对于 8031 ,EA 必须接地,只能访问外部 ROM。
三、MCS-51单片机的 P3口具有哪些功能?
答:P3口是双功能口,除了作为准双向通用 I/O 口使用外,每一根口线还具有第二种功能 ,P3口的各位如不设定为第二功能则自动处于第一功能。P3的第二功能涉及到串行口 、外部中断、定时器,与特殊功能寄存器有关。
四、89C51单片机有几个中断源?它们的中断标志位分别是什么?这些中断标志位是如何产生的?又是如何清“0”的?
答:5个,外部中断0:IE0,开放中断后,当INTO引脚有下降沿或者低电平时产生,响应中断后自然清0
定时器0:TF0外部中断1:IE1开放中断后,当INT1引脚有下降沿厚着低电平时产生,响应中断后自然清0
定时器1:TF1开放中断后,当定时或计数时间到产生,响应中断后自然清0.另外如果不开放中断,采用软件判断是,需要软件清0.
串口:RI/TI,通信开始后当接收完或者发送完一帧后产生,响应中断后需要软件清0.
五、如果采用晶振的频率为 3MHz ,定时/计数器工作方式 0、1、2 下,其最大的定时时间为多少?
答:内部定时脉冲周期=机器周期=12/3Mhz=4us
工作方式 0:Tmax
=8192*4us=32.768ms
工作方式 1:Tmax
=65536*4us=262.144ms
工作方式 2:Tmax
=256*4us=1.024ms
六、定时/计数器用作定时器时,其计数脉冲由谁提供?定时时间与哪些因素有关?
答:其计数脉冲由单片机振荡脉冲 12 分频输出的机器周期脉冲提供,定时时间与工作方式、晶振频率和预置数等因素有关。
七、定时/计数器的工作方式 2 有什么特点?适用于哪些应用场合?
答:工作方式2 具有初值自动重新加载和循环工作的特点,适用于产生固定脉宽的脉冲信号,和作为串行口波特率发生器使用。
八、一个定时器的定时时间有限,如何实现两个定时器的串行定时,来实现较长时间的定时?
答:方法一:让一个定时器先定时,溢出后,再启动另一个定时器定时;
方法二:在第一个中断处理子程序中加入计数器,计数器满后,就去启动另一个定时器定时,把要处理的事件放第二个中断处理子程序中。
九、简述串行口接收和发送数据的过程。
答:MCS-51单片机内部有一个全双工的异步串行通信口,即串行接收和发送缓冲器(SBUF),这两个在物理上独立的接收发送器,既可以接收数据,也可以发送数据,串行口发送的过程是:先从累加器 A 中读入 8 位数据到 SBUF,随后在串行口有硬件自动加入起始位和停止位,构成一个完整的帧格式,然后在移位脉冲的控制下,由 TXD端串行输出,一个字符帧发送完后,使 TXD输出线维持在 1 状态下,并将 SCON 寄存器的 TI置1,通知 CPU 可以发送下一个字符帧。串行口接收的过程是:SCON 的REN 位应处于允许接收状态(REN=1),在此前提下,串行口采样 RXD端,当采样到从 1 向0 的状态跳变时,就认定是接收到起始位,随后在移位脉冲的控制下,把通过位采样脉冲接收到的数据位移入接收寄存器中,直到停止位到来之后把停止位送入 RB8 中,并置位中断标志位 RI ,通知 CPU 从SBUF 取走接收到的一个字符。
十、为什么定时/计数器 T1用做串行口波特率发生器时,应采用方式 2?若已知时钟频率、通信波特率,如何计算其初值?
答:因为方式 2 是有自动重装载计数值的功能,从而可以产生精确的波特率。串行工作方式0 和方式 2 波特率是固定的,所以不用设初值;串行工作方式 1 和方式 3 时:波特率:BR = (2SMOD×Td)/32溢出一次的时间:1/ Td&&= (256-TH1)*12/ fosc溢出率:Td&&=&&fosc/[12×(256-TH1)]初值:TH1 = 256-&&fosc/(12* Td)
十一、单片机应用系统中为什么要进行系统扩展?
答:8031 、8032 等单片机不提供用户程序存储器,必须进行程序存储器的扩展,以存放控制程序、数据表格等;8751 等单片机虽然向用户提供 EPROM 程序存储器,但程序存储器空间容量不大,程序存储空间不足时,还必须扩展外部程序存储器。MCS-51系列单片机内部通常有 128B至256B的片内数据存储器,用于一般的控制及运算是足够的,但若用于数据存储,其容量是不足的,在这种情况下,必须扩展数据存储器。MCS-51系列单片机对外提供 32 条I/O 口线,但其 P0口作为地址/数据复用口,P2口用于提供高 8 位地址,而其 P3口具有第二功能,若扩展了程序存储器或数据存储器,单片机的 I/O 口往往也不够用,有时必须进行 I/O 口的扩展。应用系统中有时还涉及到数据的输入、输出、人机交互信息等接口问题,必须进行有关接口电路扩展。
十二、A/D 及D/A 转换的含义是什么?
答:A/D 转换是指将模拟信号转换为数字信号,主要用于微机控制系统的模拟信号数据采集。D/A 转换是指将数字信号转换为模拟信号,主要用于恢复模拟信号或进行模拟控制。
十三、DAC0832器件有哪些主要技术指标?其含义是什么?
答:DAC0832是将数字信号转换为模拟信号的器件。它的主要技术指标及含义如下:分辨率:8 位,可以将 8 位数字量转换为模拟量;建立时间:1μS ,即从数字量写入 8 位DAC寄存器到产生与输入数字量对应的模拟量输出的时间;输入信号:与 TTL 电平兼容的二进制信号;输出信号:与输入二进制信号对应的电流信号;电源:单一+5V 电源;
十四、ADC0809器件有哪些主要技术指标?其含义是什么?
答:ADC0809是将模拟信号转换为数字信号的 AD器件,它的主要技术指标及含义如下:分辨率:8 位,可以将输入模拟量转换为与之对应的 8 位数字量;信号输入范围:0-5V;转换时间:即完成一次 A/D 转换所需时间,与外加时钟信号频率有关,外部时钟信号为500KHz 时转换时间为 128μS ;输出信号:与输入模拟信号对应的 8 位二进制数字量,信号电平与 TTL 电平兼容;电源:单一+5V 电源;
感谢原创作者,非常感谢
Powered by
Copyright &

我要回帖

更多关于 单片机蜂鸣器声音频率 的文章

 

随机推荐