|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
菜鳥請教中斷編程問題 |
| 作者:haxy 欄目:單片機(jī) |
請教各位大俠,在KELL中運(yùn)行一段匯編編的中斷程序,但確不能正常運(yùn)行,錯(cuò)誤為 error A22; EXPRESSION TYPE DOES NOT MATCH INSTRUCTION.(在PUSH A行和POP A行).程序如下: ORG 0 ;程序從0地址開始 JMP START ;跳過中斷向量 ORG 03H ;INT0中斷向量 JMP INT ;執(zhí)行INT0中斷子程序 START: MOV IE,#10000001B ;打開總開關(guān)與EX0分路開關(guān) MOV SP,#30H ;設(shè)定堆棧地址 SETB IT0 ;采用負(fù)緣觸發(fā)信號(hào) MOV A,#0 ;將ACC設(shè)定為00000000B LOOP: MOV P2,A ;輸出到LED CALL DELAY ;調(diào)用延遲子程序 CPL A ;將A的內(nèi)容反相 JMP LOOP ;跳至LOOP形成一個(gè)循環(huán) ;=========INT0中段子程序開始========= INT: PUSH PSW ;將PSW存入堆棧 PUSH A ;將ACC存入堆棧 SETB RS0 ;切換到RB1 ;=========第一層循環(huán)開始============= INTLOOP0:MOV R0,#3 ;設(shè)定三次單燈左移 MOV A,#0FEH ;單燈左移初始值 MOV R1,#8 ;設(shè)定八次左移 ;=========第二層循環(huán)開始============= INTLOOP1:MOV P2,A ;輸出到LED CALL DELAY ;調(diào)用延遲子程序 RL A ;將A的內(nèi)容左移 DJNZ R1,INTLOOP1 ;跑至INTLOOP0形成一個(gè)循環(huán) ;=========第二層循環(huán)結(jié)束============= DJNZ R0,INTLOOP0 ;跳至INTLOOP1形成一個(gè)循環(huán) ;=========第一層循環(huán)結(jié)束============= POP A ;取回ACC內(nèi)容 POP PSW ;取回PSW內(nèi)容 RETI ;反回主程序 ;=========INT0中斷子程度結(jié)束========= ;=========0.1秒DELAY子程序=========== DELAY: MOV R7,#200 D1: MOV R6,#250 DJNZ R6,$ DJNZ R7,D1 RET END |
| 2樓: | >>參與討論 |
| 作者: lyjian 于 2007/1/6 20:03:00 發(fā)布:
改成PUSH ACC 和 POP ACC就行 * - 本貼最后修改時(shí)間:2007-1-6 20:03:33 修改者:lyjian |
|
| 3樓: | >>參與討論 |
| 作者: haxy 于 2007/1/6 21:07:00 發(fā)布:
菜鳥請教中斷編程問題 謝謝樓上的.我剛才改了一下,改成ACCR后在KILL里能運(yùn)行,不過生成的HEX文件,在PROTEUS里防真,但不能跳出中斷,按中斷按鍵后一直執(zhí)行單燈左移,3次后不能跳回主程序,不知道為什么:( 同學(xué)用C語言編的程序好用,不知道匯編應(yīng)該怎么改. |
|
| 4樓: | >>參與討論 |
| 作者: hotpower 于 2007/1/6 21:20:00 發(fā)布:
Keil不是能軟件仿真嗎??? |
|
| 5樓: | >>參與討論 |
| 作者: haxy 于 2007/1/6 21:32:00 發(fā)布:
中斷匯編 用PROTEUS做硬件電路防真,能直觀的看一下實(shí)驗(yàn)情況. |
|
| 6樓: | >>參與討論 |
| 作者: conwh 于 2007/1/7 3:47:00 發(fā)布:
有可能是在DELAY中產(chǎn)生的中斷 注意中斷的入口和出口的問題.建議改變RS0 |
|
| 7樓: | >>參與討論 |
| 作者: lyjian 于 2007/1/8 8:52:00 發(fā)布:
下面程序中R0每個(gè)循環(huán)都在賦值"MOV R0,#3" ;=========第一層循環(huán)開始============= INTLOOP0:MOV R0,#3 ;設(shè)定三次單燈左移 MOV A,#0FEH ;單燈左移初始值 MOV R1,#8 ;設(shè)定八次左移 ;=========第二層循環(huán)開始============= INTLOOP1:MOV P2,A ;輸出到LED CALL DELAY ;調(diào)用延遲子程序 RL A ;將A的內(nèi)容左移 DJNZ R1,INTLOOP1 ;跑至INTLOOP0形成一個(gè)循環(huán) ;=========第二層循環(huán)結(jié)束============= DJNZ R0,INTLOOP0 ;跳至INTLOOP1形成一個(gè)循環(huán) * - 本貼最后修改時(shí)間:2007-1-8 8:55:45 修改者:lyjian |
|
| 8樓: | >>參與討論 |
| 作者: sharpstar 于 2007/1/8 10:17:00 發(fā)布:
MOV R0,#3,應(yīng)該放在循環(huán)外部得吧 |
|
| 9樓: | >>參與討論 |
| 作者: haxy 于 2007/1/13 19:09:00 發(fā)布:
好用了,謝謝各位 |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |