求一个完整的AT89C51单片机LED控制程序,汇编语言的

请看清楚,是汇编语言的,不是C语言

要实现以下:
8个LED灯按照16进制加一方式点亮

P1口的8个引脚分别连接8个LED灯
P3.3,即INT1,外部中断1申请引脚连接一个按钮K1,用按钮控制电路
使K1每拨动一次,加一,

最初是00000000B ,对应8个LED,全灭
+1,变成00000001B,只有最后一个灯亮
+1,00000010B,只有倒数第二个灯亮
+1,00000011B,最后两个灯亮....

用汇编语言怎么实现,不会写中断程序!

ORG 00H

AJMP MAIN

ORG 13H

AJMP EX1INT

ORG 0030H


 

MAIN:

MOV P1,#0

SETB EA

SETB EX1

SETB IT1

 

MAIN1:

MOV P1,A 

AJMP    MAIN1


 

EX1INT:

INC A

CJNE A,#0,RTI

MOV A,#0

RTI:

RETI


 

 

END 

追问

这个是不是没有延时?

追答

没要求延时吧

追问

我们这个实验是外部中断实验,我就是不会写中断。。另外我貌似搞错了,这个灯控制应该是用+1还是-1?麻烦帮我看看,谢谢

追答

我有用了外部中断
外部中断你就是初始化一下,开总中断SETB EA(),开外部中断1(SETB EX1),下降沿触发(SETB IT1)就可以了。然后在中断子程序里写上中断时需要的东西。
加1还是减1,看你的图怎么画了。你自己试试。

你的这个仿真图,P3.3的上拉电阻不知为什么是0R1,你改成10K,或去掉,我上面的程序就可以仿真了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-28
按照楼主的电路,下列程序就可以达到加一的效果。

ORG 0000H
SJMP MAIN
ORG 0013H
SJMP X1_INT
ORG 0030H
MAIN:
SETB IT1
SETB EX1
SETB EA
MOV A, #255
SJMP $ ;等待中断

X1_INT:
DEC A ;减一,相当于加一
MOV P1, A ;因为是低电平发光
;---------------下面延时约2ms
DJNZ R7, $
DJNZ R7, $
DJNZ R7, $
DJNZ R7, $
RETI ;返回
END追问

额,这几个R7明显有问题吧,延时么。。。。

追答

呵呵,明显没有问题。
是延时。
每行,DJNZ R7, $,循环256遍,延时512us。

追问

好吧,今天做实验,但是无需延时,你这个才是对的,但是分已经给别人了,对不住啊哥们

追答

分,不算什么,没有关系的。

谢谢你的回复。

相似回答