基于SDCC和Edsim51的代码仿真
一、采用汇编语言与C语言两种方式,在Edsim51虚拟开发板上点亮一个Led灯
(一)汇编语言
1、代码
MOV 90H, #0xFE
或者
MOV 0x90,#0xFE
或者
MOV 0x90,#254
2、仿真
3、分析
因为LED0 接在P1.0端口上,8051中P1.0的地址固定为 90H,因此,对这个地址(指针)对应的寄存器写入立即数 0(低电平),就可以是 LED0电路导通,亮灯。
(二)c语言
1、代码
#include<mcs51/8051.h>voidmain()
{
while(1)
{
P1=0b11111110;
}
}
2、仿真
(1)到D:\SDCC\bin目录下先新建一个文本文档led1.text,copy 下列C代码文件在此目录下,然后
将文件名改为led1.c。并将c语言代码写入
(2)然后再命令行窗口中输入d:,在输入cd D:\SDCC\bin,切换到bin目录下,采用命令编译
sdcc --std-sdcc89 led1.c
(3)编译成功出现ihx文件
(4)接着采用命令编译将ihx文件转化为hex文件,命令如下:
packihx led1.ihx > led1.hex
(5)编译成功出现hex文件
(6)打开edsim51,点击new,load,选择生成的hex文件,然后然后在 update freq 选择 50000 ,点击 run 按钮,如下得到结果:
(三)周期性闪烁
1、C语言代码
#include<mcs51/8051.h>
void Delay(unsigned int t);
void main (void)
{
while(1)
{
p1=0b11111110;
Delay(10000);
P1=0b11111111;
Delay(10000);
}
}
void Delay(unsigned int t)
{
while(--t);
}
2、汇编语言
LOOP:SETB 90H
LCALL DELAY
CLR 90H
LCALL DELAY
AJMP LOOP
DELAY: MOV R7,#250
D1: MOV R6,#250
D2: DJNZ R6,D2
DJNZ R7,D1
RET
END
二、在Edsim51,把汇编语言点亮Led1灯的代码,手工翻译转换为机器指令,与Edsim51 编译生成的机器码指令
(一)汇编语言
MOV90H,#0xFE
(二)机器语言
1)手工翻译
MOV对应机器码为74
90H对应机器码为90
#0xFE对应机器码为FE
(2)Edsim51 编译生成的机器码指令
MOV对应机器码为75 90H对应机器码为90
#0xFE对应机器码为FE
三、用Proteus仿真完成Led灯的点亮和闪烁
(一)采用Proteus+SDCC 的C程序编程
#include<mcs51/8051.h>voidmain()
{
while(1)
{
P1=0b11111110;
}
}
(二)采用Proteus+Keil C51 的C程序编程
#include<reg51.h>voidmain()
{
while(1)
{
P1=0xFE;
}
}
(三)采用Proteus 内置汇编语言编译的方式
ORG 0000H
MOV 90H,#0FEH
Keil C51 的C程序编程
#include<reg51.h>voidmain()
{
while(1)
{
P1=0xFE;
}
}
(三)采用Proteus 内置汇编语言编译的方式
ORG 0000H
MOV 90H,#0FEH