导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→初学者:y一个显示程序,请大家帮我找回学汇编的信心!,

* 6159: 初学者:y一个显示程序,请大家帮我找回学汇编的信心!,

   epwwm 
epwwm发表的帖子 

 初学者:y一个显示程序,请大家帮我找回学汇编的信心!,
各位,下面是我编的一个试验程序,MCU用at89c51,目的是扫描显示两只数管,第一只固定显示
0,第二位随定时器变化,时间到加1,到9复0,不断循环。但是,我试了上百次,化了几个晚上,
均达不到目的,无法使第一位随定时器变化,但只要将定时器部分程序封住或不启动定时器,显
示子程序可以显出不变的显示缓冲区内容。请各位帮忙查错,谢谢。

我自已实在找不出错在哪里!!,再不成功,我就对学汇编失出信心了!!

注:数码管各段接p2.0~p2.7,选位接p0.0,p0.1


org 0000h
ljmp start

org 001bh
ajmp time1

org 30h
start:
mov sp,#5fh
mov p2,#0ffh
mov p0,#0ffh
mov 5ah,#0  ;第一位显示缓冲地址,初始显示0
mov 5bh,#0  ;第二位显示缓冲地址,初始显示0
mov r0,5ah  ;r0 指向显示缓冲首址
mov r1,#01b ; r1 先输出第一位位选
;
mov tmod,#00010000b  ;设定定时器,并启动,开中断。
mov th1,#00h
mov tl1,#00h
setb ea
setb et1
setb tr1


loop: ;主程序
lcall disp  ;调显示子程序,显示显示缓冲区内容
ajmp loop

time1: ;定时器1中断子程序
mov a,5ah
inc a 
mov 5ah,a ;更改显示缓冲第一位内容,加1
cjne a,#10h,exit ;是否到10。
mov 5ah,#0     ;复位到0
exit:
mov th1,#00h  ;重置定时常数。
mov tl1,#00h
reti

;显示子程序,扫描显示。
disp:
mov a,@r0
mov dptr,#disptab ;字形表首址
movc a,@a+dptr  ;查表得字形
mov p2,a  ;送段位
inc r0    ;下一位段位缓冲位地址

mov a,r1
mov p0,a ;送选位
lcall delay
rl a   ;下一位选位
mov r1,a
cjne r1,#100b,disp ;两位显示完毕?
mov r1,#01b   ;段位复位      
mov r0,5ah    ;选位复位
ret

;延时子程序
delay: 
mov r7,#50
d1:mov r6,#50
d2:djnz r6,d2
djnz r7,d1
ret

disptab:db 28h,7eh,0a4h,64h,72h,61h,21h,7ch,20h,60h ;字形表
end

发表时间:2002年3月8日22:52:00

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:初学者:pt6311與ps6311有什麼不同?誰能給我這些芯片的中文資料嗎,謝謝啦!!!!!!!!!
[下一篇帖子]:C51编程:如何才能编写93c46与27c512的编程器读写软件?我想请教大家,如何用LabTool