keil与仿真电路的学习(一)

最近学的真的很杂,没办法,毕竟要恰饭。keil和proteus从没用过,本篇博客用于记录两个软件的学习过程以及嵌入式编程学习过程。

 

本篇包括:

安装过程

新手村任务

keil的使用

proteus的使用

 

一、安装过程:

我之前的博客提到过keil怎么安装,并且附带了地址,可以破解。

proteus也很简单,直接下载然后破解即可

 

 

二、新手村任务

keil不方便的地方就在于他没有代码补全的功能。其他还好,支持C\C++编译,自带的内核也很多。

这里准备了两个新手项目入手,点亮led灯和跑马灯。

1. 点亮led灯

 

首先先来一个最简单的led点亮程序吧:

 

1. 新建项目,选择at89c52,空白项目,新建一个c语言文件。

2. 配置编译参数,魔术棒---output----creat hex file打钩。

3. 输入代码:

#include <reg52.h>
sbit led = P0^1;

void main()
{
	led = 0;
}

led = 0 代表了低电平,低电平就亮了,这个原理也不知道。慢慢摸索。

 

完事以后编译会生成hex文件。

打开proteus软件,开始画图

 

在proteus软件内,也是生成一个空的图纸,选择工具栏鼠标下面的devices---p(pick)先搜索at89c52然后画进去,同理画一个LED-YELLOW进去,然后在下面几个图标中找到power。

然后用线点连起来就完事了。

选择芯片右键,编辑属性,把

hex文件放进program file 里面,然后确定,点击左下角的开始,灯就亮了。

 

 

小程序挺有意思的,还是再弄一个跑马灯的试一下吧,我这里有一个跑马灯的代码,现在就差proteus的图纸不会画。

另外,我还需要理解哪些代码代表什么,为什么会有一个p^1这种东西。

 

2. 跑马灯小程序

先开始做跑马灯吧。

代码如下

#include <reg52.h>

sbit led1 = P1^0;
sbit led2 = P1^1;

void delay(unsigned int n)
{
    
    unsigned char i;
    while(--n)
        for(i = 0; i<125;i++);
    
    
}


int main(void)
{
    
    while(1)
    {
        
        led1=0;
        led2=1;
        delay(1000);
        led1=1;
        led2=0;
        delay(1000);
        
    }
    
    
}

 

建立图纸,然后80c52芯片,添加一对元器件

那个两竖线的是电容,中间一个矩阵的是晶振其他都还好,r后画完以后就跑通了,非常稳。

 

既然实现已经实现了,接下来重要的问题在于理解代码。

我们先从点亮led灯开始理解代码:

#include <reg52.h>
sbit led = P0^1;

void main()
{
	led = 0;
}

 

这个代码的疑问就在于那个:led = P0^1是什么东西,为什么P0这个参数能直接出来赋值?

我们还是到reg52.h里面一探究竟:

#ifndef __REG52_H__
#define __REG52_H__

/*  BYTE Registers  */
sfr P0    = 0x80;
sfr P1    = 0x90;
sfr P2    = 0xA0;
sfr P3    = 0xB0;
sfr PSW   = 0xD0;
sfr ACC   = 0xE0;
sfr B     = 0xF0;
sfr SP    = 0x81;
sfr DPL   = 0x82;

我节选一点reg52.h里面的代码片段,可以看到,里面是吧P0初始赋值了的,用的是16进制。

我们知道16进制的东西大多数用于地址,那么也说得通,这个reg52.h就是初始化我们的80c52芯片的一个程序。

先理解两个概念:字节地址和位地址。

1B=8Bit,所以一个字节中会有8个二进制数。我们说的按字节寻址就是找到第X个字节的位置,而按位寻址就是不仅能找到在哪个自己,还能找到具体哪一个二进制数。这个在单片机的存储单元里面会经常接触。

接下来这个sfr是一个神奇的东西,他不是广义上的类型,是一种特殊功能寄存器。

首先这个单片机的所有地址是布好的,这个比如说0x90这个地址就是引脚P1的地址,当你输入 sfr P1 = 0x90这个代码,就意味着P1就是P1了,说白了就是代码变量P1就是板子上画的P1引脚了。

我们之后对代码变量P1的操作都会直接映射到芯片P1引脚,等价于直接映射到那个地址。这三个量就是同一个东西,0x90地址、代码P1变量、板子上的P1引脚三位一体。更细节的REG52.h的分析请参考另一篇博客https://blog.csdn.net/lirunqi3/article/details/97889851

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章