单片机中的一个程序问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 23:08:52
这是一个循环显示0到9的单片机汇编程序。
其中由一个指针order从[40h]一直移动到[49h],将其中的数据依次传入pa输出口输出。这是个循环的过程,也就是取出[49h]的值后又跳回[40h]继续执行。
程序中有错误,主要是指针的问题。
我没学过汇编的指针,该怎么用才使这个程序正确?
程序如下:
include ht46r64.inc

cishu equ [50h]
order equ [53h]
org 00h
jmp start_1
org 20h

start_1:
clr pac
mov a,11110000B
mov [40h],a;0
mov a,11111001B
mov [41h],a;1
mov a,10100100B
mov [42h],a;2
mov a,10110000B
mov [43h],a;3
mov a,99h
mov [44h],a;4
mov a,92h
mov [45h],a;5
mov a,82h
mov [46h],a;6
mov a,11111000B
mov [47h],a;7
mov a,80h
mov [48h],a;8
mov a,90h
mov [49h],a;9

loop:
mov a,39h
mov order,a
mov a,10
mov cishu,a
loop_1:
inc order
mov a,[order]
mov pa,a
sdz cishu
jmp loop_1
jmp loop

有几个问题。。。
一个是主程序入口地址。。。虽然说是不同的片子内存分配不同....但是不管怎么说..20h开始就可以写了么....一般这里都是中断向量表之类的东西的说....

cishu equ [50h]
order equ [53h]
这两句....如果只是需要变量用的话用
cishu db ?
order db ?
这样的定义就可以了吧...
如果用equ的话就一定要注意后面的代码写法.....这个写法关系到每句指令操作数的数量问题(一般片子来说...大多数指令每条最多只能有一个立即数操作数...) 和表示意义问题...
order equ [53h]
这里的order就已经表示 50h的内容了,而[order]意思是50H的内容所指的内存单元的内容(..当然...应该没有这种写法...只是意义如此...)

往40h~49H填数也可以用ORG移到后用db填...

上面这个程序可以写成这样:

include ht46r64.inc

org 00h
jmp start_1

ORG 50H
START_1:
MOV DPTR,40H
MOV cishu,0

LOOP_1:
MOV A,cishu
MOV A,@A+DPTR
MOV PA,A

INC cishu

;下面这句写成这样是因为我不知道ht46r64指令集是哪些- -`
MOV A,cishu
DEC A,10
SDZ A
JMP LOOP_1
JMP START_1

ORG 40H
CHAR_CODE_TABLE:
db 11110000B
db 11111001B
db 10100100B
db 10110000B
db 99h
db 92h
db 82h