久久精品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久久_亚洲一区二区综合_狠狠色伊人亚洲综合成人_亚洲综合爱爱久久网
亚洲天堂一区二区在线观看| 久久久久久久久久久99| 鲁一鲁一鲁一鲁一av| 国产精品久久久久9999小说| 日韩精品无码一区二区三区免费 | 91国在线高清视频| 永久免费网站视频在线观看| 可以免费看的黄色网址| 日韩一级免费看| 欧美女人性生活视频| 东京热加勒比无码少妇| 人人干人人视频| 在线观看中文av| 久久亚洲精品无码va白人极品| 日本美女爱爱视频| 僵尸世界大战2 在线播放| 欧美视频免费看欧美视频| 97在线播放视频| www.久久av.com| 青青在线视频免费观看| 116极品美女午夜一级| 亚洲精品自拍网| 久久人妻无码一区二区| 成年人观看网站| 伊人五月天婷婷| www.爱色av.com| 樱花草www在线| av免费播放网址| 天堂v在线视频| 日本wwww视频| 欧美美女黄色网| 国产精品少妇在线视频| 色爽爽爽爽爽爽爽爽| 爱福利视频一区二区| 99999精品| 九一精品在线观看| 国产自产在线视频| 色婷婷综合在线观看| 国产乱子伦农村叉叉叉| 亚洲欧美日韩三级| 日韩 欧美 高清| 国产美女主播在线| 中文字幕第66页| 亚洲娇小娇小娇小| 99久久激情视频| 国产综合中文字幕| 激情六月天婷婷| 中文字幕第一页亚洲| 青青草av网站| 成人在线看视频| 男人添女人下面高潮视频| av磁力番号网| 欧美又黄又嫩大片a级| 国产高潮免费视频| 国产自偷自偷免费一区| 农村妇女精品一二区| 国产美女主播在线播放| 国产专区在线视频| 国产精品一区在线免费观看| 日韩高清在线一区二区| 一区二区在线免费看| 天天操,天天操| 污视频网站观看| 天天看片天天操| 日韩av影视大全| 久久出品必属精品| 九九久久九九久久| 青草视频在线观看视频| 免费拍拍拍网站| 国产福利视频在线播放| 国产日韩一区二区在线观看| 成年人小视频网站| 艹b视频在线观看| 黄色高清视频网站| 4444亚洲人成无码网在线观看| 国产片侵犯亲女视频播放| 国产二级片在线观看| 国产日韩一区二区在线观看| 日本在线观看免费视频| 一区二区三区四区毛片| 中文字幕第一页亚洲| 免费在线观看视频a| 国产成人手机视频| av磁力番号网| 国产精品99久久免费黑人人妻| 天堂社区在线视频| 糖心vlog在线免费观看| 日韩av综合在线观看| 免费看涩涩视频| 亚洲 欧美 综合 另类 中字| 东京热加勒比无码少妇| 手机在线观看日韩av| 人人妻人人澡人人爽欧美一区双| 欧美精品一区免费| 亚洲黄色网址在线观看| 免费日韩视频在线观看| a级网站在线观看| 精品久久久久久无码国产| 日本一本草久p| 激情婷婷综合网| 日韩免费在线观看av| 国产免费999| 日本在线xxx| 自拍偷拍视频在线| 日本激情视频在线播放| 国产高清精品在线观看| 老汉色影院首页| 手机在线国产视频| 熟女人妇 成熟妇女系列视频| 成年人黄色在线观看| 日本中文字幕片| 国产在线播放观看| 超碰在线免费观看97| 亚洲视频一二三四| 三年中国国语在线播放免费| 青春草国产视频| 欧美交换配乱吟粗大25p| www激情五月| 亚洲综合20p| 亚洲欧美天堂在线| 国产美女视频免费看| 老头吃奶性行交视频| 亚洲午夜精品久久久久久人妖| 亚洲 欧洲 日韩| 天天成人综合网| 一本二本三本亚洲码| 激情成人在线观看| 操人视频免费看| 欧美少妇一级片| 少妇高潮大叫好爽喷水| avove在线观看| 人人妻人人澡人人爽欧美一区双| 日本免费在线视频观看| 日日噜噜夜夜狠狠久久丁香五月| 99999精品| 嫩草影院中文字幕| 97在线国产视频| 国产最新免费视频| 午夜精品在线免费观看| 国产精品久久久毛片| 国产aⅴ爽av久久久久| 久久久精品视频国产| 999久久欧美人妻一区二区| 4444在线观看| 免费国产黄色网址| 精品久久久噜噜噜噜久久图片| 日韩福利视频在线| www.com久久久| www.夜夜爱| 茄子视频成人免费观看| 国产精品久久久久久9999| 激情视频小说图片| 成年人免费在线播放| 色www免费视频| 青草视频在线观看视频| 亚洲色精品三区二区一区| 中文字幕22页| h无码动漫在线观看| 免费看污污网站| 9色视频在线观看| 美女福利视频在线| 国产对白在线播放| 日韩 欧美 高清| 9色视频在线观看| 亚洲天堂网一区| 欧美国产激情视频| 久久久久久久久久久久久国产| 日韩久久一级片| 路边理发店露脸熟妇泻火| 成人一区二区三| 免费一级特黄毛片| 亚洲欧美日韩不卡| 91国产精品视频在线观看| 日本精品久久久久久久久久| 久久国产精品国产精品| ww国产内射精品后入国产| 手机看片日韩国产| 亚洲精品久久久中文字幕| 1024av视频| 成人黄色片免费| 日本丰满少妇黄大片在线观看| 男女爽爽爽视频| 欧美精品成人网| 国产精品97在线| 老子影院午夜伦不卡大全| 麻豆映画在线观看| 久久最新免费视频| 激情图片qvod| 成人在线观看毛片| 青青草原播放器| 亚洲男人天堂2021| 中文字幕1234区| √天堂资源在线| 欧美少妇一级片| 视色,视色影院,视色影库,视色网| 日本高清久久久| 九九热视频免费| 日本久久高清视频| 99热这里只有精品免费| 欧美极品少妇无套实战|