音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(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
改成PUSH  ACC 和 POP  ACC就行
 

* - 本貼最后修改時(shí)間:2007-1-6 20:03:33 修改者:lyjian

3樓: >>參與討論
haxy
菜鳥請教中斷編程問題
謝謝樓上的.我剛才改了一下,改成ACCR后在KILL里能運(yùn)行,不過生成的HEX文件,在PROTEUS里防真,但不能跳出中斷,按中斷按鍵后一直執(zhí)行單燈左移,3次后不能跳回主程序,不知道為什么:(
同學(xué)用C語言編的程序好用,不知道匯編應(yīng)該怎么改.

4樓: >>參與討論
hotpower
Keil不是能軟件仿真嗎???
 
5樓: >>參與討論
haxy
中斷匯編
用PROTEUS做硬件電路防真,能直觀的看一下實(shí)驗(yàn)情況.

6樓: >>參與討論
conwh
有可能是在DELAY中產(chǎn)生的中斷
注意中斷的入口和出口的問題.建議改變RS0

7樓: >>參與討論
lyjian
下面程序中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
MOV   R0,#3,應(yīng)該放在循環(huán)外部得吧
 
9樓: >>參與討論
haxy
好用了,謝謝各位
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
詢問:有關(guān)單片機(jī)的ISP問題?
求助   單片機(jī)的輸入 輸出
找DC - DC
怎么才能用keil c 51 編譯出大于64k 的code??
請教:脈寬不同的脈沖怎樣用來當(dāng)51的中斷
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)