单片机8051汇编语言编程问题。

2025-01-21 12:20:25
推荐回答(2个)
回答1:

就是要求重复地点亮LED1~LED8么?没有其他花样要求么?

ORG 0000H ;上电复位
AJMP START
ORG 0030H
START:
MOV A,#0FFH ;初始化
CLR C ;进位位清0
MOV R2,#08H ;循环八次初始值
LOOP:
RLC A ;左移
MOV P1,A ;赋值给P1
CALL DELAY ;调用延时
DJNZ R2,LOOP ;判断是否移完,未完继续
AJMP STAR ;移完跳转
DELAY: ;每次延时0.5秒((2x249+3)x200+2)x5=501010us
MOV R6,#5 ;将21送R5寄存器
LOOP1:
MOV R7,#200 ;将200送R7寄存器
LOOP2:
MOV R5,#249 ;将249送R7寄存器
DJNZ R5,$ ;循环执行本指令,每次R5-1
DJNZ R7,LOOP2 ;R7-1, 如果R7不等于0, 则转至LOOP2
DJNZ R6,LOOP1 ;R6-1, 如果R6不等于0, 则转至LOOP1
RET ;子程序返回

END ;程序结束

回答2:

很简单呀,最普通的流水灯控制。
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H

MOV TH0,#HIGH(65536-50000)

MOV TL0,#LOW(65536-50000)

SETB TR0

SETB ET0

SETB EA

MOV A,#0FEH

MOV P0,A

MOV R2,#0

SJMP $

T0ISR:
CLR TR0

MOV TH0,#HIGH(65536-50000)

MOV TL0,#LOW(65536-50000)

SETB TR0

INC R2

CJNE R2,#10,T0E

MOV R2,#0

RL A

MOV P0,A

T0E:
RETI

END