日韩在线不卡免费视频一区,日韩欧美精品一区二区三区经典,日产精品码2码三码四码区,人妻无码一区二区三区免费,日本feerbbwdh少妇丰满

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

51中斷的問題:謝謝先!51中斷的問題:謝謝先!大家看看!!大家看看!!

我想到一個(gè)問題:就是CPU有響應(yīng)一個(gè)中斷后我不用RETI返回.用下面的:

   MOV R0,SP
   MOV DPH,@R0
   DEC SP
   MOV R0,SP
   MOV DPL,@R0
   DEC SP
   CLR A
   JMP @A+DPTR

這一斷替代RETI.是可以返回到程序的中斷處繼續(xù)運(yùn)行,但卻不再響應(yīng)下一次的中斷了,TFx為1沒有一點(diǎn)的反應(yīng).不轉(zhuǎn)向中斷入口.

請問,這樣我要如何來處理????
全部回復(fù)(12)
正序查看
倒序查看
xsw810810
LV.4
2
2007-06-21 17:12
如下面這個(gè)程序,響應(yīng)EXT1后,我不要在繼續(xù)EXT0,直接回主程序,但T0卻再也不會(huì)中斷入口了!!

   ORG 0000H
   LJMP START
   ORG 0003H     ;外中斷0:0003H
   SETB F0
   JMP EXT0
   ORG 000BH     ;定時(shí)器0:000BH
   ;jmp TIM0
   ORG 0013H     ;外中斷1:0013H
   JMP EXT1
   ORG 001BH     ;定時(shí)器1:001BH
   ;jmp TIM1
   ORG 0023H     ;串  口 :0023H
  

START:
    MOV SP,#70H     ;SP指針指向70H
   MOV IE,#10001111B   ;EA置1,開所有中斷.
   MOV IP,#00000100B   ;08H,T1高優(yōu)先.
   SETB P1.0
   NOP
   NOP
   NOP
   SJMP $
  
EXT0:  
  
   CPL P1.0
   NOP
   NOP
   NOP
   NOP
   RETI  

EXT1:  CPL P1.1
   JNB F0,EXT1_1  
   POP 7CH
   POP 7DH
   CLR F0
EXT1_1 : RETI

   END
0
回復(fù)
whatcall
LV.5
3
2007-06-21 19:00
@xsw810810
如下面這個(gè)程序,響應(yīng)EXT1后,我不要在繼續(xù)EXT0,直接回主程序,但T0卻再也不會(huì)中斷入口了!!  ORG0000H  LJMPSTART  ORG0003H    ;外中斷0:0003H  SETBF0  JMPEXT0  ORG000BH    ;定時(shí)器0:000BH  ;jmpTIM0  ORG0013H    ;外中斷1:0013H  JMPEXT1  ORG001BH    ;定時(shí)器1:001BH  ;jmpTIM1  ORG0023H    ;串  口:0023H  START:    MOVSP,#70H    ;SP指針指向70H  MOVIE,#10001111B  ;EA置1,開所有中斷.  MOVIP,#00000100B  ;08H,T1高優(yōu)先.  SETBP1.0  NOP  NOP  NOP  SJMP$  EXT0:      CPLP1.0  NOP  NOP  NOP  NOP  RETI  EXT1:  CPLP1.1  JNBF0,EXT1_1    POP7CH  POP7DH  CLRF0EXT1_1:RETI  END
我想是不是你的那段代碼并不能完全代替RETI的功能,中斷的某些硬件標(biāo)志未被清除?
0
回復(fù)
maychang
LV.6
4
2007-06-22 00:22
RETI指令與RET指令不一樣.RET指令僅僅是將堆棧中的返回地址彈出到程序計(jì)數(shù)器和修改棧針.RETI指令除了完成RET指令的工作外,還要清中斷掛號(hào)寄存器,使得再次發(fā)生中斷請求時(shí)可以響應(yīng)請求,執(zhí)行中斷程序.你的這段程序不能清中斷掛號(hào)寄存器(事實(shí)上51單片機(jī)也沒有訪問中斷掛號(hào)寄存器的指令).
0
回復(fù)
110919645
LV.2
5
2007-06-22 06:03
@xsw810810
如下面這個(gè)程序,響應(yīng)EXT1后,我不要在繼續(xù)EXT0,直接回主程序,但T0卻再也不會(huì)中斷入口了!!  ORG0000H  LJMPSTART  ORG0003H    ;外中斷0:0003H  SETBF0  JMPEXT0  ORG000BH    ;定時(shí)器0:000BH  ;jmpTIM0  ORG0013H    ;外中斷1:0013H  JMPEXT1  ORG001BH    ;定時(shí)器1:001BH  ;jmpTIM1  ORG0023H    ;串  口:0023H  START:    MOVSP,#70H    ;SP指針指向70H  MOVIE,#10001111B  ;EA置1,開所有中斷.  MOVIP,#00000100B  ;08H,T1高優(yōu)先.  SETBP1.0  NOP  NOP  NOP  SJMP$  EXT0:      CPLP1.0  NOP  NOP  NOP  NOP  RETI  EXT1:  CPLP1.1  JNBF0,EXT1_1    POP7CH  POP7DH  CLRF0EXT1_1:RETI  END
各位大哥51我也不太懂誰愿意教我請發(fā)郵件:yongshengdianzi@126.com
0
回復(fù)
xsw810810
LV.4
6
2007-06-22 09:46
@maychang
RETI指令與RET指令不一樣.RET指令僅僅是將堆棧中的返回地址彈出到程序計(jì)數(shù)器和修改棧針.RETI指令除了完成RET指令的工作外,還要清中斷掛號(hào)寄存器,使得再次發(fā)生中斷請求時(shí)可以響應(yīng)請求,執(zhí)行中斷程序.你的這段程序不能清中斷掛號(hào)寄存器(事實(shí)上51單片機(jī)也沒有訪問中斷掛號(hào)寄存器的指令).
maychang  
你好!那就是說中斷之后我一定要RETI返回.不然下次就不會(huì)再發(fā)生中斷了是不是???
0
回復(fù)
xsw810810
LV.4
7
2007-06-22 14:02
@maychang
RETI指令與RET指令不一樣.RET指令僅僅是將堆棧中的返回地址彈出到程序計(jì)數(shù)器和修改棧針.RETI指令除了完成RET指令的工作外,還要清中斷掛號(hào)寄存器,使得再次發(fā)生中斷請求時(shí)可以響應(yīng)請求,執(zhí)行中斷程序.你的這段程序不能清中斷掛號(hào)寄存器(事實(shí)上51單片機(jī)也沒有訪問中斷掛號(hào)寄存器的指令).
您看看這個(gè)程序:

   ORG 0000H
   LJMP START
   ORG 0003H     ;外中斷0:0003H
   JMP EXT0
   ORG 000BH     ;定時(shí)器0:000BH
   ;jmp TIM0
   ORG 0013H     ;外中斷1:0013H
   JMP EXT1
   ORG 001BH     ;定時(shí)器1:001BH
   ;jmp TIM1
   ORG 0023H     ;串  口 :0023H
  

START:
    MOV SP,#70H     ;SP指針指向70H
   SETB EA
   SETB EX0     ;開外中斷0
   MOV IP,#00000100B   ;08H,T1高優(yōu)先.
   SETB P1.0
   SJMP $
  
EXT0:  
   CLR EX0      ;關(guān)外中斷0    
   SETB EX1     ;開外中斷1
   CPL P1.0
   MOV R7,#100
D1:   MOV R6,#20
D2:   MOV R5,#248
   DJNZ R5,$
   DJNZ R6,D2
   DJNZ R7,D1
   jmp ext0  

EXT1:    
   CLR EX1         ;關(guān)外中斷1
   CLR IE0
   POP 7CH
   POP 7DH
   SETB EX0      ;開外中斷0
   RETI

   END  

START開INT 0中斷.也就是說INT0是起動(dòng)鍵.INT1是暫停鍵,返回SJMP $處一直循環(huán).等待INT0再觸發(fā)!

這是我在一本書上看到的,但就是仿不了.第一次INT0是可以起動(dòng).但暫停之后再INT0沒有一點(diǎn)反應(yīng)了.是不是程序有什么問題.還望說說!!!
0
回復(fù)
maychang
LV.6
8
2007-06-24 12:04
@xsw810810
maychang  你好!那就是說中斷之后我一定要RETI返回.不然下次就不會(huì)再發(fā)生中斷了是不是???
就是.中斷之后一定要RETI返回.不然下次中斷無法執(zhí)行.
0
回復(fù)
xsw810810
LV.4
9
2007-07-31 09:30
@xsw810810
您看看這個(gè)程序:  ORG0000H  LJMPSTART  ORG0003H    ;外中斷0:0003H  JMPEXT0  ORG000BH    ;定時(shí)器0:000BH  ;jmpTIM0  ORG0013H    ;外中斷1:0013H  JMPEXT1  ORG001BH    ;定時(shí)器1:001BH  ;jmpTIM1  ORG0023H    ;串  口:0023H  START:    MOVSP,#70H    ;SP指針指向70H  SETBEA  SETBEX0    ;開外中斷0  MOVIP,#00000100B  ;08H,T1高優(yōu)先.  SETBP1.0  SJMP$  EXT0:    CLREX0      ;關(guān)外中斷0      SETBEX1    ;開外中斷1  CPLP1.0  MOVR7,#100D1:  MOVR6,#20D2:  MOVR5,#248  DJNZR5,$  DJNZR6,D2  DJNZR7,D1  jmpext0  EXT1:      CLREX1        ;關(guān)外中斷1  CLRIE0  POP7CH  POP7DH  SETBEX0      ;開外中斷0  RETI  END  START開INT0中斷.也就是說INT0是起動(dòng)鍵.INT1是暫停鍵,返回SJMP$處一直循環(huán).等待INT0再觸發(fā)!這是我在一本書上看到的,但就是仿不了.第一次INT0是可以起動(dòng).但暫停之后再INT0沒有一點(diǎn)反應(yīng)了.是不是程序有什么問題.還望說說!!!
高人指點(diǎn)一二啊!!!
0
回復(fù)
maychang
LV.6
10
2007-08-06 02:58
@xsw810810
您看看這個(gè)程序:  ORG0000H  LJMPSTART  ORG0003H    ;外中斷0:0003H  JMPEXT0  ORG000BH    ;定時(shí)器0:000BH  ;jmpTIM0  ORG0013H    ;外中斷1:0013H  JMPEXT1  ORG001BH    ;定時(shí)器1:001BH  ;jmpTIM1  ORG0023H    ;串  口:0023H  START:    MOVSP,#70H    ;SP指針指向70H  SETBEA  SETBEX0    ;開外中斷0  MOVIP,#00000100B  ;08H,T1高優(yōu)先.  SETBP1.0  SJMP$  EXT0:    CLREX0      ;關(guān)外中斷0      SETBEX1    ;開外中斷1  CPLP1.0  MOVR7,#100D1:  MOVR6,#20D2:  MOVR5,#248  DJNZR5,$  DJNZR6,D2  DJNZR7,D1  jmpext0  EXT1:      CLREX1        ;關(guān)外中斷1  CLRIE0  POP7CH  POP7DH  SETBEX0      ;開外中斷0  RETI  END  START開INT0中斷.也就是說INT0是起動(dòng)鍵.INT1是暫停鍵,返回SJMP$處一直循環(huán).等待INT0再觸發(fā)!這是我在一本書上看到的,但就是仿不了.第一次INT0是可以起動(dòng).但暫停之后再INT0沒有一點(diǎn)反應(yīng)了.是不是程序有什么問題.還望說說!!!
這個(gè)程序顯然不能執(zhí)行到外中斷1.
外中斷0未退出,而外中斷0和外中斷1同一優(yōu)先級(jí),外中斷0不退出外中斷1是不會(huì)得到響應(yīng)的.
0
回復(fù)
xsw810810
LV.4
11
2007-08-09 14:49
@maychang
這個(gè)程序顯然不能執(zhí)行到外中斷1.外中斷0未退出,而外中斷0和外中斷1同一優(yōu)先級(jí),外中斷0不退出外中斷1是不會(huì)得到響應(yīng)的.
謝謝了啊1!!!
0
回復(fù)
tang7273
LV.1
12
2007-08-11 19:46
@xsw810810
高人指點(diǎn)一二啊!!!
如果你的功底不好的話,建議你使用C語言寫程序比較的好,關(guān)鍵就是快啊,一開始上手用匯編可能搞搞就沒有信心了,怎么搞都搞不定啊!
0
回復(fù)
110919645
LV.2
13
2007-12-20 19:26
@xsw810810
高人指點(diǎn)一二啊!!!
123
0
回復(fù)
發(fā)