标题: 用8051控制8个LED循环(用汇编写) [打印本页]

作者: 天海    时间: 2010-5-18 22:13
标题: 用8051控制8个LED循环(用汇编写)

8051输出控制8个LED循环LED从LED1到LED8再到LED1,每次LED发光并循环,一个开关控制引起中断,电平触发,中断后8个LED一起闪5下,然后恢复到前面的循环,画出链接示意图,写出程序(软件延时循环5*126*200次控制)

-------

求各位大大帮忙下 小弟刚学单片机 做不来


作者: brantyou    时间: 2010-5-19 18:40

;本程序的功能,通过P1口控制8个流水灯,从左循环到右,再从右循环到左

;其中并不包括中断按键,这个代码给你参考参考

;

PORT EQU  P1
    ORG    0000H                ;主程序开始地址0000H
             AJMP   START                ;跳转到地址MAIN处执行
             ORG    0030H                ;主程序地址0030H
START:       CALL    LEFT                ;设定左移次数,存放于寄存器R5
             CALL   RIGHT                ;将数据FFH赋值给A
             JMP     START                ;跳转到START
           
             ;以下是左移子程序
LEFT:        PUSH    PSW                 ;将PSW压入堆栈
             SETB    RS1                 ;将RS1置1,同下一条指令一起
                                         ;选定寄存器组2
             CLR     RS0                 ;将RS0置0
             MOV    R4,#8                ;将数据8赋值给R4
             MOV    A,#0FFH              ;将数据FFH赋值给A
             CLR     C                    ;将进位位C清0
NEXT1:       RLC     A                   ;带进位左移

             MOV    PORT,A                ;将A中数据赋给P2
             CALL    LATER              ;调用延时程序
             DJNZ   R4,NEXT1            ;R4=R4-1,R4≠0时,转到NEXT1
             POP     PSW                 ;出栈到PSW
             RET                         ;子程序结束,返回主程序
             ;以下是右移子程序
RIGHT:       PUSH    PSW                 ;PSW压入堆栈
             SETB    RS1                 ;将RS1置1,同下一条指令一起选定
                                         ;寄存器组2
             SETB    RS0                 ;将RS0置1
             MOV    R4,#8                ;将数据8赋值给R4
             MOV    A,#0FFH              ;将数据FFH赋值给A
             CLR     C                   ;将进位为清0
NEXT2:       RRC     A                   ;带进位位右移A
             MOV    P1,A                 ;将A中数据赋给P2
             CALL    LATER               ;调用延时程序
             DJNZ   R4,NEXT2             ;R4=R4-1,R4≠0时,转到NEXT2
             POP     PSW                 ;出栈到PSW
             RET                         ;子程序结束,返回主程序
             ;以下是延时子程序
LATER:       MOV   R7,#0FFH             ;
AD1:         MOV   R6,#0A0H             ;
AD2:         DJNZ   R6,AD2              ;
             DJNZ   R7,AD1              ;
             RET                        ;
             END                       






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1