下面再给大家讲一下软件的学习,学习软件首先是语言的学习,建议大家先学汇编,因为相对来说单片机的汇编语言还是比C要入门快一点,当然,如果你C很牛的话,那就另当别论了!
学习汇编语言,首先的是指令的学习。有的人说指令要去背,先背熟了再说。而还有的人说指令不用去细细的学,只要看明白就OK了,以后会有大量的程序让你熟习的!其实,我觉的这两种说法都不是很对,因为指令确实是很重要的,你想一下如果单词都不认识的话,你怎么去看英语的文章呢?所以指令是一定要学精的,但有没有必要要去背下来呢?答案是肯定的,不过不是在一开始就背,因为那个时候你什么都不知道,背下来也没什么用,所以,开始的时候就要去了解一下指令,当你都知道是什么意思了,并且知道它对PSW的CY,OV,AC.P的影响的时候,就去背它,要能默的出来,而且是很熟的默的出来,当然这是在以后的程序练习中,慢慢的去学的。
指令的分类有几种,大体上可分为单字节指令(49条),双字节指令(45条),多字节指令(17条)。还有一种分法就是分为数据转移类指令(也称MOV类指令共有29条)`算术运算类指令(24条),逻辑运算类指令(24条),控制转移类指令(17条),位操作类指令(17条)。
另指令的寻址方式有七种:寄存器寻址方式,直接寻址方式,寄存器间接寻址方式,立即数寻址方式,变址寻址方式,和位寻址方式。
下面详细的给大家讲一下111条指令:
首先要明白这五个东东的意义:A(累加器)Direct(地址寄存器)Rn(寄存器组n="0"---7)@Ri(间接寻址i="0".1)#data(立即数)
数据转移类指令(也称MOV类指令共有29条)
以累加器A为目的(4条)
MOV A, Rn (寄存器数据传送指令)
MOV A,direct(直接寻址数据传送指令)
MOV A,@Ri (间接寻址数据传送指令)
MOV A,#data (立即寻址数据传送指令)
相应练习:
例1:设(R5)=03H,(A)=E7H,执行MOV A,R5指令后,(A)=?
(R5)=?
例2:设(A)=24H,执行 MOV A,#05H指令后, (A)=?
例3:设(A)=23H,(30H)=A6H,执行 MOV A,30H指令后,(A)=?
(30H)=?
例4:设(A)=23H,(R1)=40H,(40H)=09H,执行 MOV A,@R1指令后,(A)=?
以Direct为目的(5条)
MOV direct,A (累加器数据传送指令)
MOV direct, Rn (寄存器数据传送指令)
MOV direct2, direct1 (直接寻址数据传送指令)
MOV direct,@Ri (间接寻址数据传送指令)
MOV direct,#data (立即数传送指令)
相应练习:
例5: 设(A)=35H,(60H)=FEH,执行MOV 60H,A指令后,(A)=? (60H)=?
例6: 设(R5)=03H,(40H)=6DH,执行MOV 40H.R5指令后,(R5)=? (40H)=?
例7: 设(89H)=12H,(23H)=4BH,执行MOV 23H,89H指令后,(89H)=?
(23H)=?
例8: ,MOV 70H,#20H
例9: 设(64H)=34H,(R1)=67H,执行MOV 64H,@R1指令后,(64H)=?
3,以Rn为目的(3条)
MOV Rn,A (累加器数据传送指令)
MOV Rn,direct (直接寻址数据传送指令)
MOV Rn,#data (立即数据传送指令)
相应练习:
例10: 设(R4)=5AH,执行MOV R4,#3FH指令后,(R4)=?
例11: 设(R7)=03H,(50H)=1FH,执行MOV R7,50H指令后,(R7)=?
例12: 设(A)=80H,(R6)=32H,执行MOV R6,A指令后,(R5)=? (A)=?
4以@Ri为目的(3条)
MOV @Ri,A(累加器数据传送指令)
MOV @Ri,direct (直接寻址数据传送指令)
MOV @Ri,data (立即数传送指令)
例13: 设(R0)=65H,(65H)=F5H,执行MOV @R0,#23H指令后,(65)=?
例14: 设(37H)=4CH,(R1)=10H,(10H)=45H,执行MOV @R1,37H指令后,(10H)=?
例15: 设(A)=4DH,(R0)=14H,(14H)=34H,执行MOV @R0,A指令后,(14H)=?
5. 16位数据传送指令(1条).
MOV DPTR #data 16
例16: MOV DPTR #230FH DPH=? DPL=?
6累加器A与片外RAM之间的数据传送4条)
MOVX A,@Ri (寄存器间接寻址外部RAM读指令)
MOVX A,@DPTR (数据指针间接寻址外部RAM读指令)
MOVX @Ri,A (寄存器间接寻址外部RAM写指令)
MOVX @DPTR,A (数据指针间接寻址外部RAM写指令)
例17: 将片外0123H单元中的内容送到片内RAM地址为70H单元中.
7累加器A与程序存储器ROM之间的数据传送(2条)
MOVC A,@A+DPTR (程序存储器指令)
MOVC A,@A+PC (程序存储器指令)
例18: 设(A)=54H,(DPTR)=3F21H,(3F75)=7FH,执行MOVC A,@A+DPTR指令后,(A)=?
8 堆栈操作(2条)
PUSH direct (进栈)
POP direct (出栈)
例19: 已知(20H)=40H,(21H)=70H 执行 MOV SP,#30H
PUSH 20H
PUSH 21H
POP 20H
POP 21H
后的(20H)=?, (21H)=?.
9字节交换指令(5条)
SWAP A (累加器高低半字节交换指令)
XCH A,Rn (寄存器寻址字节交换指令)
XCH A, direct (直接寻址字节交换指令)
XCH A, @Ri (间接寻址字节交换指令)
XCHD A, @Ri (半字节交换指令)
例20: 设(A)=23H, (R1)=7FH,(7FH)=75H,执行XCH A,@R1指令后,(A)=?,(R1)=?,(7FH)=?
例21: 设(A)=12H,(35H)=71H ,执行XCH A,35H指令后,(A)=? (35H)=?
例22: 设(A)=62H,(R0)=55H,(55H)=7BH,执行XCHD A, @R0指令后,(A)=? (R0)=? (55H)=?
例23: 设(A)=34H,(R3)=07H, 执行XCH A,R3指令后,(A)=? (R3)=?
先到这里喽,多了大家又要头大了!哈哈,其它的大家自己总结吧!只有这样子才印象深啊!答案大家可以问我要啊!不过你一定要自己做完哦!记住一点:软件的学习一定要多多练习,多上机调试。否则,单片机等于没学!!!!1
用户50661 2006-10-18 22:10
唉,说来惭愧,我95年开始想自学单片机,买了学习板还有很多书,就是因为指令入不了门,现在还是一知半解,荒,看来还得重新学习~ 我的QQ:2475034,大家有空一起交流经验呀,一个人学很乏味的。
用户1401609 2006-10-18 18:24
用户1614197 2006-9-28 21:04
用户860311 2006-9-26 17:15
1.不可以设置友情链接
2.不可以显示公告
用户1053025 2006-9-26 14:20
用户1053025 2006-9-26 14:11