一、安装Protues
- Protues的下载
- Protues的安装过程
①打开安装包,找到Proteus8.8 sp1,双击打开
②由于是在虚拟机Windows XP的环境下安装,所以多一些步骤,可以不用管,直接点击下一步
③继续直接点击下一步
④开始安装向导,点击Next
⑤先勾选"I accept the terms of this agreement",再点击Next
⑥选择“Use a locally installed license key",然后点击Next
⑦直接点击Next
⑧先选择"Browse For Key File",会弹出一个新窗口,再找到License.lxk,再点击该文件
⑨点击Install,会弹出一个对话框,选择“是”,再点击“Close”
⑩开始安装,这个需要等待一段时间
二、流水灯的设计
- 原理图
①放置芯片和元件
②开始放置元件
③画总线和放置电源
④连接元件
原理图:
三、程序编写
程序编写的准备
集成开发环境:Keil C51
建立一个项目
①打开Keil uVision,点击Project,找到New uVision Project,点击它
②给建立的项目取一个名字
③选择项目需要使用的芯片,选择完成后,点击OK(该实验要用到的芯片是AT89C51)
-
④出现一个对话框,选择是,一个项目就建立完成,就可以开始代码的编写
-
流水灯的代码
-
#include <reg51.h> #include <intrins.h> //延迟函数 void delay_ms(int a) { int i,j; for(i=0;i<a;i++) { for(j=0;j<1000;j++) _nop_(); } } void main(void) { while(1) { P0=0xfe; delay_ms(50); P0=0xfd; delay_ms(50); P0=0xfb; delay_ms(50); P0=0xf7; delay_ms(50); P0=0xef; delay_ms(50); P0=0xdf; delay_ms(50); P0=0xbf; delay_ms(50); P0=0x7f; delay_ms(50); } }
-
生成Hex文件的方法
代码编写完成后,在Keil uVision中点击Options for Target进入一个新的界面,首先点击Output,然后勾选Create Hex File,最后点击OK。完成这些设置后,点击编译,生成该文件。
四、 仿真
-
首先,双击原理图中的AT89C51芯片然后,点击图中的三角标志,开始仿真
-
仿真效果
五、问题
嵌入式C程序代码对内存(RAM)中各变量的修改操作与对外部设备(寄存器-对应相关管脚)的操作的相同点和不同点:
相同点:
1、变量和寄存器都通过定义来代表内存或外设中的一个空间地址。
2、都可采用C语言进行编写。
3、都通过变量或寄存器来实现对内存或外设的读写操作
不同点:
1、变量操作的对象是内存中的RAM空间,寄存器操作对象是外设内部的寄存器空间。
2、变量地址使相对地址,寄存器地址通常是绝对物理地址。
3、变量操作直接影响内存中的数据,寄存器操作通过改变寄存器的值来控制外设的工作状态或数据线的电平变化。
4、变量操作修改的是存储在内存里的数据,由CPU直接读取和写入,比较便捷,对外设设备操作的是硬件,通过对各个寄存器的修改来操作,因此速度相对于内存来说比较慢。
5、变量在内存中以字或字节为单位读写,寄存器根据不同外设可能以单个bit为单位操作。
2、为什么51单片机点亮LED灯编程比STM32点灯简单 51单片机开发通常是直接操作寄存器,I/O口直接连接LED的,只需要将口线设置为输出状态并输出高电平,而STM32需要外设驱动LED,比较复杂。51单片机没有内部外设,I/O口操作不需要外设时钟和初始化设置,STM32需要配置外设时钟等。而且51单片机的资源较少,I/O地址简单,STM32外设资源更多,启动文件更加复杂。在编写程序时,51单片机电灯代码简单,只需要几行代码,而且比较好理解,STM32代码复杂且麻烦,不宜看懂。
3.关键字register和volatile 的作用及解释register关键字:
用于声明自动变量,作用是请求编译器让变量直接放在寄存器中,以提升变量的访问速度。
register int i;
volatile关键字:
和const一样是一类型修饰符,用它修饰的变量表示可以被某些编译器位置的因素更改,比如操作系统、硬件或者其他线程等,遇到这个关键字声明的变量,编译器对该变量的代码就不再进行优化,从而可以提供对有特殊地址的稳定访问。
volatile int i;
六、总结
通过从建立到仿真的整个过程,让我对整个过程有了进一步的了解,进一步的掌握到整个过程操作。但是,在整个过程还是遇到了许多的问题,像原理图的整个设计上,还存在不理解的情况。代码部分自己不是很清楚每个语句的真实含义。