• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > C51單片機學習手記之1:一盞閃爍

    C51單片機學習手記之1:一盞閃爍

    作者: 時間:2012-10-24 來源:網絡 收藏
    最近開始學習,可謂磕磕絆絆,因為本人比較笨笨啦...(聽聽Michael Jackson的《Heal The World》就堅持下來了),不知道對大家是否有用...
    閑言碎語不要講,下面我就來說說這邁出的第一步,我從2010年才接觸到單片機,想想比別人晚了10多年,不過沒關系,只要有心學習,從0-1很難,但從1到100、1000、...可能就沒有那么麻煩了。主要要自學單片機原理、電子線路、匯編語言,C語言,如果你剛好學過,那就恭喜啦。
    本文旨在介紹單片機入門的基礎知識,為和我一樣的新手提供一個交流的平臺。仿真所使用單片機為ATMEL公司的AT89C52,軟件為PROTEUS和KEIL;只提供原理圖和KEIL環境下的注釋,希望對廣大即將接觸單片機的人有所幫助,如果有錯誤歡迎回帖指出與本人交流或QQ聯系(93542746),共同進步。

    點擊瀏覽下一頁

    本人用Proteus畫得原理圖如下所示,該電路較簡單,在P1.7上接一個發光二極管,為防止電流過大燒壞二極管(LED的Imax=10mA),因此接了一個限流電阻。單片機31引腳(EA/Vpp)要接高電平,因為單片機訪問的是下載到單片機內部的程序。
    原理圖:
    點擊瀏覽下一頁
    匯編程序:
        org 000h
        ajmp main
        org 003h
    main:  mov P1,#07fh;7fh的二進制數為01111111,P1.7輸出低電平
        acall del;調用延時子程序
        mov p1,#0ffh;ffh的二進制數為11111111,P1.7輸出高電平
        acall del
        ajmp main
    del:   mov r5,#04h
    del1:  mov r6,#0ffh
    del2:  mov r7,#0ffh
    del3:  djnz r7,del3;r7中內容減1后判斷,為0,向下執行;不為0,執行本身
        djnz r6,del2
        djnz r5,del1;共做04h*ffh*ffh次減1,即4*256*256次
        ret
        end
    C程序:
    #include reg52.h> //通用89C52頭文件
    /*************************************************************
    * IO定義 *
    /*************************************************************/
    sbit LED = P1 ^ 7;//定義P1.7為LED控制口,低電平LED亮
    /*************************************************************
    * 毫秒級延時函數 *
    調用函數必須給延時函數一個0~65535的延時值對應0MS到65535MS
    備 注:應用于1T單片機時i600,應用于12T單片機時i125
    /*************************************************************/
    void Delay (unsigned int a){//需要輸入變量值0~65535
    unsigned int i;
    while( --a != 0){//i 從0加到125,CPU大概就耗時1毫秒
    for(i = 0; i 125; i++);//空指令循環
    }
    }
    /*************************************************************
    * 主函數 *
    /*************************************************************/
    void main (void){
    while(1){//無限循環以下程序
    LED = ~LED;//取LED相反狀態
    Delay(150);//延時150ms
    }//(0~65535之間)
    }


    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 深泽县| 安远县| 汾阳市| 赤壁市| 浏阳市| 上高县| 印江| 凤凰县| 乳山市| 谢通门县| 通榆县| 桂阳县| 东莞市| 南充市| 淅川县| 新田县| 方正县| 蒙山县| 盘锦市| 红桥区| 彩票| 定襄县| 荃湾区| 新巴尔虎左旗| 高清| 庆阳市| 周口市| 衢州市| 东海县| 洞头县| 安龙县| 都昌县| 宁蒗| 牟定县| 阳东县| 竹北市| 慈利县| 左云县| 东至县| 铜梁县| 贵溪市|