由于自己工作上碰到这方面的需求,不得不了解学习下。(不多说了学习........)
有网络真是太棒了,自从那天在PP51网站里面得版主于XX人聊天中,版主老提到平凡单片机教程,第二天就踏进平方教程里面去了,感觉很实在 不错,作者得打比方对读者得理解能力很好。接下去做下笔记(曾有位老板对我说过要做大老板一定要会用笔记得哦)
低电平控制程序:CLR P10 高电平:SETB P10
LCALL 调用子程序
LJMP 转移指令(长转移)AJMP 转移指令 两个周期不一样 第四课结束。。。。明天在学(别以为就这么点东西,其实看了很多得鲁,笔记在于重点)
第五课
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中,然后SP减1。
接上例:
POP B
POP ACC
则执行过程是:将SP中的值(现在是61H)作为地址,取61H单元中的数值(现在是20),送到B中,所以执行完本条指令后B中的值是20,然后将SP减1,因此本条指令执行完后,SP的值变为60H,然后执行POP ACC,将SP中的值(60H)作为地址,从该地址中取数(现在是100),并送到ACC中,所以执行完本条指令后,ACC中的值是100。
这有什么意义呢?ACC中的值本来就是100,B中的值本来就是20,是的,在本例中,的确没有意义,但在实际工作中,则在PUSH B后往往要执行其他指令,而且这些指令会把A中的值,B中的值改掉,所以在程序的结束,如果我们要把A和B中的值恢复原值,那么这些指令就有意义了。
还有一个问题,如果我不用堆栈,比如说在PUSH ACC指令处用MOV 60H,A,在PUSH B处用指令MOV 61H,B,然后用MOV A,60H,MOV B,61H来替代两条POP指令,不是也一样吗?是的,从结果上看是一样的,但是从过程看是不一样的,PUSH和POP指令都是单字节,单周期指令,而MOV指令则是双字节,双周期指令。更何况,堆栈的作用不止于此,所以一般的计算机上都设有堆栈,而我们在编写子程序,需要保存数据时,通常也不采用后面的方法,而是用堆栈的方法来实现。
例:写出以下程序的运行结果
MOV 30H,#12
MOV 31H,#23
PUSH 30H
PUSH 31H
POP 30H
POP 31H
结果是30H中的值变为23,而31H中的值则变为12。也就两者进行了数据交换。从这个例子可以看出:使用堆栈时,入栈的书写顺序和出栈的书写顺序必须相反,才能保证数据被送回原位,否则就要出错了。
用户1302782 2007-9-3 21:59
是点上传图片那样的.我上次都能的 这次我传了 好几次还这样
用户1302782 2007-8-30 22:47
我也不知道为什么看不到图 我已经传上去的了
用户15482 2007-8-30 12:39