日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]本章討論以下內容: ●絕對地址訪問●C與匯編的接口 ●C51軟件包中的通用文件 ●段名轉換與程序優(yōu)化第一節(jié) 絕對地址訪問C51提供了三種訪問絕對地址的方法:1. 絕對宏:在程序中,用“#include”即可使用其中定義的宏

本章討論以下內容:

●絕對地址訪問

●C與匯編的接口

●C51軟件包中的通用文件

●段名轉換與程序優(yōu)化


第一節(jié) 絕對地址訪問

C51提供了三種訪問絕對地址的方法:

1. 絕對宏:

在程序中,用“#include”即可使用其中定義的宏來訪問絕對地址,包括:

CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD

具體使用可看一看absacc.h便知

例如:

rval=CBYTE[0x0002];指向程序存貯器的0002h地址

rval=XWORD [0x0002];指向外RAM的0004h地址

2. _at_關鍵字

直接在數據定義后加上_at_ const即可,但是注意:

(1)絕對變量不能被初使化;

(2)bit型函數及變量不能用_at_指定。

例如:

idata struct link list _at_ 0x40;指定list結構從40h開始。

xdata char text[25b] _at_0xE000;指定text數組從0E000H開始

提示:如果外部絕對變量是I/O端口等可自行變化數據,需要使用volatile關鍵字進行描述,請參考absacc.h。

3. 連接定位控制

此法是利用連接控制指令code xdata pdata data bdata對“段”地址進行,如要指定某具體變量地址,則很有局限性,不作詳細討論。

第二節(jié) Keil C51與匯編的接口

1. 模塊內接口

方法是用#pragma語句具體結構是:

#pragma asm

匯編行

#pragma endasm

這種方法實質是通過asm與ndasm告訴C51編譯器中間行不用編譯為匯編行,因而在編譯控制指令中有SRC以控制將這些不用編譯的行存入其中。

2. 模塊間接口

C模塊與匯編模塊的接口較簡單,分別用C51與A51對源文件進行編譯,然后用L51將obj文件連接即可,關鍵問題在于C函數與匯編函數之間的參數傳遞問題,C51中有兩種參數傳遞方法。

(1) 通過寄存器傳遞函數參數

最多只能有3個參數通過寄存器傳遞,規(guī)律如下表:

參數數目 Char Int long,float 一般指針

1 R7 R6 & R7 R4~R7 R1~R3

2 R5 R4 & R5 R4~R7 R1~R3

3 R3 R2 & R3 R1~R3

(2) 通過固定存儲區(qū)傳遞(fixed memory)

這種方法將bit型參數傳給一個存儲段中:

?function_name?BIT

將其它類型參數均傳給下面的段:?function_name?BYTE,且按照預選順序存放。

至于這個固定存儲區(qū)本身在何處,則由存儲模式默認。

(3) 函數的返回值

函數返回值一律放于寄存器中,有如下規(guī)律:

Return type Registev 說明

Bit 標志位 由具體標志位返回

char/unsigned char

1_byte指針 R7 單字節(jié)由R7返回

int/unsigned int

2_byte指針 R6 & R7 雙字節(jié)由R6和R7返回,MSB在R6

long&unsigned long R4~R7 MSB在R4, LSB在R7

Float R4~R7 32Bit IEEE格式

一般指針 R1~R3 存儲類型在R3 高位R2 低R1

(4) SRC控制

該控制指令將C文件編譯生成匯編文件(.SRC),該匯編文件可改名后,生成匯編.ASM文件,再用A51進行編譯。

第三節(jié) Keil C51軟件包中的通用文件

在C51LiB目錄下有幾個C源文件,這幾個C源文件有非常重要的作用,對它們稍事修改,就可以用在自己的專用系統(tǒng)中。

1. 動態(tài)內存分配

init_mem.C:此文件是初始化動態(tài)內存區(qū)的程序源代碼。它可以指定動態(tài)內存的位置及大小,只有使用了init_mem( )才可以調回其它函數,諸如malloc calloc,realloc等。

calloc.c:此文件是給數組分配內存的源代碼,它可以指定單位數據類型及該單元數目。

malloc.c:此文件是malloc的源代碼,分配一段固定大小的內存。

realloc.c:此文件是realloc.c源代碼,其功能是調整當前分配動態(tài)內存的大小。

2. C51啟動文件STARTUP.A51

啟動文件STARTUP.A51中包含目標板啟動代碼,可在每個project中加入這個文件,只要復位,則該文件立即執(zhí)行,其功能包括:

●定義內部RAM大小、外部RAM大小、可重入堆棧位置

●清除內部、外部或者以此頁為單元的外部存儲器

●按存儲模式初使化重入堆棧及堆棧指針

●初始化8051硬件堆棧指針

●向main( )函數交權

開發(fā)人員可修改以下數據從而對系統(tǒng)初始化

常數名 意義

IDATALEN 待清內部RAM長度

XDATA START 指定待清外部RAM起始地址

XDATALEN 待清外部RAM長度

IBPSTACK 是否小模式重入堆棧指針需初始化標志,1為需要。缺省為0

IBPSTACKTOP 指定小模式重入堆棧頂部地址

XBPSTACK 是否大模式重入堆棧指針需初始化標志,缺省為0

XBPSTACKTOP 指定大模式重入堆棧頂部地址

PBPSTACK 是否Compact重入堆棧指針,需初始化標志,缺省為0

PBPSTACKTOP 指定Compact模式重入堆棧頂部地址

PPAGEENABLE P2初始化允許開關

PPAGE 指定P2值

PDATASTART 待清外部RAM頁首址

PDATALEN 待清外部RAM頁長度

提示:如果要初始化P2作為緊湊模式高端地址,必須:PPAGEENAGLE=1,PPAGE為P2值,例如指定某頁1000H-10FFH,則PPAGE=10H,而且連接時必須如下:

L51 PDATA(1080H),其中1080H是1000H-10FFH中的任一個值。

以下是STARTUP.A51代碼片斷,紅色是經常可能需要修改的地方:

;------------------------------------------------------------------------------

; This file is part of the C51 Compiler package

; Copyright KEIL ELEKTRONIK GmbH 1990

;------------------------------------------------------------------------------

; STARTUP.A51: This code is executed after processor reset.

;

; To translate this file use A51 with the following invocation:

;

; A51 STARTUP.A51

;

; To link the modified STARTUP.OBJ file to your application use the following

; L51 invocation:

;

; L51, STARTUP.OBJ

;

;------------------------------------------------------------------------------

;

; User-defined Power-On Initialization of Memory

;

; With the following EQU statements the initialization of memory

; at processor reset can be defined:

;

; ; the absolute start-address of IDATA memory is always 0

IDATALEN EQU 80H ; the length of IDATA memory in bytes.

;

XDATASTART EQU 0H ; the absolute start-address of XDATA memory

XDATALEN EQU 0H ; the length of XDATA memory in bytes.

;

PDATASTART EQU 0H ; the absolute start-address of PDATA memory

PDATALEN EQU 0H ; the length of PDATA memory in bytes.

;

; Notes: The IDATA space overlaps physically the DATA and BIT areas of the

; 8051 CPU. At minimum the memory space occupied from the C51

; run-time routines must be set to zero.

;------------------------------------------------------------------------------

;

; Reentrant Stack Initilization

;

; The following EQU statements define the stack pointer for reentrant

; functions and initialized it:

;

; Stack Space for reentrant functions in the SMALL model.

IBPSTACK EQU 0 ; set to 1 if small reentrant is used.

IBPSTACKTOP EQU 0FFH+1 ; set top of stack to highest location+1.

;

; Stack Space for reentrant functions in the LARGE model.

XBPSTACK EQU 0 ; set to 1 if large reentrant is used.

XBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1.

;

; Stack Space for reentrant functions in the COMPACT model.

PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.

PBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1.

;

;------------------------------------------------------------------------------

;

; Page Definition for Using the Compact Model with 64 KByte xdata RAM

;

; The following EQU statements define the xdata page used for pdata

; variables. The EQU PPAGE must conform with the PPAGE control used

; in the linker invocation.

;

PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.

PPAGE EQU 0 ; define PPAGE number.

;

;------------------------------------------------------------------------------

3. 標準輸入輸出文件

putchar.c

putchar.c是一個低級字符輸出子程,開發(fā)人員可修改后應用到自己的硬件系統(tǒng)上,例如向C

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉