1.頭文件
在 #include<reg52.h>頭文件中,把單片機(jī)中的寄存器地址封裝起來(lái)定義成宏供我們調(diào)用,寄存器這個(gè)概念我們初學(xué)先不用太深刻的去理解它,在《手把手教你學(xué)51單片機(jī)》文檔中2.4.1節(jié)有講解,大家熟讀幾遍,如果還是無(wú)法理解后面我們?cè)儆贸绦蚺浜嫌布?lái)領(lǐng)悟它們的作用。
2.單片機(jī)端口
首先我們知道STC89C52RC這個(gè)芯片有4*8=32個(gè)IO端口是可以被我們用程序控制輸出高電平或低電平的。拿P0表示它可以一次性控制8個(gè)引腳端口輸出每個(gè)引腳想輸出的電平狀態(tài),P0是一個(gè)寄存器,它的功能是控制所對(duì)應(yīng)的8個(gè)單片機(jī)IO端口(P0.0~P0.7)輸出我們想要輸出的電平,比如我們控制P0.0單個(gè)IO端口輸出低電平,P0.1~P0.7這7個(gè)IO端口輸出高電平,程序中使用這條語(yǔ)句“P0=0xFE;”,其他P1,P2,P3也是一樣的操作。
3.IO端口與二進(jìn)制
C語(yǔ)言中的十六進(jìn)制0xFE用二進(jìn)制表示 11111110,我們也就知道了單片機(jī)的P0.0排在了這八個(gè)位的最底端。我們控制P0.2單個(gè)IO端口輸出低電平,其他IO端口輸出高電平,則是“P0=0xFB; ”二進(jìn)制表示 11111011。對(duì)這些知識(shí)沒(méi)有過(guò)接觸的讀者用計(jì)算器可以快速查看,不過(guò)以后還是盡量口算比較好。
4.單個(gè)IO端口聲明
有時(shí)我們只關(guān)心單片機(jī)的一個(gè)引腳的電平控制,其他7個(gè)我們不用把人家強(qiáng)制輸出成其他電平,而“P0=0xFE;”就是強(qiáng)制把其他7個(gè)IO端口都輸出了固定高電平狀態(tài)。要想實(shí)現(xiàn)單獨(dú)控制一個(gè)IO端口,這時(shí)我們用這條語(yǔ)句來(lái)聲明“sbit LED=P0^0;”也就是只控制一個(gè)位,此時(shí)想讓單獨(dú)的P0.0輸出低電平只需“LED=0;”即可,LED不過(guò)是表示P0.0所用的名字而已,你可以根據(jù)喜好改寫(xiě)這個(gè)名字。
值得注意的是,程序書(shū)寫(xiě)中如果沒(méi)有“sbit LED=P0^0;”這個(gè)提前定義,直接“P0.0=0;”這樣書(shū)寫(xiě)是不符合語(yǔ)法的,必須先給IO端口一個(gè)命名,而且“sbit LED=P0.0;”這樣的寫(xiě)法同樣也不符合語(yǔ)法,規(guī)定是“P0^0”。
還有我們也不能命名已經(jīng)在 #include<reg52.h>頭文件中已有的名字,查看頭文件內(nèi)容可知,有些名字已經(jīng)被使用,
像“sbit PSW=P0^0;”,“sbit CY=P0^0;”這樣定義會(huì)編譯報(bào)錯(cuò)的,因?yàn)槊麤_突了。#include<reg52.h>頭文件中已有的名字我們后期會(huì)使用到的。
5.程序點(diǎn)亮LED
1.硬件連接
假設(shè)開(kāi)發(fā)板上的LED連接情況如下
那么我們用程序來(lái)點(diǎn)亮它就比較簡(jiǎn)單了,只需讓P0.0輸出低電平即可。
2.代碼
#include <reg52.h> sbit LED = P0^0; void main() { LED= 0; while (1);//程序執(zhí)行到此處語(yǔ)句,則不再往下執(zhí)行下面的語(yǔ)句,相當(dāng)于程序運(yùn)行停在了此處,其實(shí)是這條語(yǔ)句一直在死循環(huán)空作功,文檔2.4.3節(jié)有參考 }
3.提醒
上述代碼只是簡(jiǎn)單入門(mén)第一個(gè)程序,但是這段代碼在本教程所使用的開(kāi)發(fā)板中并不能點(diǎn)亮一盞燈,原因是開(kāi)發(fā)板實(shí)際硬件連接并不是如上圖所示。此講的原理圖只是作為第一個(gè)程序的入門(mén)講解參考。
C語(yǔ)言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫(xiě)的:零基礎(chǔ)C語(yǔ)言學(xué)練課程
解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程
從零到寫(xiě)出一個(gè)爬蟲(chóng)的Python編程課程
只會(huì)語(yǔ)法寫(xiě)不出代碼?手把手帶你寫(xiě)100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門(mén)課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程