微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求大神,解决问题。。用汇编语言编程,,延时程序!

求大神,解决问题。。用汇编语言编程,,延时程序!

时间:10-02 整理:3721RD 点击:

参考下列程序,编写跑马灯控制程序,使得D1~D8的状态变化规律与题目相同,但每种状态保持的时间为0.5秒钟,(假设使用12MHz的晶体振当器)
要求按照完整的汇编语言结构书写!1
在下列程序的基础上改,使得每种状态保持的时间为0.5秒钟!求解
程序如下:
LED-INIT:   MOV    P 1 , #0F8H
              

LED-FLASH:     MOV  P2,#11111110B         

            ACALL    DELAY            

            MOV      P2,#0FDH              

            ACALL    DELAY            

            MOV      P2,#0FBH            

            ACALL    DELAY            

            MOV      P2,#0F7H           

            ACALL    DELAY            

            MOV      P2,#0EFH           

            ACALL    DELAY              

            MOV      P2,#0DFH        

            ACALL    DELAY            

            MOV      P2,#0BFH            

            ACALL    DELAY           

            MOV      P2,#7FH            

            ACALL    DELAY            

           SJMP       LED-FLASH         

  

DELAY:    MOV      R3,#255                ; 延时等待子程序,R3      255

LOOP1:     MOV      R2,#255                  ;R2      255

LOOP2:     DJNZ      R2,LOOP2            ;R2减1不为0时跳转到LOOP2处

            DJNZ       R3,LOOP1                     ;R3减1不为0时跳转到LOOP1处

            RET                                                :子程序返回

路过。

晕倒,,,,,,,,,

没人会阿

这个是要算指令周期的  具体的可以看看汇编中指令这一部分!还有就是尽量选择多重循环而不选择循环嵌套
这段程序最终执行了250*250次,而DJNZ指令执行需要2个机器周期,一个机器周期需要1微秒的时间,所以以上延时程序就是250*250*2=0.125秒。
要么就用四个延时组合成0.5s要么采用以下方法:
KKKK0:MOV R2,#XX
KKKK1:MOV R3,#LL
KKKK2:MOV R4,#NN
KKKK3:MOV R5,#MM
DJNZ R5,$
DJNZ R4,KKKK3
DJNZ R3,KKKK2
DJNZ R2,KKKK1
RET
适当选择各循环常数

DELAY:MOV        R1,#5
D3:        MOV        R3,#200
D2:        MOV        R2,#250
D1:        DJNZ        R2,D1
        DJNZ        R3,D2
        DJNZ        R1,D3
        RET
        我写了以下,这个基本实现0.5s

谢谢大神

看kan QQQ

汇编伤不起,修改起来太麻烦,不过占用空间小.

呵呵

谢谢!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top