0

关于投票
机器周期计算

一个机器周期包括12个时钟周期。下面让我们算一下一个机器周期是多长时间吧。设一个单片机工作于12M晶振,它的时钟周期是1/12(微秒)。它的一个机器周期是12*1/12)也就是1微秒。(请计算一个工作于6M晶振的单片机,它的机器周期是多少)。

MCS-51单片机的所有指令中,有一些完成得比较快,只要一个机器周期就行了,有一些完成得比较慢,得要2个机器周期,还有两条指令要4个机器周期才行。这也不难再解,不是吗?我让你扫地的执行要完成总得比要你完成擦黑板的指令时间要长。为了恒量指令执行时间的长短,又引入一个新的概念:指令周期。所谓指令周期就是指执行一条指令的时间。INTEL对每一条指令都给出了它的指令周期数,这些数据,大部份不需要我们去记忆,但是有一些指令是需要记住的,如DJNZ指令是双周期指令。

下面让我们来计算刚才的延时。首先必须要知道晶振的频率,我们设所用晶振为12M,则一个机器周期就是1微秒。而DJNZ指令是双周期指令,所以执行一次要2个微秒。一共执行62500次,正好125000微秒,也就是125毫秒。

系统分类: 单片机
用户分类: 单片机
标签: 无标签
来源: 无分类
发表评论 阅读全文(244) | 回复(0)

0

关于投票
平凡单片机资料(转载)
rar平凡单片机 PP51转载,初学者的好资料icon,我也是初学者大家一起学习吧
系统分类: 单片机
用户分类: 单片机
标签: 无标签
来源: 转贴
发表评论 阅读全文(525) | 回复(0)

0

关于投票
自学单片机

由于自己工作上碰到这方面的需求,不得不了解学习下。(不多说了学习........)

有网络真是太棒了,自从那天在PP51网站里面得版主于XX人聊天中,版主老提到平凡单片机教程,第二天就踏进平方教程里面去了,感觉很实在  不错,作者得打比方对读者得理解能力很好。接下去做下笔记(曾有位老板对我说过要做大老板一定要会用笔记得哦)icon

低电平控制程序:CLR  P10    高电平:SETB  P10  

LCALL 调用子程序  

LJMP   转移指令(长转移icon)AJMP 转移指令    两个周期不一样icon    第四课结束。。。。明天在学(别以为就这么点东西,其实看了很多得鲁,笔记在于重点icon

第五课

DELAY: MOV R7,#250   

D1: MOV R6,#250   

D2: DJNZ R6,D2    

DJNZ R7,D1       

RET

把数据250送到R7   然后数据250再送到R6  DJNZ 双周期指令 R6-1减到0为此,跳到D2。然后DJNZ双周期指令 R7-1 跳到D1 减到零为止,循环一步一步工作, 最终被执行250*250次。2

设计一个延时100毫秒的延时程序。( 设一个机器周期包括12个时钟周期单片机工作于12M晶振)
50000次*2=100us(DJNZ:双周期指令)
   MOV R1 #250
A :MOV R2  #200
B: DJNZ  R2 B
     DJNZ R1  A   (R1 R2 存贮容量不考虑)

单片机复位电路


这种复位电路的工作原理是:通电时,电容两端相当于是短路,于是RST引脚上为高电平,然后电源通过电阻对电容充电,RST端电压慢慢下降,降到一定程序,即为低电平,单片机开始正常工作。

为什么短路么? (当然是短路的呀,电容初始状态是0V,没有电量,相当短路的状态。)

INC R0   R0的值加1

 

MOVC A@A+DPTR

本指令是将ROM中的数送入A中。本指令也被称为查表指令,常用此指令来查一个已做好在ROM中的表格

堆栈操作

PUSH direct

POP direct

第一条指令称之为推入,就是将direct中的内容送入堆栈中,第二条指令称之为弹出,就是将堆栈中的内容送回到direct中。推入指令的执行过程是,首先将SP中的值加1,然后把SP中的值当作地址,将direct中的值送进以SP中的值为地址的RAM单元中。例:

MOV SP#5FH

MOV A#100

MOV B#20

PUSH ACC

PUSH B

则执行第一条PUSH ACC指令是这样的:将SP中的值加1,即变为60H,然后将A中的值送到60H单元中,因此执行完本条指令后, 内存60H单元的值就是100,同样,执行PUSH B时,是将SP+1,即变为61H,然后将B中的值送入到61H单元中,即执行完本条指令后,61H单元中的值变为20

POP指令的执行是这样的,首先将SP中的值作为地址,并将此地址中的数送到POP指令后面的那个direct中,然后SP1

接上例:

POP B

POP ACC

则执行过程是:将SP中的值(现在是61H)作为地址,取61H单元中的数值(现在是20),送到B中,所以执行完本条指令后B中的值是20,然后将SP1,因此本条指令执行完后,SP的值变为60H,然后执行POP ACC,将SP中的值(60H)作为地址,从该地址中取数(现在是100),并送到ACC中,所以执行完本条指令后,ACC中的值是100

这有什么意义呢?ACC中的值本来就是100B中的值本来就是20,是的,在本例中,的确没有意义,但在实际工作中,则在PUSH B后往往要执行其他指令,而且这些指令会把A中的值,B中的值改掉,所以在程序的结束,如果我们要把AB中的值恢复原值,那么这些指令就有意义了。

还有一个问题,如果我不用堆栈,比如说在PUSH ACC指令处用MOV 60HA,在PUSH B处用指令MOV 61HB,然后用MOV A60HMOV B61H来替代两条POP指令,不是也一样吗?是的,从结果上看是一样的,但是从过程看是不一样的,PUSHPOP指令都是单字节,单周期指令,而MOV指令则是双字节,双周期指令。更何况,堆栈的作用不止于此,所以一般的计算机上都设有堆栈,而我们在编写子程序,需要保存数据时,通常也不采用后面的方法,而是用堆栈的方法来实现。

例:写出以下程序的运行结果

MOV 30H#12

MOV 31H#23

PUSH 30H

PUSH 31H

POP 30H

POP 31H

结果是30H中的值变为23,而31H中的值则变为12。也就两者进行了数据交换。从这个例子可以看出:使用堆栈时,入栈的书写顺序和出栈的书写顺序必须相反,才能保证数据被送回原位,否则就要出错了。

系统分类: 单片机
用户分类: 单片机
标签: 无标签
来源: 原创
发表评论 阅读全文(626) | 回复(5)

0

关于投票
单片机半导体存储器分类

 单片机半导体存储器分类

半导体存储器的分类

按功能可以分为只读和随机存取存储器两大类。所谓只读,从字面上理解就是只可以从里面读,不能写进去,它类似于我们的书本,发到我们手回之后,我们只能读里面的内容,不可以随意更改书本上的内容。只读存储器的英文缩写为ROMREAD ONLY MEMORY

所谓随机存取存储器,即随时可以改写,也可以读出里面的数据,它类似于我们的黑板,我可以随时写东西上去,也可以用黑板擦擦掉重写。随机存储器的英文缩写为RAMREAD RANDOM MEMORY)这两种存储器的英文缩写一定要记牢。

注意:所谓的只读和随机存取都是指在正常工作情况下而言,也就是在使用这块存储器的时候,而不是指制造这块芯片的时候。否则,只读存储器中的数据是怎么来的呢?其实这个道理也很好理解,书本拿到我们手里是不能改了,可以当它还是原材料——白纸的时候,当然可以由印刷厂印上去了。

顺便解释一下其它几个常见的概念。

PROM,称之为可编程存储器。这就象我们的练习本,买来的时候是空白的,可以写东西上去,可一旦写上去,就擦不掉了,所以它只能用写一次,要是写错了,就报销了。

EPROM,称之为紫外线擦除的可编程只读存储器。它里面的内容写上去之后,如果觉得不满意,可以用一种特殊的方法去掉后重写,这就是用紫外线照射,紫外线就象“消字灵”,可以把字去掉,然后再重写。当然消的次数多了,也就不灵光了,所以这种芯片可以擦除的次数也是有限的——几百次吧。

FLASH,称之为闪速存储器,它和EPROM类似,写上去的东西也可以擦掉重写,但它要方便一些,不需要光照了,只要用电学方法就可以擦除,所以就方便许多,而且寿命也很长(几万到几十万次不等)。

再次强调,这里的所有的写都不是指在正常工作条件下。不管是PROMEPROM还是FLASH ROM,它们的写都要有特殊的条件,一般我们用一种称之为“编程器”的设备来做这项工作,一旦把它装到它的工作位置,就不能随便改写了。

  EEPROM(电可擦写可编程只读存储器)是可用户更改的只读存储器(ROM),其可通过高于普通电压的作用来擦除和重编程(重写)。不像EPROM芯片,EEPROM不需从计算机中取出即可修改。在一个EEPROM中,当计算机在使用的时候是可频繁地重编程的,EEPROM的寿命是一个很重要的设计考虑参数。EEPROM的一种特殊形式是闪存,其应用通常是个人电脑中的电压来擦写和重编程。

系统分类: 单片机
用户分类: 单片机
标签: 无标签
来源: 无分类
发表评论 阅读全文(633) | 回复(0)
总共 , 当前 /