ll: mov p0,#0ebh ;led2 and led3 亮
lcall del
mov p0,#0beh led1 and led4 亮
lcall del
ljmp ll
in0: mov a,#03h ;将pa,pb定意为输出
mov dptr,#0fb00h ;送命令地址
movx @dptr,a
mov a,#00h
mov dptr,#0fb01h
movx @dptr,a
mov dptr,#0fb02h
movx @dptr,a
第20行: lcall del
mov r2,#2
ii: mov a,#076h
mov dptr,#0fb02h ;显h
movx @dptr,a
mov a,#01h
mov dptr,#0fb01h
movx @dptr,a
lcall del
mov a,#00h
mov dptr,#0fb01h
movx @dptr,a
lcall del
djnz r2,ii
reti
del: mov r5,#25
s3: mov r6,#100
s2: mov r7,#100
s1: djnz r7,s1
djnz r6,s2
djnz r5,s3
ret
ee: end
程序 ss4:
org 0030h
in0: mov a,#03h ;将pa,pb定意为输出
mov dptr,#0fb00h ;送命令地址
movx @dptr,a
mov a,#00h
mov dptr,#0fb01h
movx @dptr,a
mov dptr,#0fb02h
movx @dptr,a
lcall del
mov r2,#2
ii: mov a,#076h
mov dptr,#0fb02h ;显h
movx @dptr,a
mov a,#01h
mov dptr,#0fb01h
movx @dptr,a
lcall del
mov a,#00h
mov dptr,#0fb01h
movx @dptr,a
lcall del
djnz r2,ii
ljmp ee
del: mov r5,#25
s3: mov r6,#100
s2: mov r7,#100
s1: djnz r7,s1
djnz r6,s2
djnz r5,s3
ret
ee: end
其中ss3是通过控制实验板上的8155内的pa(地址:fb01h)与pb口(fb02h)来使板上的六位数码管先灭一秒钟,再让第一位数码管显"h"字形。该程序在实验板上顺利实现。但当我把实现这一功能的程序段(从in0至ee)单独取出另作为一段程序(即ss4),只是将"reti"换成"ljmp ee"语句,其它均未改动,编译也能通过没有错误。但却不能在实验板上实现上述功能。
这一奇怪现象令我极其困惑,望各位大虾救弟于水火之中。
我用的是89c51的片子。8155的命令寄存器地址:fb00h。有关8155详细
内容可在去年的<<电子世界>>登载的"单片机实用技术讲座"之第五讲中查找。