|
楼主 |
发表于 2012-6-14 13:18:43
|
显示全部楼层
本帖最后由 崂山 于 2012-6-14 22:04 编辑
有四个伪指令需要认识的,我们已经学会一个 EQU,另外3个随着我们讲解这个中断例子添加。再看看 ORG 伪指令
ORG 00H '这是个伪指令,强调以下的源程序代码在存储到单片机的时候,
'被存储在单片机程序存储器的 00H位置,也就是开始的位置
NOP '这个才是真实的第一条可执行单片机指令,它被存储在程序存储器的 0000H位置
NOP '该指令没有用ORG指令规定位置,只好按照默认的顺序 被存储在 0001H
GOTO MAIN '顺序存储位置 002H 无条件挑转到标号 MAIN的地方。
'0003H这个地方没有任何语句,是个空洞,不被执行
'空洞在家用电脑编译器编译的时候,实际上也会被给出一个特定的数据存储到0003H
'这个特定数据是什么是无所谓的,不同厂家的编译器会给不同的特定数
'特定数例如:NOP MOVLW等一般为可执行数据,以免万一单片机误入空洞,也能工作,不出错
ORG 04H
GOTO INTSRV '由于上邻的ORG 04H的存在,该句会被存储到程序空间 0004H , 无条件转向标号 INTSRV
NOP '按照默认顺序编译存储到 0005H
NOP '按照默认顺序编译存储 直到遇到下一个ORG命令,才会打破顺序
学会ORG命令以后,就可以把整个源程序安排到单片机的程序存储器位置上,我们习惯叫做程序存储器地址。PIC12F509的片内程序存储器只有1024个单元行,地址从 0000H ---- 03FF H 而PIC16C74的片内程序存储器有4096个单元行。
整个程序存储器 有几个位置(地址)需要特别介绍,那就是复位地址0000H 和 中断入口地址 0004H。
0000H是 PIC单片机程序存储器的第一行,通电后首先执行这一行的指令。等于是单片机工作的开始位置。
通电后后也许需要单片机多次重新开始工作,例如一台电子称通电以后,可能需要称若干次物品的重量,那么,每换一次物品,单片机就需要重新回到 0000 H这个指令上来,开始新一轮的测量。只要单片机的指令,回到了 0000 H, 我们就成为单片机复位。
中断入口地址是怎么回事情呢?
原来啊,我们的主程序和调用的子程序已经很完美了,如果小孩子不敲门,或者在本例子里 那个键盘永远也不按下的话,是不会发生中断的,我们的程序也就不会跳出我们事先设计的主程序和子程序那些事情。
可是,一旦发生了按键事件,此时程序会暂时记住当前位置,转而去进行中断服务,去哪里服务呢?就是强行把程序指向 0004H 这个特殊地址,然后从0004 H开始进行中断的服务处理,因此我们设计的中断撒盐 或者开关LED灯的一些程序,就必须从0004H这个位置开始。因此 0004H就叫做中断入口 或者叫中断入口地址。
不同型号的单片机中断入口地址不一定都是 0004H, 就我们的例子PIC16C74是这样的,并且就这一个入口,因此中断程序较简单,而别的型号则不一定,需要查手册,如 PIC18F452就有两个中断入口,地址0008 H 以及 0018H
(待续) |
|