51單片機C語言編程中對單片機絕對地址訪問的兩種方法

2020-12-22 電子產品世界

在進行8051單片機應用系統程序設計時,編程都往往少不了要直接作業系統的各個存儲器地址空間。C51程序經過編譯之後產生的目標代碼具有浮動地址,其絕對地址必須經過BL51連接定位後才能確定。為了能夠在C51程序中直接對任意指定的存儲器地址進行操作,可以採用擴展關鍵字「at」、指針、預定義以及連接定位控制命令。

在這些方法中,本人認為最簡單而有效的方法是用「 _at_ 」關鍵字來對指定變量存儲器空間絕對地址來指定。一般格式如下:

本文引用地址:http://www.eepw.com.cn/article/201611/321872.htm

[存儲器類型]數據類型 標識符_at_地址常數

其中:

存儲器類型為idata、data、xdata等C51能夠識別的所有類型,最好不要省略。

數據類型可以用int、long、float等基本類型,當然也可以用數組、結構等複雜數據類型本人認為一般用unsigned int 就可以解決很多問題了。

標識符就是要定義的變量名,編程者自己決定

地址常數就是要直接操作的存儲器的絕對地址,必須位於有效的存儲器空間之內。

注意:不能對變量進行初始化,只能是全局變量,一般不要輕易用,免得出錯。

舉例:

xdataunsigned intaddr1_at_ 0x8300;

另有一種方法就是要用到一個頭文件absacc.h,也不是很難,舉個例說明一下就會明白:

#include

XBYTE[0x8300]=0;/*向外部存儲器(XDATA)地址0x8300寫0

本人強烈建議用at,這樣可能會更好些,還有一點就是不能亂用,因為有些存儲器空間不能隨便佔用,C51編譯器已經做其它的用了,而且有些空間單片機本身就做了很重要的作用,如果亂用,很容易出錯.


相關焦點

  • 單片機編程軟體大佬:明確單片機編程軟體編寫單片機程序步驟
    單片機用什麼軟體編程?單片機開發中除必要的硬體外,同樣離不開軟體,我們寫的彙編語言源程序要變為CPU可以執行的機器碼有兩種方法,一種是手工彙編,另一種是機器彙編,目前已極少使用手工彙編的方法了。機器彙編是通過彙編軟體將源程序變為機器碼,用於MCS-51單片機的彙編軟體有早期的A51,隨著單片機開發技術的不斷發展,從普遍使用彙編語言到逐漸使用高級語言開發,單片機的開發軟體也在不斷發展,Keil軟體是目前最流行開發MCS-51系列單片機的軟體,這從近年來各仿真機廠商紛紛宣布全面支持Keil即可看出。
  • 51單片機基礎剖析(基於C語言)
    一個函數的存儲器模式確定了函數的參數的局部變量在內存中的地址空間。處於SMALL模式下的函數參數和局部變量位於8051單片機內部RAM中,處於COMPACT和LARGE模式下的函數參數和局部變量則使用單片機外部RAM。在定義一個函數時可以明確指定該函數的存儲器模式。方法是在形參表列的後面加上一存儲模式。
  • PIC單片機C語言程序實例
    用彙編語言編程,直接、簡捷,可有效地訪問和控制各種硬體設備,如存儲器、I/O口等,目標代碼簡短、佔用內存少、執行速度快、語句效率高。然而,由於彙編語言是面向機器的語言,不同廠家或同廠家不同系列的單片機。其彙編語言指令系統往往互不相同,即通常所說的「不兼容」。
  • 51單片機彙編指令的記憶方法
    MCS-51使用彙編語言指令,它共有44個操作碼助記符,33種功能,其操作數有#data、direct、Rn、@Ri等。這裡先介紹指令助記符及其相關符號的記憶方法。一、助記符號的記憶方法1 表格列舉法把44個指令助記符按功能分為五類,每類列表記憶。此處從略,請讀者自己總結。
  • ADC0809與MCS-51單片機接口電路圖及編程
    其內部有一個8通道多路開關,它可以根據地址碼鎖存解碼後的信號,只選通8路模擬輸入信號中的一個進行A/D轉換。目前僅在單片機初學應用設計中較為常見。   ADC0809是CMOS單片型逐次逼近式A/D轉換器,內部結構如圖所示,它由8路模擬開關、地址鎖存與解碼器、比較器、8位開關樹型A/D轉換器、逐次逼近寄存器、邏輯控制和定時電路組成。
  • 為什麼C語言是最適合單片機編程的高級語言!
    為什麼還在用C語言編程?答案是:C語言是最適合單片機編程的高級語言。 這個問題的意思應該是:現在有很多很好用的高級語言,如java,python等等,為什麼這些語言不能用來編寫單片機程序呢?那麼這個問題的答案就是:不是不能,而是不合適。
  • 51單片機教程
    小到電話,玩具,手機,各類刷卡機,電腦鍵盤,彩電,冰箱,空調,電磁爐,大到汽車,工業自動控制,機器人,飛彈導航裝置,你可以用51單片機用它來做個鬧鐘,電飯煲定時控制器,電子門鎖,IC卡讀取識別器。電飯煲定時控制器如圖本文引用地址:http://www.eepw.com.cn/article/272993.htm
  • 單片機視頻教程
    導讀:在無老師指導的情況下學習單片機,不免會產生這樣或那樣的問題而無處求解,對於自學而言,視頻教程是最合適不過的了,本文就為大家講解單片機視頻~~本文引用地址
  • 最適合單片機編程的高級語言,除了C語言,別無選擇!
    單片機為什麼還在用C語言編程?答案是:C語言是最適合單片機編程的高級語言。 這個問題的意思應該是:現在有很多很好用的高級語言,如java,python,VC等等,為什麼這些語言不能用來編寫單片機程序呢?那麼這個問題的答案就是:不能不能,而是不合適。
  • 單片機c語言教程:C51循環語句
    如一個 12M 的 51 晶片應用電路中要求實現 1 毫秒的延時,那麼就要執行 1000 次空語句 才能達到延時的目的(當然能使用定時器來做,這裡就不討論),如果是寫 1000 條空語 句那是多麼麻煩的事情,再者就是要佔用很多的存儲空間。
  • 基於C語言51單片機電子密碼鎖的設計與仿真
    0、引言  電子密碼鎖是現代生活中常用的加密工具。  電子密碼鎖通常使用ARM和單片機控制,單片機相對ARM實現較為簡單,功能較為完善,因此使用單片機控制較多。用單片機控制的窖碼鎖常使用彙編語言編寫程序,顯示器多數用。而本文所介紹的電子密獁鎖使用移植性及可讀性強的高級語言C語言編寫,便於修改和增減功能蚤同時採用顯示清楚數碼管,功率消耗小而且壽命長的 液晶顯示器,顯示更加直觀,使用更加方便。
  • 下載 | 《手把手教你學51單片機-C語言版》
    編輯推薦《手把手教你學51單片機(C語言版)》的創作,目的就是改變當前「51單片機」教學與自學的模式:國內首創「手把手教你學」——集理論知識、視頻教程可以預見,《手把手教你學51單片機(C語言版)》將引領一場單片機教學的革命!作者簡介宋雪松 ,國內知名單片機培訓專家,嵌入式產品技術顧問。擁有近十年產品研發經驗,曾主持研發通信類、虛擬儀器等多款產品,在硬體電路設計和嵌入式軟體設計方向有豐富的項目實戰經驗。
  • 單片機c語言教程:C51運算符和表達式(指針和地址運算符)
    指針是單片機C語言中一個十分重要的概念,也是學習單片機C語言中的一個難點。對於指針將會在第九課中做詳細的講解。在這裡我們先來了解一下單片機C語言中供給的兩個專門用於指針和地址的運算符:本文引用地址:http://www.eepw.com.cn/article/170885.htm* 取內容 取地址取內容和地址的一般形式分別為:變量 = * 指針變量 指針變量 = 目標變量
  • 51單片機輕鬆入門與實踐 — 暢學單片機
    ,講解當前最熱門的51單片機的C程序設計!本課程打破了單片機教學的傳統模式,採取實例模塊製作的方法,從該模塊需用到的單片機理論知識,再加上該模塊用到的「器件介紹」環節,外圍電路設計講解部分以及要實現該模塊的軟體功能-編程詳解,巧妙地將單片機原理與應用、外圍電路設計、單片機C語言編程的知識點融入各個模塊項目中,不僅開闢了單片機應用的視野,又充實了對單片機從基礎到應用所需要的知識。
  • 【愛找茬】都是C語言,單片機C語言和普通的C語言究竟有什麼差異呢?
    單片機的C語言: 單片機軟體設計使用C語言作為編程開發軟體,採用模塊化的程序結構,設計了按鍵模塊程序、RFID模塊程序、日曆時鐘模塊程序、GPRS模塊程序、顯示存儲模塊程序等,並編寫系統主程序,將五個程序模塊組合在一起,實現單片機控制系統的整體功能。
  • 在MCS51單片機中對特殊功能寄存器的C51定義
    本文引用地址:http://www.eepw.com.cn/article/201611/318618.htm接著我們以STC系列的51單片機為例簡單的了解下單片機的特殊功能寄存器布局,如下:為了能直接訪問這些SPR,FranklinC51提供了一種自主形式的定義方法,這種定義方法與標準C語言不兼容,只適合與對MCS-51系列單片機進行C語言編程,特殊的能寄存器C51定義的一般語法格式如下:sfrsfr-name=intconstant;「sfr」是定義語句的關鍵字,其後必須跟一個MSC-51單片機真實存在的特殊功能寄存器名,「=」後面必須是一個整型常數,不允許帶有運算符的表達式
  • MCS-51單片機控制跑馬燈的三種方法
    在MCS一51單片機的控制系統中,它的四個並行8位輸入輸出埠P0一P3是我們經常使用的。在並行埠的編程學習中,「跑馬燈」是單片機並行埠輸出控制的典型實例。所謂跑馬燈,是指將八個發光二極體分別連接到單片機的某一併行埠的八根線上,通過編程控制這八個發光二極體從低到高或從高到低依次點亮。
  • 單片機C語言編程心得
    寫這個8*8按鍵程序的過程中,不管是在自己寫還是參考別人程序的過程中,發現自己對C語言有些基本知識點和編程規範有很多不懂的地方,有些是自己以前的編程習慣不好,有些就是基礎知識不紮實的表現,所以總結出來。
  • 單片機應用編程技巧100問
    它大致等於計算機執行簡單操作(如賦值操作,比較操作等)所需要的時間與算法中進行簡單操作次數的乘積。通常把算法中包含簡單操作次數的多少叫做算法的時間複雜性。它是一個算法運行時間的相對量度,一般用數量級的形式給出。度量一個程序的執行時間通常有兩種方法:一種是事後統計的方法。因為很多計算機內部都有計時功能,不同算法的程序可通過一組或若干組相同的統計數據以分辨優劣。
  • 8051單片機模塊化編程技巧
    目前在8051 單片機應用開發中主要有兩種程式語言:彙編語言和C51 語言。