PIC單片機基礎2

来源:http://www.cnblogs.com/xbook-ben/archive/2017/09/28/7607757.html
-Advertisement-
Play Games

PIC中檔系列單片機,每條指令14位,共有35條彙編指令,根據操作對象不同,可將其分為三類: 位元組操作類指令 位操作類指令 立即數與控制類操作指令 1、位元組操作類指令,以MOVF指令為例: 指令:MOVF f, d 說明: 功能:寄存器f值傳送; MOVF為助記符,即操作指令,大小寫均可; f代表文 ...


PIC中檔系列單片機,每條指令14位,共有35條彙編指令,根據操作對象不同,可將其分為三類:

  • 位元組操作類指令
  • 位操作類指令
  • 立即數與控制類操作指令

1、位元組操作類指令,以MOVF指令為例:

指令:MOVF     f, d

說明:

  • 功能:寄存器f值傳送;
  • MOVF為助記符,即操作指令,大小寫均可;
  • f代表文件寄存器標識符,即RAM寄存器(PIC單片機基礎1中有說明),取值範圍為[0, 127]
  • d代表目標標識符,表明指令操作的結果放在何處;

   d=0:操作的結果放在W寄存器中;

   d=1:操作的結果放在f寄存器中;

  • 影響狀態位:Z
  • 指令周期:1(執行本指令需要的時間)

實例1

假設執行指令前,F寄存器22H的值為05HW寄存器內的值為00H

MOVF    22H, 0

由於d=0,指令執行後結果存入W寄存器:

  22HF寄存器)= 05H

  W =  05H

  Z =  0

指令應用:由於PIC指令中,不存在F寄存器之間的值傳遞操作指令,這種操作需要藉助W寄存器作為中介,並且此指令也可以直接給W寄存器賦值;

實例2

假設執行指令前,F寄存器22H的值為05HW寄存器內的值為00H

MOVF    22H, 1

由於d=1,指令執行後結果存入F寄存器(即22H):

  22HF寄存器)= 05H

  W =  00H

  Z =  0

指令應用:指令操作以後,寄存器值大小、位置都沒變,那麼這種指令有什麼用呢?答案是:通過狀態位Z判斷寄存器的值是不是0

PIC的彙編指令中,我們沒有高級語言中if (var == 0)這樣方便的判斷操作,想要判斷一個寄存器的值是不是0,只有通過狀態寄存器中的Z位來判斷。當某條可以影響Z狀態位的指令執行後,如果Z=0,則說明指令執行的結果非0;如果Z=1,則說明執行的結果為0

上面的指令操作後Z=0,所以判斷22H中的值非0

2、位操作類指令,以BCF指令為例:

指令:BCF    f, b

說明:

  • 功能:f寄存器的位b清零;
  • BCFf不在贅述,命令中的b表示f寄存器的位b,從零開始,取值範圍為0~7
  • 影響狀態位:無(PIC的所有位操作指令都不影響狀態位);
  • 指令周期:1

示例:

假設執行指令前,FLAG_REG寄存器的值為0xFF1111 1111b

BCF    FLAG_REG3

註意:位是從0開始的,指令中的位3,實際對應的是寄存器的第四位

執行後:

FLAG_REG = 0xF71111 0111b

指令應用:在程式中,我們經常會用到很多標誌位,通過標誌位來確定某項功能的當前狀態,標誌位的狀態可通過位操作實現。

3、立即數與控制類操作指令,以MOLW指令為例:

指令:MOVLW    k

說明:

  • 功能:立即數k送入W寄存器;
  • K為立即數,取值範圍為[0, 255]
  • 影響狀態位:無;
  • 指令周期:1

以下通過兩個具體示例,說明對於立即數k的理解:

示例1

假設執行指令前W寄存器值為00H

MOVLW    30H

執行後:

W = 30H

這種操作,明顯直接。

示例2

假設執行指令前寄存器UD_REG的地址為25H,寄存器的值為45HW寄存器的值為00H

MOVLW    UD_REG

執行後:

W = 25H

先說一下寄存器、寄存器地址、寄存器值、寄存器名的關係:

寄存器:我們可以把它當做一個個的盒子;

寄存器地址:由於盒子(寄存器)太多,我們需要給每個盒子加一個編號,00,01,…,這樣便於我們描述要找的是哪一個盒子,這個編號就是寄存器地址;

寄存器值:在這些盒子裡面,我們可以放鞋子、襪子…,這些放在盒子裡面的東西就是寄存器的值;

寄存器名:為了讓人便於知道盒子裡面裝的是什麼,我們可以給盒子起一個別名,比如01編號裡面裝的是運動鞋,那麼可以把它叫做運動鞋盒,以後說運動鞋盒,就是指01編號盒子,上面的UD_REG就是這個道理;

在示例2中,執行指令後W寄存器的值是寄存器UD_REG的地址。所以在執行此類操作時,一定要小心謹慎,不能被寄存器的值忽悠了。

以上是對三類命令的大體分析,完整的指令列表詳見單片機的數據手冊或指令集說明手冊。

 


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

-Advertisement-
Play Games
更多相關文章
  • 註釋方法: 1,單行註釋: // 2, 多行註釋: /* */ 二,數據類型 1,integer(整數型):在三十二位操作系統中它的有效範圍是:-2147483648~+2147483648; 2,string(字元串):字元串變數不同於其他編程語言有字元與字元串之分,在PHP中統一使用字元型變數來 ...
  • 1 概述 1 概述 阻止保存要求重新創建表的更改,場景是這樣的:假設資料庫中有一張員工表EmployeeInfo,如下所示: 其中有個欄位EmployeeBirthday,在設計表時,其類型誤設為VARCHAR類型,此時需要更改其數據類型,即VARCHAR類型更改為DateTime類型,SqlSer ...
  • 簡單的介紹一下,我使用MongoDB的場景。 我們現在的物聯網環境下,有部分數據,採樣頻率為2000條記錄/分鐘,這樣下來一天24*60*2000=2880000約等於300萬條數據,以後必然還會增加。之前資料庫使用的是mssql,對於資料庫的壓力很大,同時又需要保證歷史查詢的響應速度,這種情況下, ...
  • 原文發表於cu:2017-06-12 本文簡單介紹MySQL雙主複製原理及1個簡單是雙主複製驗證。 一.MySQL雙主複製原理 1. 雙主複製原理 master-master複製的兩台伺服器,既是master,又是另一臺伺服器的slave,本質上互為主從。 二.驗證環境 1. 操作系統 CentOS ...
  • 1.把需要的腳本下載放到/root 目錄下,然後運行本腳本即可自動化安裝lnmp環境: ...
  • CentOS安裝Python3.X 1、系統環境說明 2、安裝軟體說明 2.1 python軟體包版本3.5.2 2.2 軟體安裝目錄為/application、/home/oldboy/tools 存放源碼包 2.3 CentOS 6.4自帶2.6,所以為了方便區分,將python3.X安裝在/a ...
  • 換了台本子win7 64位,抽空做個雙系統,裝了下linux。 遇到開機問題:進linux可以正常使用,進win7花屏死機,初步估計是grub(此時的boot sector位grub)的問題,啟動器被破壞一種表現。 對應做了以下處理: 1、在linux下修改/boot/grub/gurb.cfg,把 ...
  • 1.查看Firewall 服務狀態 2.查看Firewall 的狀態 註意: firewalld預設配置文件有兩個:/usr/lib/firewalld/ (系統配置,儘量不要修改)和 /etc/firewalld/ (用戶配置地址) 先把ssh的埠改下 防止不能遠程操作了 3、開啟、重啟、關閉、 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...