目录
实验一
1、要求
安装SDCC和Edsim51,采用汇编语言与C语言两种方式,在Edsim51虚拟开发板上点亮一个Led灯,并思考尝试让Led灯周期性闪烁。
2、实践
(1)点亮一个LED灯
C语言
下载完成SDCC和EdSim51后,我们先按问win+R键打开运行窗口,再输入cmd打开控制台,用cd 命令切换当前工作目录到 E:\根目录下, 用 mkdir 命令创建一个实验目录 led_test, 再切换当前工作目录到 E:\led_test 目录下。 创建或copy 下列C代码文件,在此目录下。
#include<mcs51/8051.h>
void main()
{
while(1){
P1=0b11111110;
}
}
然后采用下列命令编译
sdcc --std-sdcc89 led1.c
注意:上面包含头文件 mcs51 目录下的 8051.h ,里面定义了各个寄存器的宏定义,比如 P1 、 TCON 等,不同公司的芯片其寄存器的地址可能不一样, edSim51 仿真的芯片采用的就是 mcs51 的8051芯 片。
另一个注意的地方是 main 函数是没有返回值的。
第三个注意的地方是程序里为了表示 P1 口的各个位( bit )的值,使用了 0b11111110 这样的二进制字面 量,这是非标准的 sdcc 扩展,为此,需要在编译的时候指定 --std-sdccxx 编译选项,这里 xx 需要按需 要替换为 89 、 99 、 11 、 2x 以适应不同标准,下面是一个参考命令:
sdcc --std-sdcc89 led1.c
如果编译成功的话,可以在当期目录下生成需要 led1.* 的文件,其中包括 ihx 文件: led1.ihx ,然后需要用 sdcc 配套的工具程序 packihx 把ihx文件转换为 hex 文件,操作命令如下:
packihxled1.ihx>led1.hex
成功的话可以得到led1.hex执行程序,然后我们就可以用edSim51仿真器中的 load 按钮加载 hex 进行仿真 run。
汇编语言
汇编语言比较简单,因为LED0 接在P1.0端口上,8051中P1.0的地址固定为 90H,因此,对这个地址 (指针)对应的寄存器写入立即数 0(低电平),就可以是 LED0电路导通,亮灯。 对应的汇编命令是
MOV 90H, #0xFE
或者
MOV 0x90,#0xFE
或者
MOV 0x90,#254
注:在仿真运行之前,Edsim51的Update Frequency (刷新频率)要加大到10000或更高。
(2)让LED闪烁
C语言
按照上文中点亮一个Led时,使C语言程序借助SDCC 转换为二进制执行程序(.hex)进行仿真运行。
#include<mcs51/8051.h>
void Delay(unsigned int t