help me
各位虾虾,我是一只小小菜鸟,在单片机世界里已疲备的飞了很久,经常被一些极简单的问题搞的心力憔瘁。下面这两段程序就是我遇到的其中之一。程序ss3已在我买的实验板(购于<<电子世界>>,型号df-2)上顺利实现,另一程序ss4则不能实现。两段程序如下:
程序ss3:
org 0000
ljmp main
org 0003
ljmp in0
main: mov ie,#081h ;开中断
setb it0 ;下跳沿触发
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详细
内容可在去年的<<电子世界>>登载的"单片机实用技术讲座"之第五讲中查找。
发表时间:2003年6月30日17:27:36