org 00h
sjmp main
org 03h
ljmp int
org 30h
main:mov sp ,#60h 初始化
mov ie,#10000001b 开中断
mov tcon,#00000000b 设置外部中断触发方式(低电平有效)
mov p1,#00h
mov dptr,#100h
sjmp $ 等待中断
int:jb p1.0,loop_0 执行按键1 *** 作
jb p1.1,loop_1 执行按健2 *** 作
jb p1.2,loop_2 执行按健3 *** 作
jb p1.3,loop_3 执行按健4 *** 作
loop_0:push psw
mov r7,#4
mov a,#00h
movc a,@a+dptr
mov p2,a
acall delay
djnz r7,loop_0
pop psw
reti
loop_1:push psw
mov r7,#4
mov a,#04h
movc a,@a+dptr
mov p2,a
acall delay
djnz r7,loop_1
pop psw
reti
loop_2:push psw
mov r7,#4
mov a,#08h
movc a,@a+dptr
mov p2,a
acall delay
djnz r7,loop_2
pop psw
reti
loop_3:push psw
mov r7,#4
mov a,#0ch
movc a,@a+dptr
mov p2,a
acall delay
djnz r7,loop_3
pop psw
reti
delay:mov r5,#10h
delay_0:mov r6,#255
djnz r6,$
djnz r5,delay_0
ret
org 100h
db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h
db 41h,42h,43h,44h,45h,46h
end
希望对你有帮助
51单片机最大寻址空间是64K,超过64K可以用P1口对存储器进行分页,512K 存储器,可用P1.0,P1.1,P1.2接EPROM的A16,A17,A18将其分成8个64K 的存储器页.在页间跳转必须精确定位,在页间跳转指令后面加入几条NOP空 *** 作,在跳入的页面也加入几条NOP空 *** 作,如果你扩展ROM只是为了扩充数据存储空间,那么你可以在每页开始的一段内都放入(相同的)指令程序。
如从0页换1页,当前PC=FFF0H,ROM地址:00FFF0H
SET P1.0
NOP
NOP
NOP
NOP
SET P1.0切换后:PC=FFF2H,ROM地址:01FFF2H
要特别注意的是,中断子程序必须放在每页相同的位置安排入口,单片机上电时P1.0,P1.1,P1.2都是高电平,所以,你的初始化程序入口应在ROM的070000H处。
这么高难度,您只有5分,哎!!!!
扩展片外存储器,使用的是三总线结构,即AB、DB和CB。楼主仅仅说出了16位地址线和8位数据线,这只是AB和DB。
另外的控制总线(CB)如下:
扩展程序存储器,使用PSEN引线,来控制对其读出;
扩展数据存储器,使用RD和WR引线,来控制对其读写。
因为控制总线不同,所以不发生冲突。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)