本帖最后由 冷漠 于 2010-7-31 11:40 编辑
按下“返回键”是一个异步事件,CPU必然反应!没有说CPU忙不过来就不理会键盘输入的。——即使是矩阵键盘,按下任意键也会拉低行扫描线;
所以把行扫描线接到外部中断INT0 / INT1即可。现在的51系列兼容单片机几乎都是整个P1端口8个I/O 输入脚全部能够触发中断,拿出一个来做返回键触发中断何妨?例如华邦W78E58之类。
然后用汇编写一个中断按键处理程序,例如TT2_INT0:
NAME TT2_INT0
EXTRN DATA(spa)
EXTRN CODE(main)
CSEG AT 00003H ;假设外部中断0
LJMP isr0
; }
; void isr0(void) interrupt 0 using 1
isr0:
USING 1 ; SOURCE LINE # 16
; {
..........
;(your code.....)
...........
;下面语句 返回到Main()主函数程序起始点。
; SP=spa;
MOV SP,spa
; DPTR=main;
MOV DPTR,#main
; _push_(DPH);
PUSH DPH
; _push_(DPL);
PUSH DPL
; }
RETI
; END OF isr0
END
当然主函数main ( )中有下列语句:例如:
char spa;
main()
{
spa=SP;
……
}
|