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

 

 

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