一、采用汇编语言与C语言,在Edsim51上点亮Led
1.汇编语言
编写汇编语言代码,建立asm文件。
在Edsim51中点击“load”并找到文件,点击“run”运行代码。
代码:
MOV 90H, #0xFE
2.C语言
安装SDCC for 8051。
使用Vscode等软件编写C语言代码,得到.c文件。打开Windows命令提示符,输入“d:”等进入相应硬盘,再输入“cd ”及上述.c文件地址进入对应的代码路径。
输入代码进行编译:
sdcc --std-sdcc89 LED.c
编译成功后将.ihx文件转换为.hex文件:
packihx LED.ihx > LED.hex
代码:
#include<mcs51/8051.h>
void main()
{
while(1){
P1=0b11111110;
}
}
3.若要让LED0周期性闪烁,修改代码
汇编语言:
ORG 00H
MAIN:
MOV 90H, #0xFE
CALL DELAY
MOV 90H, #0xFF
CALL DELAY
SJMP MAIN
DELAY:
MOV R1, #50H
DELAY_LOOP:
DJNZ R1, DELAY_LOOP
RET
C语言:
#include <mcs51/8051.h>
void delay(unsigned int); // 声明延时函数
void main() {
while (1) {
P1 = 0b11111110; // LED亮
delay(1000); // 延时一段时间
P1 = 0xFF; // LED灭
delay(1000); // 延时一段时间
}
}
void delay(unsigned int ms) {
unsigned int i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < 112; j++); // 粗略的延时
}
二、8051指令
将点亮LED的汇编语言翻译成机器代码:
0110 0010 1111 1110
三、Proteus仿真完成Led灯的点亮和闪烁
电路仿真:
1.Proteus+SDCC的C程序编程
LED点亮:
#include<mcs51/8051.h>
void main()
{
while(1){
P1=0b11111110;
}
}
LED闪烁:
#include <mcs51/8051.h>
void delay(unsigned int); // 声明延时函数
void main() {
while (1) {
P1 = 0b11111110; // LED亮
delay(1000); // 延时一段时间
P1 = 0xFF; // LED灭
delay(1000); // 延时一段时间
}
}
void delay(unsigned int ms) {
unsigned int i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < 112; j++); // 粗略的延时
}
2.Proteus+Keil C51 的C程序编程
LED点亮:
#include <REGX51.H>
void main() {
while(1) {
P1 = 0xFE;
}
}
LED闪烁:
#include <REGX51.H>
void delay(unsigned int time_ms) {
unsigned int i, j;
for (i = 0; i < time_ms; i++)
for (j = 0; j < 112; j++);
}
void main() {
while(1) {
P1 = 0xFE; // 将P1端口置为低电平,LED点亮
delay(500); // 延时500毫秒
P1 = 0xFF; // 将P1端口置为高电平,LED熄灭
delay(500); // 延时500毫秒
}
}
3.Proteus 内置汇编语言
在Source Code中编写代码。
LED点亮:
MOV 90H, #0xFE
LED闪烁:
ORG 00H
MAIN:
MOV 90H, #0xFE
CALL DELAY
MOV 90H, #0xFF
CALL DELAY
SJMP MAIN
DELAY:
MOV R1, #50H
DELAY_LOOP:
DJNZ R1, DELAY_LOOP
RET