请教各位大侠,在KELL中运行一段汇编编的中断程序,但确不能正常运行,错误为 error A22; EXPRESSION TYPE DOES NOT MATCH INSTRUCTION.(在PUSH A行和POP A行).程序如下: ORG 0 ;程序从0地址开始 JMP START ;跳过中断向量 ORG 03H ;INT0中断向量 JMP INT ;执行INT0中断子程序
START: MOV IE,#10000001B ;打开总开关与EX0分路开关 MOV SP,#30H ;设定堆栈地址 SETB IT0 ;采用负缘触发信号 MOV A,#0 ;将ACC设定为00000000B LOOP: MOV P2,A ;输出到LED CALL DELAY ;调用延迟子程序 CPL A ;将A的内容反相 JMP LOOP ;跳至LOOP形成一个循环 ;=========INT0中段子程序开始========= INT: PUSH PSW ;将PSW存入堆栈 PUSH A ;将ACC存入堆栈 SETB RS0 ;切换到RB1 ;=========第一层循环开始============= INTLOOP0:MOV R0,#3 ;设定三次单灯左移 MOV A,#0FEH ;单灯左移初始值 MOV R1,#8 ;设定八次左移 ;=========第二层循环开始============= INTLOOP1:MOV P2,A ;输出到LED CALL DELAY ;调用延迟子程序 RL A ;将A的内容左移 DJNZ R1,INTLOOP1 ;跑至INTLOOP0形成一个循环 ;=========第二层循环结束============= DJNZ R0,INTLOOP0 ;跳至INTLOOP1形成一个循环 ;=========第一层循环结束============= POP A ;取回ACC内容 POP PSW ;取回PSW内容 RETI ;反回主程序 ;=========INT0中断子程度结束========= ;=========0.1秒DELAY子程序=========== DELAY: MOV R7,#200 D1: MOV R6,#250 DJNZ R6,$ DJNZ R7,D1 RET END
|