內容簡介目錄主要介紹類高級程序設計語言BASIC的AVR單片機開發(fā)平臺:BASCOMAVR。BASCOMAVR如同BASIC一樣,具有程序設計簡單易學、用簡單的語句可實現較復雜的功能等特點。其開發(fā)平臺的使用簡潔方便,并具有實物圖形化的仿真平臺,可以直觀地仿真程序的運行結果,是AVR單片機初學者快速入門的最佳工具。本書通過大量的典型實例和屏幕截圖進行直觀的、由淺入深的論述,可作為單片機愛好者的自學讀本,也可作高中、高職、技校、大專院校中自動化、計算機、電子等專業(yè)的教學參考書,亦可作為電子應用技術的培訓教材。傳統(tǒng)單片機系統(tǒng)的開發(fā)主要是用匯編語言編寫應用程序。由于匯編語言程序的可讀性、可移植性和結構性比較差,因此采用匯編語言編寫單片機應用程序的時間比較長,調試和排錯也比較困難,產品開發(fā)周期較長。為了提高編寫應用程序的效率,改善程序的可讀性和可移植性,縮短產品的開發(fā)周期,采用高級語言的開發(fā)平臺來開發(fā)單片機系統(tǒng)已經成為發(fā)展趨勢。本書主要介紹類高級程序設計語言BASIC的AVR單片機開發(fā)平臺:BASCOMAVR。BASCOMAVR如同BASIC一樣,具有程序設計簡單易學、用簡單語句可實現較復雜功能等特點。其開發(fā)平臺使用簡潔方便,并具有實物圖形化的仿真平臺,可以直觀地仿真出運行結果。配合AVR單片機程序存儲器具有可多次編程和在線下載的優(yōu)點,使學習和使用AVR單片機變得十分容易和方便。使用BASCOMAVR開發(fā)AVR單片機系統(tǒng),設計人員可以在半個小時內完成一個功能模塊的設計編程和調試;而采用匯編語言,則需要幾天甚至幾個星期。本書不是講述如何設計和開發(fā)一個復雜的實際產品,而是指導和幫助初學者通過自己的親手實踐,來熟悉掌握BASCOMAVR的使用。因而本書中將較少涉及AVR的硬件設計,以軟件仿真為主,硬件為輔。有關硬件設計內容可參考其他AVR相關資料。計算機開發(fā)語言經過幾十年的發(fā)展,涌現出越來越多的開發(fā)語言,但目前BASIC 語言仍然是全球最流行的語言。經市場調查資料顯示,使用BASIC語言的程序員人數(包括專業(yè)和非專業(yè)的)要遠遠多于使用其他語言的程序員人數。BASCOM語言是由個人計算機平臺移植到單片機平臺上的BASIC語言。BASCOM語言繼承了BASIC語言的編程特點:簡單易學且便于使用,特別適合于具有BASIC語言基礎的人員。BASCOM語言的優(yōu)點如下:1 具有良好的可移植性可移植性的好壞對編程語言來講是非常重要的。BASCOM語言具有良好的可移植性。AVR系列單片機是具有很多型號的一個單片機產品系列,如果使用匯編語言開發(fā),由于匯編語言依賴硬件性很強,所以若要將這個系列中某種型號單片機的代碼移植到另一種型號單片機上,代碼可能要做很大修改,而使用BASCOM語言就不同了。在其他語言中要做的修改,在BASCOM中僅僅修改一下頭文件即可。下面分別為將用匯編語言和BASCOM語言編寫的ATmega8515芯片的代碼移植到ATmega8535芯片上所需做的修改。匯編語言:.include "m8515def.inc".org $000rjmp main.org $007rjmp tim0_ovfmain:ldi r16,low(ramend)out spl,r16ldi r16,high(ramend)out sph,r16ldi r16,$02out timsk,r16ldi r16,$05out tccr0,r16ldi r17,131out tcnt0,r17ldi r16,$ffout ddrc,r16seihere:rjmp heretim0_ovf: in r1,sregldi r17,131out tcnt0,r17in r18,portccom r18out portc,r18out sreg,r1reti.include "m8535def.inc".org $000rjmp main.org $009rjmp tim0_ovfmain:ldi r16,low(ramend)out spl,r16ldi r16,high(ramend)out sph,r16ldi r16,$01out timsk,r16ldi r16,$05out tccr0,r16ldi r17,131out tcnt0,r17ldi r16,$ffout ddrc,r16seihere:rjmp heretim0_ovf: in r1,sregldi r17,131out tcnt0,r17in r18,portccom r18out portc,r18out sreg,r1retiBASCOM語言:$regfile = "m8515.dat"$crystal = 8000000Config Timer0 = Timer , Prescale = 1024Enable InterruptsEnable Ovf0On Ovf0 Overflow_isrDdrc= &HFFTcnt0 = 131DoLoopEndOverflow_isr:Tcnt0 = 131Portc= Not PortcReturn$regfile = "m8535.dat"$crystal = 8000000Config Timer0 = Timer , Prescale = 1024Enable InterruptsEnable Ovf0On Ovf0 Overflow_isrDdrc = &HFFTcnt0 = 131DoLoopEndOverflow_isr:Tcnt0 = 131Portc= Not PortcReturn注: 上面程序中加粗的內容為需要修改的內容。2 具有良好的可讀性采用BASCOM語言編程,不像匯編語言那樣,實現某種功能就是對特定的寄存器賦指定的值,而是用很直觀的語句來表示。例如,使定時器/計數器0上升沿計數的程序如下:匯編語言:ldi r16,$07out tccr0,r16BASCOM語言:CONFIG TIMER0 = COUNTER,EDGE=RISING通過上面的比較可以很容易地看出,用匯編語言編程,需要了解每一個特殊寄存器的功能;在實現某種功能時,必須了解向某寄存器賦某值。很多情況下,這些寄存器的名稱與其實現的功能沒有意義上的聯系。例如,對于tccr0,在沒有任何資料的情況下,很難聯想到它是定時器/計數器0的控制寄存器;因此,通過寄存器賦的值來聯想它所實現的功能就更難了。就上例而言,若無資料,很難想象對tccr0賦$07這個命令字實現什么功能。這些都只是規(guī)定,這就要求編程人員對這些名稱和數值要熟記,手邊還要有單片機資料備查。而BASCOM就不同了,它替我們屏蔽掉了很多底層的東西。BASCOM的語句就是對實現功能的語言描述。就上例而言,若用BASCOM語句即為:CONFIG TIMER0 = COUNTER,EDGE=RISING一看這個語句,就可以把它要實現的功能猜得差不多了,因為它就是一個語言描述,很多語句就是英文單詞,可以望詞知意。BASIC語言在我國計算機知識普及過程中發(fā)揮的作用是有目共睹的。在過去的十幾年中,BASIC語言曾經引導許多人從一個"計算機盲"向計算機應用邁出了可貴的第一步。在我國至少有1 000多萬人學習過BASIC語言,其中不少人在入門之后繼續(xù)提高,成為計算機應用人才,取得了很大的成績。作者希望通過本書對BASCOMAVR的介紹,能夠為單片機技術在我國推廣盡自身的綿薄之力。全書共9章,由張茂青擔任主編。其中第2章和第9章的部分內容由耿德根執(zhí)筆,其余各章均由李彥超、張敏和張茂青共同執(zhí)筆。全書由張茂青統(tǒng)稿。在本書的編寫過程中,得到了雙龍電子公司的大力支持;本書開發(fā)實驗器SLAVRAD由雙龍公司提供,書中程序均在該開發(fā)實驗器上驗證通過。由于作者水平有限,只是為了滿足初學者的需要而拋磚引玉,利用工作之余寫成本書,可能會有一些缺點或錯誤,希望得到專家和讀者的指正,在適當的時間再作修訂補充,以便跟上單片機技術的發(fā)展需要。讀者在學習本書的過程中若有疑問,可以在由雙龍電子贊助的21IC BBS(AVR單片機論壇)或雙龍公司論壇(WWW. AVR. COM.CN的BASCOM專欄)提出,本書的編者及論壇中其他熱心網友會進行解答。作者2004年6月于蘇州大學 第1章 AVR單片機與BASIC語言1.1 BASIC語言的特點11.2 AVR單片機的特點21.3 用BASIC語言開發(fā)單片機的優(yōu)勢2第2章 BASCOMAVR集成開發(fā)環(huán)境2.1 基于高級語言BASCOMAVR的單片機開發(fā)平臺52.1.1 實驗硬件系統(tǒng)52.1.2 軟件開發(fā)平臺82.2 BASCOMAVR的安裝與使用92.2.1 BASCOMAVR的安裝92.2.2 啟動BASCOMAVR142.2.3 BASCOMAVR使用快速入門152.2.4 BASCOMAVR界面簡介192.2.5 鍵盤操作232.2.6 BASCOMAVR的參數設置242.2.7 軟件仿真41第3章 BASCOM程序設計基礎3.1 完整的BASCOM例子493.2 BASCOM基本語法介紹493.2.1 BASCOM程序的組成493.2.2 字符集513.3 數據類型523.4 常量和變量533.4.1 常量533.4.2 變量543.5 運算符和表達式573.5.1 算術運算符573.5.2 關系運算符583.5.3 邏輯運算符583.5.4 類型轉換 593.6 常用標準函數603.6.1 數值型函數603.6.2 字符串函數653.6.3 數組相關函數743.7 常用語句介紹753.7.1 延時語句763.7.2 加1減1語句783.7.3 交換兩個相同類型變量中的內容783.7.4 位運算793.8 浮點數823.8.1 浮點格式823.8.2 十進制和二進制833.8.3 整型數如何在計算機中表示833.8.4 使用浮點數的運算誤差833.8.5 浮點數概念843.8.6 IEEE細節(jié)843.8.7 浮點數其他常見誤差86第4章 賦值與輸入/輸出語句4.1 賦值語句874.2 輸入/輸出語句884.2.1 串口輸入語句894.2.2 串口輸出語句904.2.3 LCD輸出語句924.2.4 小鍵盤數據輸入934.2.5 讀數和置數語句944.3 結束語句96第5章 BASCOM語言流程控制5.1 選擇語句975.1.1 兩路分支選擇結構975.1.2 多行IF語句995.1.3 無條件轉移語句(GOTO語句)1025.1.4 多路分支選擇結構1025.1.5 多分支轉移語句(ON VALUE語句)1055.1.6 程序舉例1065.2 循環(huán)語句1095.2.1 WHILE循環(huán)語句1095.2.2 DO循環(huán)語句1105.2.3 FOR循環(huán)語句1115.2.4 循環(huán)嵌套1135.2.5 程序舉例114第6章 BASCOM語言結構化設計:過程的使用6.1 過程的聲明1176.1.1 SUB過程的聲明1176.1.2 用戶自定義FUNCTION過程的聲明1186.2 過程的定義1186.2.1 SUB過程的定義1186.2.2 FUNCTION過程的定義1196.3 過程的調用1206.3.1 調用SUB過程1206.3.2 調用FUNCTION過程1216.4 參數傳送1226.4.1 形參與實參1226.4.2 引用和傳值1226.5 變量的作用域1246.5.1局部變量1246.5.2 全局變量1266.6 過程的嵌套1276.6.1 SUB過程嵌套1286.6.2 FUNCTION過程嵌套1296.7 轉子與返回129第7章 AVR BASCOM語言應用實例7.1 一個程序代碼完整的編寫、調試和下載過程1347.2 I/O端口輸出的簡單例子1437.3 使用AVRStudio進行程序代碼調試1447.4 模仿CD或MP3播放器液晶屏顯示1537.5 LCD中顯示自定義字符1577.6 貪吃蛇程序1617.7 發(fā)音程序1647.8 控制微型伺服馬達167第8章 Atmel 單片機硬件結構8.1 AVR單片機體系結構概述1718.2 存儲器1728.2.1 Flash程序存儲器1728.2.2 數據存儲器1728.2.3 EEPROM存儲器1758.2.4 BASCOM中存儲器操作語句1768.2.5 存儲器部分在仿真環(huán)境中的使用1788.3 并行I/O端口1828.3.1 I/O端口相關寄存器1828.3.2 I/O端口在仿真環(huán)境中的使用方法1858.4 中斷1898.4.1 中斷的概念1898.4.2 中斷的作用1898.4.3 中斷優(yōu)先級1898.4.4 中斷源1898.4.5 中斷的執(zhí)行過程1918.4.6 中斷仿真1968.5 定時器/計數器1998.5.1 基本概念1998.5.2 定時器/計數器0(T/C0)1998.5.3 定時器/計數器12078.5.4 定時器/計數器22178.6 USART串口通信2188.6.1 串行通信的基本概念2188.6.2 AVR系列單片機串行接口2198.6.3 BASCOM中有關USART操作2198.7 模/數轉換2218.7.1 A/D轉換在仿真環(huán)境中使用2228.7.2 A/D 轉換應用實例2238.8 模擬比較器227第9章 AVR單片機存儲器的程序下載9.1 概述2289.2 ISP下載器接口2289.3 ISP串行下載操作2299.3.1 啟動SL ISP下載軟件的方法2299.3.2 SL ISP下載軟件介紹230附錄ABASCOM錯誤代碼附錄BASCII碼參 考 文 獻