51系列單片機有哪些 at89c52c系列是早期產品。不帶在線編程和看們狗, 新的產品為了和早期產品區別改為at89s52裡面帶看門狗和isp功能,isp是在線編程的意思。是早期lattice的專利技術,現在用的很多了。需要10針的插口進行下載數據。 24指的是最高晶振頻率。 pc(pupi)是兩種等級,p代表的是dip封裝的。c代表的是商業級的芯片。i是工業級的,是以前的命名。現在新產品都該為u了,也是工業級的,是用環保材料制造的。 p飛思卡爾給世界的電子產品帶來了革命性的影響,它使我們的生活更加輕松、生產更發達、聯絡也更廣泛。coldfire系列微處理器就是基於上述觀念構建的,過去八年中coldfire在飛思卡爾32位微處理器系列中扮演了關鍵性的角色。/p p小巧、高集成度的coldfire微處理器是百分之百的模塊化結構,它可以很容易地適應新的加工處理技術,方便地與存儲器、系統模塊和通訊外設集成。/p p32位標准產品的發展方向/p tablecellspacing="0"cellpadding="0"width="500"border="0" tbody tr td align="center"imgheight="325"src="void.gif"width="380" 51系列單片機有很多,常見的是普通標准51,8051有40個引腳,4k程序存儲器,128b數據存儲器,兩個定時器,8052有40個引腳,8k程序存儲器,128b數據存儲器,3個定時器,2051有20個引腳,還多了一個模擬比較器,其余跟8051一樣, 不同型號的51系列單片機內核都一樣,也就是程序通用,不同的是內部資源,有些還帶有ad、da、usb、iic、spi等資源,內存容量也有很大差別 只要把匯編指令都寫出來了,你就可以到指令表中找到每一條指令所對應的機器碼,然後你只要在機器碼後面加上操作數即可,比如,把一個30h單元送入a累加器;指令是這樣的:mova,30h.那麼你可以在指令表中查到執行這條指的機器碼是11100101,但是由於這條指令後面的那個30h單元的數是根據你的要求在不斷的變的,機器沒規定你只能用30h單元,所以這個30的操作數必須由你填,它們和在一塊兒,這條指令的機器碼是:1110010100110000用十六進制來表示:e530,很明顯前兩位e5是機器指定的,而後兩位30是你自己加進去的。共是十六位,占用兩個字節……。 你說的led燈閃爍,不知是指的流水燈還是一只發光二極管在不停地閃爍?但不管是哪一種,有一點很重要。你在編寫此程序時必須要考慮延時,因為51單片機的晶體振蕩器最低頻率可能是6m(具體數值我已記不清了)。也就是說單片機的每一個機器周期所占用的時間僅2微秒,如果你不考慮延時的話,那麼你設計的那盞燈,它閃爍的結果是;亮2微秒,熄2微秒,也就是說每一秒鐘要亮暗50萬次,肉眼看這盞燈根本就不會有熄滅的時候,只是比不閃的燈暗了一半。我們生活中用的白熾燈,每秒鐘亮暗100次,你能感覺出燈泡有熄滅的時候嗎?更何況那是50萬次啊! 比如設計流水燈的程序,不妨可以這樣考慮它的算法。計數寄存器的高八位加上低八位,合起來也只有十六位,它能數的數最大也就是65535,就算單片機用的是最低的6m的晶體振蕩器,一個機器周期是12個機器節拍,所以,每一個機器周期占用2微秒時間,從0數到65535,僅用了131070微秒就數完了,約130毫秒,如果就按這個延時去改變燈的亮暗時間,那麼這盞燈每秒鐘要亮暗3、4次,肉眼雖然能夠看到燈有熄滅的時間了。但是眼睛看這樣的燈總不會那麼舒服,所以至少應讓它延時到1秒鐘亮暗一次。為了計算方便,就讓計數器數100毫秒的時間吧!等計數器數到100毫秒後,就讓它再數一次,然後再數一次……,等它數滿5次後,這就是500毫秒(半秒鐘),然後,我們再去改變燈的亮暗狀態。 這個程序可以這樣來編: mov a,#0feh;最低位設為0 mov p1,a;點亮最低位燈 mov tcon,#10h;t1為方式1,定時 begin:mov r7 ,#05h;設循環5次 star:mov th1 #3ch;計數器數100毫秒 mov tl1 #afh setb tr1;開始計數 rou:jbc tf1 se;100毫秒到否? sjmprou ;等待到100毫秒 se:clrtr1;關閉計數器 djnz r7 star ;5次循環到否?rl a;把0向左移一位 mov p1,a;改下一只燈亮 sjmpbegin 51的單片機
org 0000h main:movr2,#2 l1:movr3,#200 l2:movr4,#200 l3:nop nop djnzr4,l3 djnzr3,l2 djnzr2,l1 cplp1.7 jmpmain end
medwin編寫c51匯編
八只led燈做流水燈實驗 單片機在上電初始後,其各端口輸出為高電平。如果我們現在想讓接在p1.0口的led1亮,那麼我們只要把p1.0口的電平變為低電平就可以了。想讓led1滅,led0亮,只需將p1.0升高,p1.1變低,led1就熄滅led2隨後既點亮!依始類推如下所示8只led變會一亮一暗的做流水燈了. p1.0低、p1.0高、p1.1低、p1.1高、p1.2低、p1.2高、p1.3低、p1.3高、p1.4低、p1.4高、p1.5低、p1.5高、p1.6低、p1.6高、p1.7低、p1.7高、返回到開始、程序結束。 我們不能說p1.1你變低,它就變低了。因為單片機聽不懂我們的漢語的,只能接受二進制的“1、0......”代碼。我們又怎樣來用二進制語議論使單片機按我們的意思去工作呢?為了讓單片機工作,只能將程序寫為二進制代碼交給其執行;早期單片機開發人員就是使用人工編寫的二進制代碼交給單片機去工作的。今天,我們不必用煩人的二進制去編寫程序,完全可以將我們容易理解的“程序語言”通過“翻譯”軟件“翻譯”成單片機所需的二進制代碼,然後交給單片機去執行。這裡的“程序語言”目前主要有匯編和c兩種;在這裡我們所說的“翻譯”軟件,同行們都叫它為“編譯器”,將“程序語言”通過編譯器產生單片機的二進制代碼的過程叫編譯。前面說到,要想使led1變亮,只需將對應的單片機引腳電平變為低電平就可以了。現在讓我們將上面提到的8只led流水燈實驗寫為匯編語言程序。
“漢語”語言匯編語言 開始:star: p1.0低clrp1.0 p1.0高setbp1.0 p1.1低clrp1.1 p1.1高setbp1.1 p1.2低clrp1.2 p1.2高setbp1.2 p1.3低clrp1.3 p1.3高setbp1.3 p1.4低clrp1.4 p1.4高setbp1.4 p1.5低clrp1.5 p1.5高setbp1.5 p1.6低clrp1.6 p1.6高setbp1.6 p1.7低clrp1.7 p1.7高setbp1.7 返回到開始ljmpstar 結束end
這裡用到了四條匯編指令:clr、setb、ljmp、end;
clr:是將其後面指定的位清為0; setb:是將其後面指定的位置成1; ljmp:是無條件跳轉指令,意思是:跳轉到指定的標號處繼續運行。 end:是一條告訴編譯器:程序到此結束的偽指令。偽指令只告訴編譯器此程序到此有何要求或條件,它不參與和影響程序的執行。這裡需要說明的是,按匯編語法要求,所編制的程序(下稱源程序)之格式和書寫要求必須依下列原則: 1、源程序必須為純文本格式文件,如用windows“附件”中的“記事本”編寫的文本文件;2、源程序的擴展名應是*.asm;3、一行只能寫一條語句,以回車作為本句的結束,每一語句行長度應少於80個字符(即40個漢字)。4、每行的格式應為:標號:命令參數;注釋 即一行由四部份組成,各部份的順序不能搞錯,依實際要求可以缺省其中的一部份或幾部份,甚至全部省去,即空白行。需要使用標號時標號後面必須有“:”(冒號),而命令語句和參數之間必須用空格分開,如果命令有多個參數,則參數與參數之間必須用“,”(逗號)分開,需要注釋時注釋前必須用“;”(分號),“;”後面的語句可以寫任何字符,包括漢字用於解釋前面的匯編語句,它將不參與匯編,不生成代碼。由於匯編程序對我們還不直觀,所以在編寫源程序時,應當養成多寫注釋的習慣,這樣有助於今後源程序的閱讀和維護。 標號是標志程序中某一行的符號名,編譯後標號的數值就是標號所在行代碼的地址。在宏匯編asm51中標號的長度不受限制,但標號中不能包含‘:’或其它的一些特殊符號,也不能用漢字,可以用數字作標號,但必須用字母開頭。當標號作參數用(如標號作轉移地址),在命令後面出現時,必須捨去‘:’(如上面程序中的ljmpstar中的star是不能再有:)。 每行只能有一個標號,一個標號只能用在一處,如果有兩行用了同一個標號,則匯編時就會出錯。由於標號的長度沒有限制,可以用有意義的英文或漢語拼音來說明行,使源程序讀起來更方便。 源程序中的字母不區分大小寫,也就是說star和star是一樣的,請不要用大小寫方式去區分不同的標號 : 流水燈實驗詳解二 上一節的實驗最後沒有得到“流水”顯示的效果,主要是單片機執行每條指令的時間很短,我們肉眼無法看到led的熄滅與點亮。單片機內部能按部就班的自動工作,正是在系統時鐘的作用下,內部各邏輯硬件產生各種所需脈沖信號而實現的。這個時鐘信號(既晶體振蕩信號)的周期稱“振蕩周期”。我們這個實驗中晶體使用的是12mhz.在單片機中,要處理最短周期的一條指令需要由12個振蕩周期(既晶振振蕩周期)組成的,這個叫“機器周期”。8051核的單片機,大多數指令只用一個機器周期(既單周期),也有雙周期和四周期的指令。本實驗中用到的setbp.x和clrp.x均屬於單周期指令,也就是說,執行一句setbp.x用時僅1us(微秒),clrp.x也是1us;難怪我們前面的程序不能看到流水效果。現在,將程序改動一下,在每點亮一個led後,讓程序干點別的事,也就是讓它等一會再將該led熄滅,繼續執行下面的程序:
[1] [2] 下一页
|
|