所有帶“$”符號(hào)的關(guān)鍵字均為編譯器指示語(yǔ)句, 所有的編譯器指示語(yǔ)句必須書(shū)寫在程序的開(kāi)始的位置,它本身不編譯出具體的代碼,但是會(huì)把相應(yīng)功能的子程序連接到程序中去,效果有點(diǎn)象C里頭的一些頭文件包含某某函數(shù),在這一節(jié)我們來(lái)了解常用的編譯器指示語(yǔ)句 。 1.$Device 處理器配置語(yǔ)句,聲明所使用芯片的型號(hào)等參數(shù),編譯器會(huì)編譯出適應(yīng)它的代碼,括號(hào)里面為可選項(xiàng)。
語(yǔ)法: $Device=type [, Xram, FirstAdr, XramLength]
注釋: 如果芯片支持外部的RAM同時(shí)你要使用它那么你必須先聲明,比如你使用了M8515,擴(kuò)展了ram或者8255等。
例子: $Device= 4433 $Device= tiny13 $Device= M128, Xram, 0, 32k 'M128芯片,有外部RAM,地址從0開(kāi)始容量32K Byte 以下聲明作用相同: $Device= ATmega16 $Device= mega16 $Device= m16 2.$Stack 處理器配置語(yǔ)句,定義堆棧的大小,如果堆棧設(shè)置得太小就會(huì)溢出,從而得出錯(cuò)誤的運(yùn)算結(jié)果。 語(yǔ)法: $Stack=num 注釋: num 是為堆棧保留的字節(jié)數(shù) 例子: $Stack = 32 '默認(rèn)保留32個(gè)字節(jié)供堆棧使用 $Stack = 50 '保留50個(gè)字節(jié)供堆棧使用 那么什么時(shí)候堆棧的空間會(huì)被使用呢?主要是: · 調(diào)用過(guò)程和函數(shù)(返回地址) · 自定義函數(shù)參數(shù)的傳遞(參數(shù)傳遞基于堆棧的形式) · 局部變量 (就是聲明過(guò)程,函數(shù),中斷里面定義的變量) · 加上進(jìn)入中斷程序的時(shí)候要保存的寄存器的空間 3.$Clock 處理器配置語(yǔ)句,聲明芯片的時(shí)鐘頻率,如果聲明的時(shí)鐘頻率和芯片實(shí)際工作頻率不一樣將會(huì)影響串口波特率和其它延時(shí)指令。 語(yǔ)法: $Clock=const 注釋: const 單位MHz 例子: $Clock = 3.6864 '時(shí)鐘頻率為3.6864MHz $Clock = 8.000 '時(shí)鐘頻率為8.000MHz 4.$Source 編譯器指示語(yǔ)句,將BASIC源程序里面的注釋轉(zhuǎn)移到輸出的匯編文件相應(yīng)的地方,方便大家理解與調(diào)試。 語(yǔ)法: $Source=ON '注釋轉(zhuǎn)移 $Source=OFF '注釋不轉(zhuǎn)移 系統(tǒng)默認(rèn)值是ON 5.$Asm, $EndAsm 編譯器指示語(yǔ)句,在程序中插入?yún)R編 語(yǔ)法: $Asm ... $EndAsm 注釋: 這個(gè)指令允許在線匯編,$Asm 與 $EndAsm 必須成對(duì)使用,全局變量可以在匯編中直接使用。 例子: $Asm '開(kāi)始插入?yún)R編 ldi zl,0x65 st c,zl $EndAsm '結(jié)束插入 6.$Angles 編譯器指示語(yǔ)句,如果你在程序中使用了三角函數(shù),那么就要聲明三角函數(shù)的單位是度數(shù)Degrees還是弧度Radians 語(yǔ)法: $Angles = Degrees|Radians 注釋: 系統(tǒng)默認(rèn)是弧度Radians,也就是說(shuō)你本身用弧度那么就無(wú)須聲明。 例子: $Angles=Degrees '聲明角度單位為度 Dim f1 As Float '定義一個(gè)浮點(diǎn)型的變量f1 f1=Sin(30) 'f1=0.5000000 7.$Baud 處理器配置,定義UART串口的波特率和工作模式 語(yǔ)法: $Baud = const [, Parity, DataBits, StopBits] $Baud2 = const [, Parity, DataBits, StopBits] ' 適合第二個(gè)UART 假如UART 工作在默認(rèn)的模式 (無(wú)奇偶校驗(yàn), 8數(shù)據(jù)位, 1停止位)則可以簡(jiǎn)寫成: $Baud = 9600 如果指定奇偶校驗(yàn),將增加額外的程序進(jìn)行處理! 注釋: const 是串口波特率的一些標(biāo)準(zhǔn)值: 1200, 2400, 4800, 9600, 19200, 38400, 56600,76800,115200 Mega系列芯片可以工作于高波特率 Parity N=無(wú)校驗(yàn), O=奇校驗(yàn), E=偶校驗(yàn), M=標(biāo)志 or S=空 DataBits 5, 6, 7, 8 or 9 StopBits 1 or 2 (在9 DataBits的時(shí)候,必須是 1 StopBit) 請(qǐng)看 AVR 數(shù)據(jù)手冊(cè) UART 設(shè)置部分 例子: $Baud = 9600 '波特率9600bps,無(wú)奇偶校驗(yàn), 8數(shù)據(jù)位, 1停止位 $Baud2 = 9600 '第二串口波特率9600bps,無(wú)奇偶校驗(yàn), 8數(shù)據(jù)位, 1停止位 8.$Include 編譯器指示語(yǔ)句,指示包含的basic程序的路徑,比如液晶用的軟字體。 語(yǔ)法: $Include "Path\BasDoc.bas" 注釋: 程序中引用或包含了另外的basic程序,那么這個(gè)指令就是告訴編譯器被引用basic程序存放的路徑。 例子: $Include "C:\FastAVR\Init.bas" ‘包含初始化程序Init.bas $Include "C:\FastAVR\Font.bas" ‘包含字體程序Font.bas 9.$IncludeAsm 編譯器指示語(yǔ)句,指示包含的ASM匯編程序的路徑。 語(yǔ)法: $IncludeAsm "Path\Utils.asm" 注釋: 程序中引用或包含了另外的asm程序,那么這個(gè)指令就是告訴編譯器被引用asm程序存放位置。 例子: $Include "C:\FastAVR\Init.asm" |