|
<p>ORG 0000H; AJMP MAIN; ORG 000BH; AJMP LABEL; 为什么将ORG 0000H;改成ORG 0080H;程序就出问题了???</p>
<p><img src="http://img.baidu.com/img/iknow/icn_point.gif"> 悬赏分:20 -</p>
<p>解决时间:2010-11-18 12:23</p>
<p>开始org 0000h;<enter> ajmp main<enter>进入主程序。org 000bh<enter> ajmp label 进入定时器0中断服务函数(我做的是用定时器中断产生延迟的一个跑马灯程序,中断程序有点不严格),问题是我将org 0000h;<enter> ajmp main 改成org 0080h;<enter> ajmp main 后我那8个灯就全亮了,不是我想要的结果,改回org 0000h之后结果就对了,不知道为什么程序起始地址一改动就杯具了,在此小生向各位大神高手求解!!!</p>
<p>ORG 0000H;</p>
<p>AJMP MAIN;</p>
<p>ORG 000BH;</p>
<p>AJMP LABEL;</p>
<p>MAIN:</p>
<p>MOV TMOD,#01H;</p>
<p>SETB TR0;</p>
<p>SETB EA;</p>
<p>SETB ET0;</p>
<p>MOV TH0,#00H;</p>
<p>MOV TL0,#00H;</p>
<p>MOV R1,#0FEH;</p>
<p>SJMP $</p>
<p>LABEL:</p>
<p>MOV A,R1;</p>
<p>RR A;</p>
<p>MOV P0,A;</p>
<p>MOV R1,P0</p>
<p>MOV TH0,#00H;</p>
<p>MOV TL0,#00H;</p>
<p>RETI;</p>
<p>END;</p>
<p>问题补充:</p>
<p>很感谢一楼的回答,刚才我用单片机试过了,将ORG 0000H;AJMP MAIN;改成org 0001h</p>
<p>程序还是正确运行 从0000h-000ah,都是正确的,大于000bh结果就不对了。</p>
<p>提问者: BLACKTULIP8 - 一级</p>
<p>最佳答案</p>
<p>单片机在上电之后,程序是从 0000H开始执行的</p>
<p>初始化程序是必须放在00H的</p>
<p>00 复位</p>
<p>03 INT0</p>
<p>0B T0</p>
<p>。。。。</p>
<p>这些都是固定的,不可更改的! 改成01, 02,都不行!</p>
<p>如果不开中断的话,00H之外的地址是可以随便占用的</p>
<p>你的程序用了中断0, 也就是0B 这个地址是必须留给中断的</p>
<p>MCU上电后,从00H开始执行,如果你从其它地址开始的话,00H到你使用的地址之间的部分相当于全部填上了 NOP</p>
<p>1</p>
<p>回答者:</p>
<p>a33403916 - 七级 2010-11-15 17:15</p>
<p>我来评论>></p>
<p>提问者对于答案的评价:</p>
<p>高人,又学了个乖</p>
|
|