久久精品99久久_亚洲一区二区综合_狠狠色伊人亚洲综合成人_亚洲综合爱爱久久网

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當前位置:首頁 >> 技術中心 >> 單片機入門 >> 高手總結!C51編程經驗三則

高手總結!C51編程經驗三則

關鍵字:單片機 C51 C語言 作者:admin 來源:不詳 發布時間:2018-05-19  瀏覽:64

 C51編程經驗三則

在單片機的開發應用中,已逐漸開始引入高級語言,C語言就是其中的一種。用慣了匯編的人,總覺得高級語言“可控性”不好,不如匯編那樣隨心所欲。以下是筆者在C51編程中的幾點經驗,希望對初學C51者有所幫助。

一、C51熱啟動代碼的編制

工業控制計算機,往往設有看門狗電路,看門狗動作,計算機復位,這就是熱啟動。熱啟動時,一般不允許程序從頭開始,因為這將使測量或計算值復位,導致系 統工作異常。故程序必須判斷是熱啟動還是冷啟動。常用的方法是:設定某內存單位為標志位(如0x7f位和0x7e位),啟動時首先讀該內存單元的內容,如 果它等于一個特定的值(例如兩個內存單元的都是0xaa),就認為是熱啟動,否則就是冷啟動,程序執行初始化部分,并將0xaa賦予這兩個內存單元。

根據以上的設計思路,編程時,設置一個指針,指向特定的內存單元如0x7f,然后在程序中根據特定內存單元的值判斷冷/熱啟動,程序如下:

void main()

{  char data*HotPoint=(char*)0x7f;

if((*HotPoint==0xaa)&&(*(--Hot

Point)==0xaa))

{     /*熱啟動的處理   */

}

else

{  HotPoint=0x7e; /*冷啟動的處理

*HotPoint-0xaa;

*(++HotPoint)=0xaa;

}

/*正常工作代碼*/

}

實際調試中發現,無論是熱啟動還是冷啟動,開機后所有內存單元的值都被復位為0,實現不了熱啟動的要求。這是為什么呢?原來,用C語言編程時,開機時執 行的代碼并非是從main()函數的第一語句開始的,在main()函數的第一語句執行前要先執行一段‘起始代碼’。正是這段代碼執行了內存清零的工作。 C編譯程序提供了這段起始代碼的源程序,名為CSTARTUP A51,打開這個文件,可以看到如下代碼:

IDATALEN EQU 8011 the length of IDATA memory m bytes

STARTUP1:

IF IDATALEN<>0

MOV R0,#IDATALEN-I

CLR A

IDATALOOP:  MOV @R0,A

DJNZ R0,IDATALOOP

ENDIF

可見,在執行到判斷是否熱啟動的代碼之前,起始代碼已將所有內存單元清零。如何解決這個問題呢?好在起始代碼是可以更改的,方法是:修改 startup.a51源文件,然后用編譯程序所附帶的a51.exe程序對startup.a51編譯,得到startup.obj文件,用這段代碼代 替原來的起始代碼。具體步驟是(設C源程序名為HOTSTART C):

1 修改startup.a51源文件(這個文件在C51/LIB目錄下)。

2 執行如下命令:

A51 startup.a51得到startup.obj文件。將此文件拷入HOTSTART C所在目錄。

3 將編好的C源程序用C51 EXE編譯好,得到目標文件HOTSTART OBJ。

4 用L51 HOTSTART,STARTUP OBJ命令連接,得到絕對目標文件HOTSTART。

5 用OHS51 HOTSTART得到HOTSTART HEX文件,即可完成啟動代碼的修改。

對于startup.a51的修改,根據自己的需要進行,如將IDATALEN EQU 80H中的80H改為70H,就可以使6F到7F的16字節內存不被清零。

二、直接調用EPROM中已固化的程序

筆者用的仿真機,由6位數碼管顯示,在DE00H處存放顯示子程序,只要將顯示的數存入顯示緩沖區,然后調用顯示子程序就可以了,匯編指令為:

LCALL 0DE00H

在用C語言編程時,如何實現這一功能呢?C語言中有指向函數的指針這一概念,可以用來實現用函數指針調用函數。指向函數的指針變量的定義格式為:

類型標識符(*指針變量名)();

在定義好指針后就可以給指針變量賦值,使其指向某個函數的開始地址,然后用(*指針變量名)()即可調用這個函數。程序如下例:

void main(void)

{

void (*DispBuffer)();/*定義指向函數指針*/

DispBuffer=0xde00; /*賦值*/

for(;;)

{ Key();

DispBuffer();

}

}

三、將浮點數轉化為字符數組

筆者在編制應用程序時有這樣的要求:將運算的結果(浮點數)存入E2PROM中。我們知道,浮點數在C語言中是以IEEE格式存儲的,一個浮點數占四個 字節。例如浮點數34 526存為160、26、10、664個數。要將該浮點數存入E2PROM,實際上就是要存這四個數。如何在程序中得到一個浮點數 的組成數呢?

浮點數在存儲時,是存儲在連續的字節中的,只要設法找到存儲位置,就可以得到這些數了。可以定義一個void指針,將此指針指向需要存儲的浮點數,然后再將此指針強制轉化為char型。這樣,利用指針就可以得到組成該浮點數的各個字節的值了。具體程序如下:

#define uchar unsigned char

#define uint unsigned int

void FtoC(void)

{  float a;

uchar I,*px

uchar x[4];/*定義字符數組,準備存儲浮點數的四個字節*/

void *pf;

px=x; /*px指針指向數組x*/

pf=&a;/*void型指針指向浮點數首地址*/

a=34.526;

for(I=0;I<4;I++)

{ *(px+I)=*((char *)pf+I);/*強制void型指針轉成char型,因為void型指針不能運算*/

}

}

如果已將數存入E2PROM,要將其取出合并,方法也是一樣,可參考下面的程序。

#define uchar unsigned char

#define uint unsigned int

void CtoF(void)

{  float a;

uchar I,*px

uchar x[4]-{56,180,150,73};

void *pf;

px=x;

pf=&a;

for(I=o;I<4;I++)

{ *((char *)pf+I)=*(px+I)

}

}

以上程序所用C語言為FRANKLIN C51 VER 3 2。

編輯:admin  最后修改時間:2018-05-19

聯系方式

0755-82591179

郵箱:ivy@yingtexin.net

地址:深圳市南山區桃源街道平山社區平山一路2號南山云谷創業園二期11棟410-411

Copyright © 2014-2026 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號-4

久久精品99久久_亚洲一区二区综合_狠狠色伊人亚洲综合成人_亚洲综合爱爱久久网
91国在线高清视频| 97超碰青青草| 国产精品igao网网址不卡| 久久黄色免费看| 国产性生交xxxxx免费| 日本xxxxxxx免费视频| 污污视频网站免费观看| 青青青国产在线视频| 国产喷水theporn| 一级黄色在线播放| 黄色影视在线观看| 波多野结衣乳巨码无在线| 日本wwww视频| 成人综合久久网| 国产精品videossex国产高清| 18黄暴禁片在线观看| 国产免费成人在线| 亚洲一区二区福利视频| 久久99久久99精品| 色婷婷综合网站| 日本a在线天堂| 妓院一钑片免看黄大片| 欧美少妇一级片| www.爱色av.com| 99精品999| 欧美女人性生活视频| 天天影视色综合| 超碰成人免费在线| 17c国产在线| 久久久免费视频网站| 性久久久久久久久久久久久久| 无码人妻少妇伦在线电影| 欧美伦理片在线观看| 国产精彩视频一区二区| 中文字幕 91| 无罩大乳的熟妇正在播放| 黄色片免费网址| 激情婷婷综合网| 国产二区视频在线| 男人天堂成人网| www亚洲成人| 欧美亚洲国产成人| 亚洲乱码日产精品bd在线观看| 免费黄色特级片| 精品无码国产一区二区三区av| 中文字幕亚洲影院| 少妇一级淫免费播放| 国产一区亚洲二区三区| 亚洲精品蜜桃久久久久久| 精品国产鲁一鲁一区二区三区| 国产一区亚洲二区三区| 国产原创中文在线观看| 米仓穗香在线观看| 裸体裸乳免费看| www.午夜色| 91亚洲一区二区| 少妇一级淫免费放| 国产又黄又猛又粗| 中文字幕av专区| 国产日韩欧美久久| 一区二区三区四区毛片| 欧美精品久久久久久久久25p| 少妇高清精品毛片在线视频| 久久免费视频3| 亚洲人成色77777| 久久精品影视大全| 日韩成人av免费| 2025韩国大尺度电影| 只有这里有精品| 野外做受又硬又粗又大视频√| 日本熟妇人妻xxxx| 日日橹狠狠爱欧美超碰| 激情五月亚洲色图| 亚洲一级片网站| 在线免费黄色小视频| 欧美 亚洲 视频| 国产亚洲综合视频| 99视频在线免费| 善良的小姨在线| 男的插女的下面视频| 成人免费在线小视频| 午夜在线观看av| 黄色高清视频网站| 国产免费黄色一级片| 99视频在线免费| 日本中文字幕在线不卡| 久久精品无码中文字幕| 亚洲男人天堂色| 麻豆一区二区三区在线观看| 日韩在线视频在线观看| 不卡中文字幕在线观看| 国产精品自拍合集| 在线看的黄色网址| 国产美女永久无遮挡| 欧美aⅴ在线观看| 中文字幕在线中文| 亚洲这里只有精品| 日韩欧美国产综合在线| 91亚洲一区二区| 日本三级免费网站| 中文字幕在线乱| 青青草精品视频在线观看| 日本黄xxxxxxxxx100| 一区二区三区入口| 性高湖久久久久久久久aaaaa| 国产原创精品在线| 亚洲乱码中文字幕久久孕妇黑人| 亚洲黄色av片| 99视频精品免费| 玩弄中年熟妇正在播放| 色黄视频免费看| 久久99爱视频| 蜜臀av午夜一区二区三区| 97中文字幕在线| 国产xxxxhd| 在线观看免费视频污| 免费黄色一级网站| 国产精品自拍片| 国产freexxxx性播放麻豆| 日韩视频在线观看一区二区三区| 人妻无码视频一区二区三区| 浮妇高潮喷白浆视频| 强开小嫩苞一区二区三区网站 | 丁香婷婷激情网| 欧美大片在线播放| 秋霞无码一区二区| 黄色免费福利视频| 好吊妞无缓冲视频观看| 日本十八禁视频无遮挡| 精品人妻人人做人人爽| 国产情侣第一页| 中国丰满熟妇xxxx性| 欧美乱大交xxxxx潮喷l头像| 国产一二三在线视频| 久久久久久久久久网| 日韩av在线综合| 日本免费观看网站| 天堂网在线免费观看| 午夜xxxxx| 青草全福视在线| 精品无码一区二区三区在线| 丝袜老师办公室里做好紧好爽| 国产高清av在线播放| 超碰影院在线观看| 国产精品久久久久久久99| 一二三在线视频| 亚洲国产精品久久久久婷蜜芽| 久久免费视频3| 国产理论在线播放| 欧美激情国内自拍| 国产一区二区三区小说| 成年人在线看片| 亚洲国产精品女人| 玩弄中年熟妇正在播放| jizz18女人| 国产一区二区三区小说| 国产又大又黄又粗又爽| 黄色网在线视频| 日本新janpanese乱熟| 四虎影院一区二区| 丰满少妇被猛烈进入高清播放| 天天干天天综合| 亚洲中文字幕无码av永久| 激情视频免费网站| 成品人视频ww入口| 亚洲免费在线播放视频| 男人天堂1024| 青青在线免费视频| 欧美日韩一区二区三区69堂| a级黄色片免费| 天天看片天天操| 日日摸天天爽天天爽视频| 97超碰国产精品| www.成人黄色| 成人羞羞国产免费网站| 97超碰在线视| 亚洲欧美日本一区二区| 亚洲性生活网站| 国产免费一区二区三区视频| 国产日韩第一页| 青娱乐国产精品视频| 中文字幕av不卡在线| 欧美日韩在线中文| 蜜桃传媒一区二区三区| 青草全福视在线| 国产精品久久久影院| 亚洲第一精品区| 波多野结衣三级在线| 五月婷婷丁香色| 亚洲福利精品视频| 国产精品免费成人| 国产精品无码av无码| 精品久久久久av| 一本久道综合色婷婷五月| 日本一区二区黄色| 91淫黄看大片| 色综合天天色综合| 亚洲精品20p| 欧美 日韩 国产 在线观看| 中文字幕一区二区三区四|