娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

手把手教你學51單片機-點亮LED

發布者:愛笑的貓咪最新更新時間:2024-08-22 來源: cnblogs關鍵字:51單片機  點亮LED  寄存器 手機看文章 掃描二維碼
隨時隨地手機看文章

在操作中學習。如果只是光看教程,沒有實際的操作,對編程語言的理解很空泛,所以決定從單片機中學習C語言。

 

#include                 //包含的頭文件。

sbit LED = P0^0;                         //這里就是對P0寄存器進行位操作。相當于對P0^0位賦予了一個新的名字,LED。實際上這一塊可以包含在頭文件中。避免重復操作。
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

void main()
{
 ENLED = 0;
 ADDR3 = 1;
 ADDR2 = 1;
 ADDR1 = 1;
 ADDR0 = 0;

 LED = 0;
 while(1);
}

 

以上程序能夠在KingST的C52單片機學習板上點亮一個LED小燈。

附上單片機原理圖


#include 

表示包含了C52單片機的特殊功能寄存器,和位的定義。


51單片機頭文件reg51.h詳解 

我們在用c語言編程時往往第一行就是頭文件,51單片機為reg51.h或reg52.h,51單片機相對來說比較簡單,頭文件里面內容不多,像飛思卡爾、ARM系列的單片機頭文件往往內容就非常多,盡管如此,對一些初次接觸單片機的朋友來說,51的頭文件還是搞不太清楚,今天具體來說明一下。


1)“文件包含”處理概念

所謂“文件包含”是指在一個文件內將另外一個文件的內容全部包含進來。因為被包含的文件中的一些定義和命令使用的頻率很高,幾乎每個程序中都可能要用到,為了提高編程效率,減少編程人員的重得勞動,將這些定義和命令單獨組成一個文件,如reg51.h,然后用#include包含進來就可以了,這個就相當于工業上的標準零件,拿來直接用就可以了。

 2)寄存器地址及位地址聲明的原因 
 reg51.h里面主要是一些特殊功能寄存器的地址聲明,對可以位尋址的,還包括一些位地址的聲明,如果如sfr P1=0x80; sfr IE=0xA8;sbit EA=0xAF等。

sfr P1 = 0x90這句話表示:P1口所對應的特殊功能寄存器P1在內存中的地址為0x80,sbit EA=0xAF這句話表示EA這一位的地址為0xAF。
        注意這里出現了一個使用很頻繁的sfr和sbit。

sfr 表示特殊功能寄存器的意思,它并非標準C 語言的關鍵字,而是Keil 為能直接訪問80C51中的特殊功能寄存器 而提供了一個新的關鍵詞,其用法是:sfr  特殊功能寄存器名=地址值(注意對于頭文件里“特殊功能寄存器名”,用戶實際上也可以修改的,如P1=0x80,也可改為A1=0x80,但sfr  和地址值則不能更改,否者會編譯出錯。)
   sbit 表示位的意思,它也是非標準C 語言的關鍵字,編寫程序時如需操作寄存器的某一位(可位尋址的寄存器才能用)時,需定義一個位變量,此時就要要到sbit,如sbit deng=P1^0,sbit EA   = 0xAF;需要注意的是,位定義時有些特殊, 用法有三種:

第一種方法:sbit 位變量名=寄存器位地址值

第二種方法:sbit 位變量名=SFR 名稱^寄存器位值(0-7)

第三種方法:sbit 位變量名=SFR 地址值^寄存器位值

如:

sbit IT0=0x88 (1)說明:0x88是IT0 的位地址值

sbit  deng=P1^2 (2)說明:其中P1 必須先用sfr 定義好

sbit EA=0xA8^7 (3)說明:0xA8 就是IE寄存器的地址值
    以上三種定義方法需注意的是 IT0 deng EA可由用戶隨便定義,但必須滿足C語言對變量名的定義規則。除些外其它的則必須按照上面的格式寫,如“名稱^變量位地址值”中“^”,它是由keil軟件的規定的 ,不能寫成其它的,只能這樣能才編譯通過。
    以上是對寄存器地址和位地址的定義和聲明作了解釋,大家需要牢牢記住:只有對寄存器及相關位進行聲明地址后,我們才能對其進行賦相關的值,keil軟件才能編譯通過。至于說為什么,這可能一句話兩句話也說不清楚。
      3)內存、SFR、位、地址等的通俗解釋 

前面講到了寄存器地址和位地址(前提能位尋址)聲明的目的是為告訴C編譯器相應寄存器及其位在內存中的地址,這樣我們對寄存器及一些位賦的變量和數值才能正確保存,然后才能供CPU正確的調用,完成相應的功能。
    上段文字出現了寄存器(SFR)、位,地址、內存等,單片機學習過程中還會出現ROM、RAM等名詞,可能大家覺得不是很好理解,這里可以通俗的解釋一下,如下面三個圖所示。
    我們把內存比作賓館,ROM、RAM、SFR相當于賓館里具體的有三種不同功能樓層(具體這個賓館多少層即多少ROM、RAM、SFR,視各個賓館或者每種單片機而不同),每層8個房間相當于8位,每個房間要么住男人要么住女人相當于每位要么放入數字1要么放入數字0,keil編譯器就相當于賓館的工作人員,旅客去住旅館相當寫程序的過程,住賓館的人必須事先要給工作人員說你是哪一層哪一個房間(即聲明寄存器地址和位地址,)賓館工作人員才能把你帶到你的房間里去(這里假設這個賓館可以由旅客自己決定住哪個房間)。即:只有對寄存器及相關位進行聲明地址后,我們才能對其進行賦相關的值,keil軟件才能編譯通過。

4)REG51.H頭文件原文及解釋
   打開reg51.h 可以看到這樣的一些內容(此文件一般在C:KEILC51INC下 ,INC文件夾根目錄里有不少頭文件,并且里面還有很多以公司分類的文件夾,里面也都是相關產品的頭文件。如果我們要使用自己寫的頭文件,使用的時候只需把對應頭文件拷貝到INC文件夾里就可以了。)
    下面附出頭文件的原文,并把注釋文件一并附后。 


/*--------------------------------------------------------------------------

 

REG51.H

 

Header file for generic 80C51 and 80C31 microcontroller.

Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.

All rights reserved. 

--------------------------------------------------------------------------*/

 

#ifndef __REG51_H__

#define __REG51_H__

 

/*  BYTE Register  */

        

 sfr P0   = 0x80;   //三態雙向     IO口      P0口 此句話的意思是:特殊功能寄存器 P0 地址為0x80 ,可位尋址,下同

                          //低8位地址總線/數據總線(一般不用而只作普通I/O口,注意作I/O口用時,硬件上需接上接電阻)

sfr P1   = 0x90;   //準雙向       IO口      P1口

 


sfr P2   = 0xA0;   //準雙向  IO口      P2口

                          //高8位地址總線,一般也作普通I/O用

sfr P3   = 0xB0;   //雙功能

                          //1.準雙向      IO口      P3口

                        //2.  P30              RXD串行數據接受

                       //    P31              TXD串行數據發送

                          //     P32              外部中斷0     信號申請

                         //     P33              外部中斷1     信號申請

                            //     P34              定時/計數器T0     外部計數脈沖輸入

                            //     P35              定時/計數器T1     外部計數脈沖輸入

                            //     P36              WR  片外RAM寫脈沖信號輸入

                            //     P37           RD  片外ram讀脈沖信號輸入

sfr PSW  = 0xD0; // 可以位尋址(C語言編程時可不考慮此寄存器)

                            //程序狀態寄存器Program Status WORD  (程序狀態信息)

                            //psw.7(CY)    進位標志

                            //psw.6(AC)輔助進位標志位低四位向高四位進位或借位時   AC=1

                            //主要用于十進制調整

                            //psw.5(F0)用戶可自定義的程序標志位

                           //psw.4(RS1)

                            //psw.3(RS0)

                            //工作寄存器選擇位

                            //任一時刻只有一組寄存器在工作

                            //0 0  0區     00H~07H

                            //0 1   1區     08H~0fH

                            //1 0   2區     10H~17H

                            //1 1   3區     18H~1FH

                            //psw.2(OV)    溢出標志位

                            //psw.1(   )      保留為 ,不可使用

[1] [2] [3] [4]
關鍵字:51單片機  點亮LED  寄存器 引用地址:手把手教你學51單片機-點亮LED

上一篇:?CS5532 C51驅動程序
下一篇:C語言基礎及流水燈實現

推薦閱讀最新更新時間:2025-06-14 15:22

8051單片機的串行接口結構及工作方式設置寄存器
8051單片機的串行接口結構 8051單片機串行接口是一個可編程的全雙工串行通信接口。它可用作異步通信方式(UART),與串行傳送信息的外部設備相連接,或用于通過標準異步通信協議進行全雙工的8051多機系統也能通過同步方式,使用TTL或CMOS移位寄存器來擴充I/O口。 8051單片機通過管腳RXD(P3.0,串行數據接收端)和管腳TXD(P3.1,串行數據發送端)與外界通信。SBUF是串行口緩沖寄存器,包括發送寄存器和接收寄存器。它們有相同名字和地址空間,但不會出現沖突,因為它們兩個一個只能被CPU讀出數據,一個只能被CPU寫入數據。 串行口的控制與狀態寄存器 串行口控制寄存器SCON 它用于定義串行口的工作方式及實施
[單片機]
80<font color='red'>51單片機</font>的串行接口結構及工作方式設置<font color='red'>寄存器</font>
STM32-1-LED點亮與熄滅
led.c文件 #include led.h void LED_Init(void){ //?¨ò?ò???GPIO_InitTypeDefààDíμ??á11ì? GPIO_InitTypeDef GPIO_InitStructure; //?a??PA?úê±?ó RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //????òa????μ?PA?ú GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //éè??òy???£ê??aí¨ó?í?íìê?3?
[單片機]
基于12C508A控制的LED循環點亮電路
該電路是一款適用于城市街道、公園和廠區亮化工程等景觀照明的LED變色燈光控制電路。電路結構簡單、壽命長、光色艷麗、柔和、美觀。 工作原理如下:電路通電,交流220V經整流后,一路經電阻R1降壓C1濾波成+5V電壓給集成塊U1(12C508A)供電;另一路直接提供給發光二極管(紅、綠、藍)的正極。當12C508A得電后,輪流從⑤腳、⑥腳、⑦腳輸出0~0.76V脈沖信號,觸發相應的可控硅導通,從而使所連接的發光二極管串發光。U1的④腳所接電阻R4和電容C3為時間常數控制(改變相應的電阻和電容容量規格,就可以改變各串發光二極管點亮的時長);R2和R3是用于通電時,啟動12C508A工作。該燈正常一個循環周期為2分鐘左右。 整個燈
[電源管理]
點亮大功率LED供電線路的驅動器
作為一種為通用照明省電的方法,LED 的使用日益普及,而高效率驅動 LED 的方法也已變得必不可少。例如,Lumileds 公司的 Luxeon 器件帶來了照明效果或房間照明。向幾個 LED 供電也許只需要一個限流電阻器,但照明應用需要 20 個以上 LED 組成的串來提供一塊區域的光亮。圖 1 中的電路基于安森美(On Semiconductor)公司面向通用離線電源的 NCP1200A 型 100kHz PWM 電流式控制器,提供了一種低成本的離線恒流源來為多個 LED 供電。雖然設計師一般為它配置或提供電壓源,但在本應用中,NCP1200A 提供了一個恒流源。圖 2 和圖 3 展示了該電路的特寫。   一個全波橋式整
[電源管理]
<font color='red'>點亮</font>大功率<font color='red'>LED</font>供電線路的驅動器
個人對STM32 SysTick的總結(寄存器操作)
一、概述: SysTick是一個簡單的遞減24位計數器。如果你不需要再應用程序中嵌入操作系統,SysTick可以作為簡單的延時和產生周期性的中斷。 狀態控制寄存器的第0位可以使能計數器,當前值寄存器隨著時鐘一直遞減,當他減到0的時候,重裝載寄存器就會重新裝載這只的值,計數器繼續從這個值遞減。 二、相關寄存器: 2.1SysTick- CTRL 狀態和控制寄存器 位16:當前值寄存器遞減到0,位16置1 位2:時鐘源選擇位,0:使用外部參考時鐘;1:使用內核時鐘 位1:使能SysTick中斷,當前值寄存器遞減到0時產生中斷 位0:SysTick時鐘使能 2.2SysTick- LOAD 重裝載值寄存器 當前值寄存器為
[單片機]
個人對STM32 SysTick的總結(<font color='red'>寄存器</font>操作)
8051特殊功能寄存器基礎詳解
  8051是一種8位元的單芯片微控制器,屬于MCS-51單芯片的一種,由英特爾公司于1981年制造。INTEL公司將MCS51的核心技術授權給了很多其它公司,所以有很多公司在做以8051為核心的單片機,如Atmel、飛利浦、深聯華等公司,相繼開發了功能更多、更強大的兼容產品。   8051單芯片是同步式的順序邏輯系統,整個系統的工作完全是依賴系統內部的時脈信號,用以來產生各種動作周期及同步信號。在8051單片機中已內建時鐘產生器,在使用時只需接上石英晶體諧振器(或其它振蕩子)及電容,就可以讓系統產生正確的時鐘信號。   8051單片微型計算機簡稱為單片機,又稱為微型控制器,是微型計算機的一個重要分支。單片機是70年代中期
[單片機]
8051特殊功能<font color='red'>寄存器</font>基礎詳解
ATmega32 通用寄存器
文件寄存器文件針對AVR增強型RISC指令集做了優化。為了獲得需要的性能和靈活性,寄存器文件支持以下的輸入/ 輸出方案: ·輸出一個 8 位操作數,輸入一個 8 位結果 ·輸出兩個 8 位操作數,輸入一個 8 位結果 ·輸出兩個 8 位操作數,輸入一個 16 位結果 ·輸出一個 16 位操作數,輸入一個 16 位結果 Figure 4 為CPU 32 個通用工作寄存器的結構。 (點擊圖片放大) Figure 4. AVR CPU 通用工作寄存器 大多數操作寄存器文件的指令都可以直接訪問所有的寄存器,而且多數這樣的指令的執行時間為單個時鐘周期。 如Figure 4 所示,每個寄存器都有一個數據內存地址,將他們直接映射到用戶數
[單片機]
ATmega32 通用<font color='red'>寄存器</font>
ATmega8 MCU 控制和狀態寄存器-MCUCSR
MCU 控制和狀態寄存器提供了有關引起MCU 復位的復位源的信息。 ? Bit 7..4 – Res: 保留 這幾位保留,讀操作始終為“0”。 ? Bit 3 – WDRF: 看門狗復位標志 看門狗復位發生時置位。上電復位將使其清零,也可以通過寫“0”來清除。 ? Bit 2 – BORF: 掉電檢測復位標志 掉電檢測復位發生時置位。上電復位將使其清零,也可以通過寫“0”來清除。 ? Bit 1 – EXTRF: 外部復位標志 外部復位發生時置位。上電復位將使其清零,也可以通過寫“0”來清除。 ? Bit 0 – PORF: 上電復位標志 上電復位發生時置位。只能通過寫“0”來清除。 為了使用這些復位標志來識別復位條件,用
[單片機]
ATmega8 MCU 控制和狀態<font color='red'>寄存器</font>-MCUCSR
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 佳木斯市| 永川市| 紫阳县| 万载县| 青田县| 曲周县| 敦煌市| 麻栗坡县| 重庆市| 长阳| 新竹县| 京山县| 武邑县| 府谷县| 镇江市| 台南市| 姜堰市| 礼泉县| 安塞县| 广平县| 朝阳市| 阳春市| 迭部县| 鄱阳县| 雷波县| 辽中县| 合山市| 呼玛县| 临颍县| 拉萨市| 吉林省| 怀集县| 班戈县| 克拉玛依市| 凤台县| 应城市| 新泰市| 大荔县| 永仁县| 延川县| 大姚县|