一.LED灯点亮
1.汇编语言
当使用汇编语言点亮LED灯,由于LED灯在P1.0端口(地址90H)在其中写入0便可以点亮。
MOV 90H, #0xFE
或者
MOV 0x90,#0xFE
或者
MOV 0x90,#254
便可以得到以下结果:
2.C语言
代码如下:
/* LED1.c source code */
#include<mcs51/8051.h>
void main()
{
while(1){
P1=0b11111110;
}
}
这时候需要借用SDCC来编译如下:
首先使用命令窗口找到sdcc的bin文件后将led1.c放入再输入指令“sdcc --std-sdcc89 led1.c”得到图中显示:
其中会出现.ihx文件,使用指令“packihx led1.ihx> led1.hex”将其转化为.hex指令;
再到edsim51找到文件并仿真:
最后得到如下结果。
3.关于LED闪烁:
(1).汇编语言:
ORG 0H ; 程序起始地址
MOV P1, #00H ; 将P1口置为低电平
LOOP:
SETB P1.0 ; 将P1.0口置为高电平
ACALL DELAY ; 调用延时函数
CLR P1.0 ; 将P1.0口置为低电平
ACALL DELAY ; 调用延时函数
SJMP LOOP ; 无条件跳转到LOOP标签
DELAY:
MOV R0, #0FFH ; 设置延时计数器初值
DELAY_LOOP:
DJNZ R0, DELAY_LOOP ; 延时计数器递减,直到为0
RET ; 返回
END ; 程序结束
如图所示:
(2).c语言:
#include <mcs51/8051.h>
//延迟函数
void delay_ms(int a)
{
while(--a);
}
void main(void)
{
while(1)
{
P1=0b11111110;
delay_ms(10000);
P1=0b11111111;
delay_ms(10000);
}
}
二、在Edsim51,把汇编语言点亮Led1灯的代码,手工翻译转换为机器指令
汇编语言:
MOV 90H, #0xFE
MOV | 74 |
90H | 90 |
#0xFE | FE |
edsim51生成的机器码指令
三、在proteus上完成仿真
电路图如图所示:
1.sdcc中c语言
/* LED1.c source code */
#include<mcs51/8051.h>
void main()
{
while(1){
P1=0b11111110;
}
}
点亮后:
2.keil c51中c语言
#include<reg51.h>
void main()
{
while(1){
P1=0xFE;
}
}
点亮后:
3.proteus中汇编
ORG 0000H
MOV 90H ,#OFEH
在芯片右键选择最下面编译源代码后:
之后点亮: