日产精品视频无码免费_亚洲蜜臀AV日韩熟妇在线_国产亚洲精品女人久久久久久 _妞中文字幕在线视频导航

電子開發(fā)網(wǎng)

電子開發(fā)網(wǎng)電子設(shè)計(jì) | 電子開發(fā)網(wǎng)Rss 2.0 會員中心 會員注冊
搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 電子開發(fā) >> 單片機(jī) >> 正文

51單片機(jī)入門參考C程序

作者:佚名    文章來源:本站原創(chuàng)    點(diǎn)擊數(shù):    更新時(shí)間:2010-12-3

認(rèn)識C語言
1 簡單的C程序介紹
例1-1: 讓接在P1.0引腳上的LED發(fā)光。
                        #include “reg51.h”
                        sbit P1_0=P1^0;
                        void main()
                        {  P1_1=0;
                        }
                         這個(gè)程序的作用是讓接在P1.0引腳上的LED點(diǎn)亮。下面來分析一下這個(gè)C語言程序包含了哪些信息。
                          1)“文件包含”處理。
                          程序的第一行是一個(gè)“文件包含”處理。
                          所謂“文件包含”是指一個(gè)文件將另外一個(gè)文件的內(nèi)容全部包含進(jìn)來,所以這里的程序雖然只有4行,但C編譯器在處理的時(shí)候卻要處理幾十或幾百行。這里程序中包含REG51.h文件的目的是為了要使用P1這個(gè)符號,即通知C編譯器,程序中所寫的P1是指80C51單片機(jī)的P1端口而不是其它變量。這是如何做到的呢?

                          打開reg51.h可以看到這樣的一些內(nèi)容:
                        /*--------------------------------------------------------------------REG51.H


                        Header file for generic 80C51 and 80C31 microcontroller.


                        Copyright (c) 1988-2001 Keil Elektronik GmbH and Keil
                        Software, Inc.

                        All rights reserved.

                        --------------------------------------------------------------------------*/

 


                        /* BYTE Register */

                        sfr P0 = 0x80;

                        sfr P1 = 0x90;

                        sfr P2 = 0xA0;

                        sfr P3 = 0xB0;

                        sfr PSW = 0xD0;

                        sfr ACC = 0xE0;

                        sfr B = 0xF0;

                        sfr SP = 0x81;

                        sfr DPL = 0x82;

                        sfr DPH = 0x83;

                        sfr PCON = 0x87;

                        sfr TCON = 0x88;

                        sfr TMOD = 0x89;

                        sfr TL0 = 0x8A;

                        sfr TL1 = 0x8B;

                        sfr TH0 = 0x8C;

                        sfr TH1 = 0x8D;

                        sfr IE = 0xA8;

                        sfr IP = 0xB8;

                        sfr SCON = 0x98;

                        sfr SBUF = 0x99;

 

                        /* BIT Register */

                        /* PSW */

                        sbit CY = 0xD7;

                        sbit AC = 0xD6;

                        sbit F0 = 0xD5;

                        sbit RS1 = 0xD4;

                        sbit RS0 = 0xD3;

                        sbit OV = 0xD2;

                        sbit P = 0xD0;

 

                        /* TCON */

                        sbit TF1 = 0x8F;

                        sbit TR1 = 0x8E;

                        sbit TF0 = 0x8D;

                        sbit TR0 = 0x8C;

                        sbit IE1 = 0x8B;

                        sbit IT1 = 0x8A;

                        sbit IE0 = 0x89;

                        sbit IT0 = 0x88;

 

                        /* IE */

                        sbit EA = 0xAF;

                        sbit ES = 0xAC;

                        sbit ET1 = 0xAB;

                        sbit EX1 = 0xAA;

                        sbit ET0 = 0xA9;

                        sbit EX0 = 0xA8;

 

                        /* IP */

                        sbit PS = 0xBC;

                        sbit PT1 = 0xBB;

                        sbit PX1 = 0xBA;

                        sbit PT0 = 0xB9;

                        sbit PX0 = 0xB8;

 

                        /* P3 */

                        sbit RD = 0xB7;

                        sbit WR = 0xB6;

                        sbit T1 = 0xB5;

                        sbit T0 = 0xB4;

                        sbit INT1 = 0xB3;

                        sbit INT0 = 0xB2;

                        sbit TXD = 0xB1;

                        sbit RXD = 0xB0;

 

                        /* SCON */

                        sbit SM0 = 0x9F;

                        sbit SM1 = 0x9E;

                        sbit SM2 = 0x9D;

                        sbit REN = 0x9C;

                        sbit TB8 = 0x9B;

                        sbit RB8 = 0x9A;

                        sbit TI = 0x99;

                        sbit RI = 0x98;

                          熟悉80C51內(nèi)部結(jié)構(gòu)的讀者不難看出,這里都是一些符號的定義,即規(guī)定符號名與地址的對應(yīng)關(guān)系。注意其中有

                        sfr P1 = 0x90;

                          這樣的一行(上文中用黑體表示),即定義P1與地址0x90對應(yīng),P1口的地址就是0x90(0x90是C語言中十六進(jìn)制數(shù)的寫法,相當(dāng)于匯編語言中寫90H)。


                          從這里還可以看到一個(gè)頻繁出現(xiàn)的詞:sfr

                          sfr并標(biāo)準(zhǔn)C語言的關(guān)鍵字,而是Keil為能直接訪問80C51中的SFR而提供了一個(gè)新的關(guān)鍵詞,其用法是:

                        sfrt 變量名=地址值。

                          2)符號P1_0來表示P1.0引腳。

                          在C語言里,如果直接寫P1.0,C編譯器并不能識別,而且P1.0也不是一個(gè)合法的C語言變量名,所以得給它另起一個(gè)名字,這里起的名為P1_0,可是P1_0是不是就是P1.0呢?你這么認(rèn)為,C編譯器可不這么認(rèn)為,所以必須給它們建立聯(lián)系,這里使用了Keil
                        C的關(guān)鍵字sbit來定義,sbit的用法有三種:

                          第一種方法:sbit 位變量名=地址值

                          第二種方法:sbit 位變量名=SFR名稱^變量位地址值

                          第三種方法:sbit 位變量名=SFR地址值^變量位地址值

                          如定義PSW中的OV可以用以下三種方法:

                        sbit OV=0xd2 (1)說明:0xd2是OV的位地址值

                        sbit OV=PSW^2 (2)說明:其中PSW必須先用sfr定義好

                        sbit OV=0xD0^2 (3)說明:0xD0就是PSW的地址值

                          因此這里用sfr
                        P1_0=P1^0;就是定義用符號P1_0來表示P1.0引腳,如果你愿意也可以起P10一類的名字,只要下面程序中也隨之更改就行了。


                        3)main稱為“主函數(shù)”。

                          每一個(gè)C語言程序有且只有一個(gè)主函數(shù),函數(shù)后面一定有一對大括號“{}”,在大括號里面書寫其它程序。

                          從上面的分析我們了解了部分C語言的特性,下面再看一個(gè)稍復(fù)雜一點(diǎn)的例子。

                          例1-2 讓接在P1.0引腳上的LED閃爍發(fā)光

                        /*************************************************


                        單燈閃爍程序

                        *************************************************/

                        #include "reg51.h"

                        #define uchar unsigned char

                        #define uint unsigned int

                        sbit P10=P1^0;

 

                        /*延時(shí)程序

                        由Delay參數(shù)確定延遲時(shí)間

                        */

                        void mDelay(unsigned int Delay)

                        { unsigned int i;

                        for(;Delay>0;Delay--)

                        { for(i=0;i<124;i++)

                        {;}

                        }

                        }

 

                        void main()

                        { for(;;)

                        { P10=!P10; //取反P1.0引腳

                        mDelay(1000);

                        }

                        }

                          程序分析:主程序main中的第一行暫且不看,第二行是“P1_0=!P1_0;”,在P1_0前有一個(gè)符號“!”,符號“!”是C語言的一個(gè)運(yùn)算符,就像數(shù)學(xué)中的“+”、“-”一樣,是一種運(yùn)算任號,意義是“取反”,即將該符號后面的那個(gè)變量的值取反。


                          注意:取反運(yùn)算只是對變量的值而言的,并不會自動改變變量本身。可以認(rèn)為C編譯器在處理“!P1_0”時(shí),將P1_0的值給了一個(gè)臨時(shí)變量,然后對這個(gè)臨時(shí)變量取反,而不是直接對P1_0取反,因此取反完畢后還要使用賦值符號(“=”)將取反后的值再賦給P1_0,這樣,如果原來P1.0是低電平(LED亮),那么取反后,P1.0就是高電平(LED滅),反之,如果P1.0是高電平,取反后,P1.0就是低電平,這條指令被反復(fù)地執(zhí)行,接在P1.0上燈就會不斷“亮”、“滅”。


                          該條指令會被反復(fù)執(zhí)行的關(guān)鍵就在于main中的第一行程序:for(;;),這里不對此作詳細(xì)的介紹,讀者暫時(shí)只要知道,這行程序連同其后的一對大括號“{}”構(gòu)成了一個(gè)無限循環(huán)語句,該大括號內(nèi)的語句會被反復(fù)執(zhí)行。


                          第三行程序是:“mDelay(1000);”,這行程序的用途是延時(shí)1s時(shí)間,由于單片機(jī)執(zhí)行指令的速度很快,如果不進(jìn)行延時(shí),燈亮之后馬上就滅,滅了之后馬上就亮,速度太快,人眼根本無法分辨。


                          這里mDelay(1000)并不是由Keil
                        C提供的庫函數(shù),即你不能在任何情況下寫這樣一行程序以實(shí)現(xiàn)延時(shí)。如果在編寫其它程序時(shí)寫上這么一行,會發(fā)現(xiàn)編譯通不過。那么這里為什么又是正確的呢?注意觀察,可以發(fā)現(xiàn)這個(gè)程序中有void
                        mDelay(…)這樣一行,可見,mDelay這個(gè)詞是我們自己起的名字,并且為此編寫了一些程序行,如果你的程序中沒有這么一段程序行,那就不能使用mDelay(1000)了。有人腦子快,可能馬上想到,我可不可以把這段程序也復(fù)制到我其它程序中,然后就可以用mDelay(1000)了呢?回答是,那當(dāng)然就可以了。還有一點(diǎn)需要說明,mDelay這個(gè)名稱是由編程者自己命名的,可自行更改,但一旦更改了名稱,main()函數(shù)中的名字也要作相應(yīng)的更改。


                          mDelay后面有一個(gè)小括號,小括號里有數(shù)據(jù)(1000),這個(gè)1000被稱之“參數(shù)”,用它可以在一定范圍內(nèi)調(diào)整延時(shí)時(shí)間的長短,這里用1000來要求延時(shí)時(shí)間為1000毫秒,要做到這一點(diǎn),必須由我們自己編寫的mDelay那段程序決定的,詳細(xì)情況在后面循環(huán)程序中再作分析,這里就不介紹了。

Tags:51單片機(jī),學(xué)習(xí),C程序  
責(zé)任編輯:admin
請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個(gè)字
[ 查看全部 ] 網(wǎng)友評論
關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁面
下到頁底
晶體管查詢
欧美一级视| 亚欧视频在线| 亚洲女人国产香蕉久久精品 | 青青久热| 日本在线www| 韩国三级香港三级日本三级la| 九九热精品免费观看| 麻豆系列 在线视频| 国产成人精品在线| 国产视频久久久久| 日本在线不卡免费视频一区| 台湾美女古装一级毛片| 四虎影视精品永久免费网站| 国产视频网站在线观看| 国产伦精品一区三区视频| 成人在免费观看视频国产| 国产精品自拍在线观看| 国产一区免费在线观看| 国产视频网站在线观看| 四虎影视久久久| 国产一区二区精品尤物| 日本特黄特色aa大片免费| 精品视频免费看| 黄视频网站在线免费观看| 国产a网| 国产原创中文字幕| 国产麻豆精品免费视频| 美国一区二区三区| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 精品国产三级a| 欧美另类videosbestsex视频| 欧美一区二区三区在线观看| 国产视频一区在线| 日韩字幕在线| 香蕉视频久久| 91麻豆国产| 成人影院久久久久久影院| 四虎影视久久久免费| 美国一区二区三区| 成人高清护士在线播放| 国产亚洲免费观看| 国产伦精品一区二区三区无广告| 国产一级生活片| 国产高清在线精品一区二区| 国产网站麻豆精品视频| 久久精品免视看国产成人2021| 国产美女在线一区二区三区| 国产一区二区精品久久91| 日韩中文字幕在线播放| 日韩中文字幕在线播放| 99久久精品费精品国产一区二区| 四虎久久精品国产| 91麻豆精品国产片在线观看| 亚洲第一视频在线播放| 欧美另类videosbestsex| 高清一级做a爱过程不卡视频| 九九九国产| 九九国产| 欧美一区二区三区在线观看| 999精品影视在线观看| 国产网站在线| 青草国产在线观看| 欧美国产日韩在线| 午夜久久网| 黄色免费网站在线| 青草国产在线观看| 日韩av东京社区男人的天堂| 可以在线看黄的网站| 91麻豆精品国产自产在线观看一区 | 国产精品自拍在线观看| 日韩一级黄色| 99色吧| 国产伦久视频免费观看 视频| 亚飞与亚基在线观看| 久久国产精品只做精品| 黄色免费三级| 日韩avdvd| 国产不卡高清在线观看视频| 一级毛片视频播放| 日韩av东京社区男人的天堂| 欧美一级视| 在线观看成人网 | 免费国产在线观看不卡| 精品视频在线观看免费| 台湾毛片| 亚洲精品久久玖玖玖玖| 国产国语在线播放视频| 精品国产一区二区三区国产馆| 人人干人人草| 久久99爰这里有精品国产| 日本特黄特色aaa大片免费| 精品视频免费看| 国产综合91天堂亚洲国产| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 99热精品在线| 国产极品白嫩美女在线观看看 | 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 九九精品久久| 国产一级生活片| 免费国产一级特黄aa大片在线| 黄视频网站免费看| 亚洲精品影院一区二区| 国产精品1024永久免费视频| 97视频免费在线观看| 免费毛片播放| 亚洲 欧美 成人日韩| 97视频免费在线观看| a级黄色毛片免费播放视频| 999精品影视在线观看| 国产成人精品一区二区视频| 亚洲女人国产香蕉久久精品 | 免费的黄色小视频| 国产麻豆精品| 欧美电影免费看大全| 黄视频网站在线看| 欧美一区二区三区性| 国产视频一区二区在线播放| 精品视频在线观看免费| 久久99中文字幕| 国产激情一区二区三区| 欧美电影免费看大全| 欧美激情一区二区三区视频| 九九久久99综合一区二区| 一级片片| 亚洲 国产精品 日韩| 欧美日本韩国| 九九久久99| 国产极品精频在线观看| 亚洲精品久久久中文字| 黄色免费网站在线| 国产伦理精品| 国产高清视频免费观看| 精品美女| 国产一区二区精品| 国产高清在线精品一区a| 久久成人性色生活片| 欧美激情一区二区三区中文字幕| 国产一区二区精品| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产国产人免费视频成69堂| 日本免费看视频| 国产高清视频免费| 韩国三级视频在线观看| 国产激情一区二区三区| 国产精品免费久久| 国产伦精品一区三区视频| 久久久久久久男人的天堂| 九九国产| 一级毛片视频播放| 亚洲天堂一区二区三区四区| 久久国产精品只做精品| 日韩免费片| 国产激情视频在线观看| 你懂的福利视频| 午夜激情视频在线观看| 国产成人精品综合| 天天色成人网| 欧美a级成人淫片免费看| 欧美爱爱动态| 欧美一级视频免费| 九九久久国产精品大片| 美女免费精品视频在线观看| 国产成人精品综合在线| 成人免费高清视频| 亚欧成人乱码一区二区| 日本在线不卡视频| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 四虎影视库国产精品一区| 亚久久伊人精品青青草原2020| 麻豆系列国产剧在线观看| 成人影视在线播放| 日韩在线观看视频免费| 国产网站免费视频| 国产网站麻豆精品视频| 国产一区二区精品久久91| 国产成人啪精品| 韩国毛片| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 日韩欧美一及在线播放| 国产韩国精品一区二区三区| 国产精品12| 精品国产亚一区二区三区| 国产精品免费久久| 色综合久久久久综合体桃花网| 91麻豆精品国产自产在线| 日韩欧美一二三区| 国产一区二区精品久久91| 成人免费观看的视频黄页| 91麻豆国产福利精品| 国产91丝袜高跟系列| 九九久久国产精品大片| 精品在线免费播放| 九九九在线视频| 欧美18性精品| 日本伦理黄色大片在线观看网站| 韩国毛片免费| 天堂网中文字幕| 精品久久久久久中文字幕2017| 91麻豆精品国产自产在线 | 欧美激情一区二区三区中文字幕|