2017.12.9 前幾章的總結

来源:http://www.cnblogs.com/wongsh/archive/2017/12/09/8012594.html
-Advertisement-
Play Games

1.首先是特殊功能寄存器。 認為指的是P0,P1,P2,P3,P4. 在頭文件<reg52.h>有對特殊功能寄存器的地址分配。 另一個是sbit,是對P0等的8個口的定義。例sbit LED = P0^0,就相當於用LED表示 P0^0. 可以理解成別名。 2.電磁干擾,冬天毛衣靜電,靜電放電ESD ...


1.首先是特殊功能寄存器。  認為指的是P0,P1,P2,P3,P4.    在頭文件<reg52.h>有對特殊功能寄存器的地址分配。

  另一個是sbit,是對P0等的8個口的定義。例sbit LED = P0^0,就相當於用LED表示 P0^0. 可以理解成別名。

2.電磁干擾,冬天毛衣靜電,靜電放電ESD,手機收音機有雜音,快速瞬間群脈衝EFT,熱插拔產生的浪涌,Surge。

3.電容有兩個作用,作用1,緩衝作用,當剛上電 的時候,電流從電源處流下來,不穩定,容易衝擊電子元器件,加個電容可以緩衝。作用2,穩定作用,比如,後面有個電子元器件沒有工作時,電流時100mA,當它工作時,電流突然變成150mA,這個時候沒有電容,電壓就是直接下降。而電子元器件必須高於一定的電壓才能工作,所以這個時候電容就派上用場了。電源處的去耦高頻電容,基本可以直接用0.1uF。

4.三極體。箭頭朝內PNP,導通電壓順箭頭通過,電壓導通,電流控制。就是箭頭的始端比箭頭末端高0.7V,就可以導通ec之間。

5.unsigned char 0~255,signed char -128~127,unsigned int 0~65535,signed int -32768~32767

6.定時器。時鐘周期就是晶振周期分之一。機器周期是12個時鐘周期。

  TCON定時器控制寄存器的位描述,可位定址。TF1是定時器1溢出標誌,發生溢出時硬體置1,清零的方式有軟體清零或進入定時器中斷時硬體清零。

  TR1定時器1運行控制位,軟體置位/清零來進行啟動/停止。

  TMOD定時器模式寄存器,不可位定址。M1,M0.

7.中斷。IE中斷使能寄存器的位分配。可位定址。EA =1 總開關。ET2 定時器2中斷使能,ES串口中斷使能。ET1 定時器1中斷使能,EX1,外部中斷1使能,ET0定時器0中斷使能,EX0外部中斷使能。

中斷查詢序列

中斷函數編號 中斷名稱 中斷標誌位 中斷使能位 中斷向量地址 預設優先順序
0 外部中斷0 IE0 EX0 0x0003 1
1 T0中斷 TF0 ET0 0x000B 2
2 外部中斷1 IE1 EX1 0x0013 3
3 T1中斷 TF1 ET1 0x001B 4
4 URAT中斷 TI/RI ES 0x0023 5
5 T2中斷 TF2/EXF2 ET2 0x002B 6

中斷函數編號 = x*8 +3 = 向量地址

IP 中斷優先順序寄存器位分配,可位定址。

PT2  定時器2 中斷優先順序控制位

PS 串口中斷優先順序控制位

PT1 定時器1中斷優先順序控制位

PX1 外部中斷1中斷優先順序控制位

PT0 定時器0中斷優先順序控制位

PX0 外部中斷0 中斷優先順序控制位

 

 

 

 


為什麼要取反,二進位在左移或者是右移,都是要補0.所以為了避免麻煩,還是取反來的方便。

 

下麵的程式是流水燈,沒有用定時器,然後,後面會對程式進行優化,使用定時器和中斷。

#include <reg52.h>
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main()
{
unsigned int i;
unsigned char flag = 0;
unsigned char ChuZhi = 0x80;

ADDR0=0;
ADDR1=1;
ADDR2=1;
ADDR3=1;
ENLED=0;




while(1)
  {
    P0=~ChuZhi;
    for(i=0;i<20000;i++);

    if(flag == 0)
    {
        ChuZhi = ChuZhi >>1;
        if(ChuZhi == 0x01)
        {
          flag = 1;
        }
    }

    else
    {
      ChuZhi = ChuZhi<<1;
      if(ChuZhi == 0x80)
      {
        flag = 0;
      }
    }
  }
}

 

 

 使用定時器 實現流水燈

#include <reg52.h>
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main()
{
unsigned char flag = 0;
unsigned char ChuZhi = 0x80;
unsigned char cnt = 0;

ADDR0=0;
ADDR1=1;
ADDR2=1;
ADDR3=1;
ENLED=0;

TMOD = 0x01;
TH0 = 0x4C;
TL0 = 0x00;
TR0= 1;



  while(1)
  {

  if(TF0 == 1)
    {
    TF0 = 0;
    TH0 = 0x4C;
    TL0 = 0x00;
    cnt++;
    if(cnt >= 20)
      {
      cnt = 0;
      P0=~ChuZhi;
      if(flag == 0)
        {
      ChuZhi = ChuZhi >>1;
        if(ChuZhi == 0x01)
          {
          flag = 1;
          }
        }

        else
        {
        ChuZhi = ChuZhi<<1;
        if(ChuZhi == 0x80)
          {
          flag = 0;
          }
        }
      }
  }
}
}

 

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 當Web Api 2.0使用OAuth2授權時,如何在Swagger中添加Authorization請求頭? Swagger說明文檔支持手動調用Api, 但是當Api使用OAuth2授權時,由於沒有地方可以輸入授權Token, 導致響應結果一直是401沒有授權。 解決方案: 在Swagger配置文件 ...
  • Ticks是一個周期,存儲的是一百納秒,換算為秒,一千萬分之一秒。我們需要計算2個時間之間,經過多少Ticks,可以使用下麵的方法來實現,使用2個時間相減。得到結果為正數,是使用較晚的時間減去較早的時間。反之為負數,即是使用較早的時間減去較晚的時間。創建一個對象: class Ag { privat ...
  • 一.TcpClient與TcpServe。 首先我們需要知道伺服器的IP地址,在伺服器端建立監聽,當監聽到客戶端的連接請求後,連接到客戶端。 而客戶端則需要連接到指定的IP伺服器地址,建立網路流,則可以實現通信。 接下來給出一個伺服器端與客戶端的實例: 伺服器端: 此時伺服器端應用的是Socket類 ...
  • 實例01 實現一個簡單的Web服務訪問 本實例將實現IP地址查詢介面服務,根據用戶傳入的IP地址返回IP所在的省、市、地區,實例中將會用到IP地址庫用於查詢信息,由於數據較多,所以讀者可在光碟資源文件中直接附加資料庫文件,這裡將不再介紹導入數據的過程。 程式實現步驟如下: (1)打開Visual S ...
  • 常用集合介面系列:http://www.cnblogs.com/fengxiaojiu/p/7997704.html 常用集合類系列:http://www.cnblogs.com/fengxiaojiu/p/7997541.html 常用集合類: 數組(Array)的不足(即:集合與數組的區別) 1 ...
  • Elastic 的底層是開源庫 Lucene。但是,你沒法直接用 Lucene,必須自己寫代碼去調用它的介面。Elastic 是 Lucene 的封裝,提供了 REST API 的操作介面,開箱即用。Elastic 的底層是開源庫 。但是,你沒法直接用 Lucene,必須自己寫代碼去調用它的介面。E ...
  • 作者 [email protected] 彭東林 平臺 busybox-1.24.2 Linux-4.10.17 Qemu+vexpress-ca9 概述 在寫驅動的時候,我們經常會向用戶空間導出一些文件,然後用戶空間使用cat命令去讀取該節點,從而完成kernel跟user的通信。但是有 ...
  • 1、啟動vm服務 如果遇到無法啟動時,需要還原vm預設配置解決 2、更改vm設置為NAT模式 3、centOS開啟DHCP ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...