51流水灯C实现与汇编实现

实现流水灯,崔老师的程序:
#include <reg52.h>
#include "main.h"
void main()
{
int i;
uchar out=0x01;
for(;;)
{
out=out<<1;
if (!out) out=0x01;    //左移有可能全是0
P1=out;
for (i=0; i<1000;i++);   //代替延时函数
}
}
没有使用库函数_crol_(循环左移函数),没有延时函数,没有额外的头文件。

产生的hex文件与M51文件,是一致的。


流水灯的hex文件如下:
:100800007D01ED25E0FD70027D018D90E4FEFFC3CA
:10081000EF94E8EE6480948350E80FBF00010E80EF
:01082000EEE9
:10082100EF1FAA0670011E4A600B7D7CEDD3940078
:0508310040EE1D80F700
:01083600229F
:03000000020837BC
:0C083700787FE4F6D8FD75810702080008
:00000001FF
流水灯的M51文件部分如下:
            TYPE    BASE      LENGTH    RELOCATION   SEGMENT NAME
            -----------------------------------------------------

            * * * * * * *   D A T A   M E M O R Y   * * * * * * *
            REG     0000H     0008H     ABSOLUTE     "REG BANK 0"
            IDATA   0008H     0001H     UNIT         ?STACK

            * * * * * * *   C O D E   M E M O R Y   * * * * * * *
            CODE    0000H     0003H     ABSOLUTE     
                          0003H     07FDH                  *** GAP ***
            CODE    0800H     0021H     INBLOCK      ?PR?MAIN?MAIN
            CODE    0821H     0016H     INBLOCK      ?PR?_DELAY_MS?DELAY
            CODE    0837H     000CH     UNIT         ?C_C51STARTUP

地址部分都是0800  都是0837

流水灯的各种C语言实现产生的代码量都是差不多的。但是会变成的就相差很大了。
崔老师的汇编代码如下:
ORG 0000H
LJMP START
ORG 100H
START: MOV A, #1    //将数值1放入a中
K1: RL A        //左移
MOV P1, A   //放P1
SJMP K1      //循环
END

产生的M51文件如下:
            TYPE    BASE      LENGTH    RELOCATION   SEGMENT NAME
            -----------------------------------------------------

            * * * * * * *   D A T A   M E M O R Y   * * * * * * *
            REG     0000H     0008H     ABSOLUTE     "REG BANK 0"

            * * * * * * *   C O D E   M E M O R Y   * * * * * * *
            CODE    0000H     0107H     ABSOLUTE     


  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值