PIC单片机的问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 17:03:16
这些我对于绝对寻址的理解:比方说一个 CALL DELAY吧。是不是这句指令过经过指令译码之后就成了一个(哦,现在以PIC16F877A为例)14位的二进制数?前3位是一个操作数,它告诉单片机,这是要调用子程序,后11位与PCLATH当中的第3.4位组成一个13位的程序地址指针,告诉单片机下一条指令的地址。是不是这样的?
也就是说,PC是13位的,PC就像是C语言当中的指针,而这个CALL DELAY是PC指向的内容,是14位的。原来PC每执行一条指令,然后加1,指向下一条要执行的指令,而这个CALL DELAY是改变这个PC值的,它这次就不一定是加1了,很有意思的是:这个PC指针,竟然是用它当中的内容(CALL DELAY)改变的!我觉得这个CALL译码之后是不是3位二进制数?而这个DELAY译码之后是11位二进制数,而后与PCLATH<3.4>组成一个13位的新PC地址。不知道我理解的对不对。
也许PIC就是太复杂了。也许是我理解的太复杂了。谢谢大家。
当然,这个指令内容以2位,11位的分配也就是这种绝对寻址的时候是这样的,像是一般不改变PC值的操作,比方说是BSF PCLATH,3 操作码与操作数6位,8位分的。这又对不对呢?
给好好的讲一下这个问题,谢谢。讲的好,给分的哦。

挺佩服楼主的钻研精神。
不过,我的个人意见:一般情况下,研究指令编译后的机器码(手册上翻译是操作码),似乎没这个必要,致少我是这么认为的;
PC就是一个13位的指针,(这里指我参见的手册:PIC16F73,2K FLASH),它所能寻址的最大地址空间是:2^13次方;举例,如:CALL DELAY,手册上是这么说的:自动将PCLATH的bit4与bit3加载到PC的高两位,PC的低11位由操作数决定,2^11=2048=2K,在2K范围内可以任意调用CALL;执行CALL时,自动将下条指令的地下压入13位的硬件堆栈空间中。。。。
本人愚见,次佩服楼主的钻研精神;