性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

一個(gè)維修工如何學(xué)單片機(jī)(講述自己學(xué)單片機(jī)經(jīng)歷)2

前幾個(gè)貼說(shuō)了,學(xué)單片機(jī)所具備的軟件和硬件.接下來(lái)說(shuō)說(shuō)如何用C語(yǔ)言進(jìn)行編寫(xiě)程序.在 編程序之前,有幾個(gè)東西要講清楚.1-學(xué)單片機(jī)就是要學(xué)習(xí)如何隨意控制單片機(jī)的I/O端口.AT89S52一共有32個(gè)I/O口,分成4個(gè)組,分別是P0,P1,P2,P3,每個(gè)組分成8位,分別是P0.0--P0.7,P1.0--P1.7,P2.0--P2.7,P3.0--P3.7.每個(gè)人對(duì)單片機(jī)的理解都不一樣,我當(dāng)初把單片機(jī)理解成下面這個(gè)圖

32個(gè)I/O口分布如圖,單片機(jī)每個(gè)I/O口占一個(gè)小方格,小方格具備存儲(chǔ)電荷功能,滿電荷的時(shí)候,小方格的邏輯電平為1,對(duì)應(yīng)的實(shí)際電壓是5V,沒(méi)有電荷的時(shí)候邏輯電平是0,對(duì)應(yīng)實(shí)際電壓是0(確切來(lái)說(shuō)是小于0.7V,其實(shí)0.7伏電壓做不了什么事情,就可以認(rèn)為是0V啦).那我們編寫(xiě)程序的時(shí)候,就是讓小方格要么是1(5V),要么是0(0V).
   下面這些操作是假設(shè)你的編程軟件安裝成功,并且你會(huì)建立第一個(gè)工程文件的前提下進(jìn)行.我就編一個(gè)小成程序讓下面圖的小燈亮起來(lái).


程序代碼:
#inlcude--程序的頭文件,作用是把程序代碼和單片機(jī)內(nèi)部的硬件 結(jié)構(gòu)聯(lián)系上,初學(xué)的朋友不要過(guò)多鉆這句話,反正每次寫(xiě)程序都要寫(xiě)這句話就對(duì)了.
#define uint unsigned int---定義一個(gè)無(wú)符號(hào)整型數(shù)據(jù)類(lèi)型變量
#define uchar unsigned char----定義一個(gè)無(wú)符號(hào)字符型數(shù)據(jù)變量

void main()--程序主函數(shù),一定要記住程序的函數(shù)結(jié)構(gòu)寫(xiě)法,都是固定的.程序             執(zhí)行都是從主函數(shù)開(kāi)始執(zhí)行.
{
P2=0Xfe;
while(1);

}
P2=0Xfe;把一個(gè)數(shù)0Xfe付給P2口,0X代表16進(jìn)制,這時(shí)P2口的狀態(tài)如圖





P2=0Xfe這句話的目的就是讓P2.0口的邏輯電平為0,實(shí)際電壓為0,這樣LED兩端就會(huì)有電壓差,從而使其點(diǎn)亮.可能有人不知道16進(jìn)制和2進(jìn)制是怎么回事.好簡(jiǎn)單的,0000-0,0001-1,0010-2,0011-3,0100-4,0101-5,0110-6,0111-7,1000-8,1001-9,1010-a,1011-b.1100-c,1101-d,1110-e,1111-f.16進(jìn)制就是從0數(shù)到f,一共16個(gè)數(shù),完了.細(xì)心的朋友可能會(huì)發(fā)現(xiàn),讓P2.0發(fā)光,就是讓P2口最后一位為0,那只要P2口最后一位為0,LED就會(huì)發(fā)光,看上面的2進(jìn)制數(shù)值,只要最后一位為0就達(dá)到目的,如P2=0X00,P2=0X02,P2=0Xdc....等等.
這種操做方法叫總線操作方法.讓P2.0的LED發(fā)光還可以用位操作的方法.
程序代碼如下:
#inlcude
#define uint unsigned int
#define uchar unsigned char
sbit D1=P2^0;
void main
{
D1=0;
while(1);

}

sbit D1=P2^0;這句話意思是把P2^0定義為一個(gè)變量D1,操作D1就可以操作P2.0.有的人會(huì)有疑問(wèn),這多麻煩了,直接P2.0=0,不就完了嗎?不可以,這樣寫(xiě)編譯器不認(rèn)識(shí)這種格式,所以大家一定要記得如何定義一個(gè)位變量,格式不能改了,一定是sbit D1=P2^0,當(dāng)然D1可以是其他字母,A1,B2,C1都沒(méi)有問(wèn)題.
總結(jié)一下,讓LED發(fā)光辦法2個(gè),總線操作,位操作.學(xué)習(xí)懂得總結(jié)進(jìn)步才快.(待續(xù))
全部回復(fù)(3)
正序查看
倒序查看
janyao
LV.1
2
2009-09-03 11:32
講得很詳細(xì)易懂,但while(1)是啥意思?還有前面定義的數(shù)據(jù)變量,我在其他教程看到不需要這個(gè)啊?

直接是:
#include
void main()
{
P1=0xfd;
}
0
回復(fù)
yaojiajia
LV.1
3
2009-09-03 14:25
@janyao
講得很詳細(xì)易懂,但while(1)是啥意思?還有前面定義的數(shù)據(jù)變量,我在其他教程看到不需要這個(gè)啊?直接是:#includevoidmain(){P1=0xfd;}
可能是寫(xiě)的太倉(cāng)促了,這個(gè)也是我寫(xiě)程序的習(xí)慣吧!因?yàn)槲乙院蟀l(fā)貼while(1)的使用率達(dá)到90%以上.
其實(shí)這個(gè)程序?qū)嶋H上是這樣的:
void main()
{
P2=0xff;---單片機(jī)上電的時(shí)候,關(guān)掉所有的LED.
while(1)---這是一個(gè)條件判斷語(yǔ)句,只要wihle()括弧里的表達(dá)式為真(邏輯直為1,那么單片機(jī)就會(huì)執(zhí)行while 語(yǔ)句里的語(yǔ)句(也就是大括弧里的語(yǔ)句),反之就不執(zhí)行.
{
P2=0Xfe;---這條語(yǔ)句將會(huì)一直被執(zhí)行,所以燈一直在亮.
}
}
0
回復(fù)
janyao
LV.1
4
2009-09-07 08:48
@yaojiajia
可能是寫(xiě)的太倉(cāng)促了,這個(gè)也是我寫(xiě)程序的習(xí)慣吧!因?yàn)槲乙院蟀l(fā)貼while(1)的使用率達(dá)到90%以上.其實(shí)這個(gè)程序?qū)嶋H上是這樣的:voidmain(){P2=0xff;---單片機(jī)上電的時(shí)候,關(guān)掉所有的LED.while(1)---這是一個(gè)條件判斷語(yǔ)句,只要wihle()括弧里的表達(dá)式為真(邏輯直為1,那么單片機(jī)就會(huì)執(zhí)行while語(yǔ)句里的語(yǔ)句(也就是大括弧里的語(yǔ)句),反之就不執(zhí)行.{P2=0Xfe;---這條語(yǔ)句將會(huì)一直被執(zhí)行,所以燈一直在亮.}}
多謝指教,我也自己查詢(xún)了相關(guān)資料,明白了它的意思,希望你的經(jīng)驗(yàn)繼續(xù)寫(xiě)下去!
0
回復(fù)
發(fā)