一、AVR開發工具簡介及開發環境的建立
-
軟件開發工具
編譯環境:WinAVR
下載軟件:MucodeISP
仿真環境:AVR Studio
集成環境:AVR Studio,可以內聯WinAVR 成為一個具有編譯、仿真、下載功能的集成環境
硬件開發工具
下載線(并口也有USB接口的,功能是下載程序配置熔絲位)
仿真器
學習板(或手工焊接的系統板)
工具手冊
WinAVR技術手冊
ATmega16官方中文版技術手冊(英文水平好也可以看看英文版)
WinAVR 說明
WinAVR 下載安裝后只用到PN其他刪除就行了、PN我們一般把他作為一個編輯環境來使用,保存為.c文件之后他就會變成一個有顏色的C文件了,這個有點就顯示出來了(關鍵字帶顏色深藍色和點擊小括號其中另一半就會高亮很多層括號就有用了)而WinAVR 的編譯功能需要編寫Makefile文件所以對初學者有難度先不介紹了。而編譯使用AVR Studio來完成就可以了。
下載線作用
一、修改熔絲位 熔絲位可理解為是一個獨立于CPU之外的一塊小存儲區它保存了一些關鍵的控制位、如:時鐘源、一些I/O口的特殊作用。
二、向單片機Flash中下載程序代碼。不具備單步調試仿真功能。
三、下載線有很多種,最常用的是插在計算機并口上的STK200/300
下載軟件說明
下載軟件有很多、但推薦初學者使用Mucode isp 優點是熔絲位設置很清晰,不至于設錯而鎖死芯片
MUcode ISP 如果外部石英晶振高于8MHZ 也選3.0—8MHZ 防止鎖死如果芯片鎖死了,就下載不進去程序了。芯片解鎖只能采用高壓編程器,將熔絲位修改回來。然后另一個比較重要的熔絲位是(共16個紅點和綠點)這個表示的是ATmega16 的2字節的熔絲位,上面8個表示時鐘電源模式。更改時鐘的話上面8個自動做出相應的變化。變綠=1 表示沒有使能變紅表示使能的紅點按下去就是使能的意思就好在這里。下面8個最重要的是JTAGEN這個,打開ATmega16 技術文檔發現JTAG有個4個腳和普通的I/O口是復用的(TDI TDO TMS TCK )可以配置成普通I/O用也可以當JTAG接口用。現在JTAGEN =0 紅色 說明這個4個只能當JTAG 口用。所以在編程的時候對這4個I/O操作就是無效的。點一下變綠了就不使能了,可以當普通I/O口用,當然這個時候JTAG仿真器就連不上了。CKOPT 這個熔絲位如果使能外部晶振的振幅就會變得比較大,示波器就能看的出來會變成5V左右的振幅,如果不使能,晶振就工作與一種低功耗的模式,振幅比較小。初學不用管。EESAVE表示向Flash編程的時候是否擦出內部的EEPROM ,使能就是不擦出,當初學用不到。
一般我們只管設置時鐘(前8個 選了就不用管了)和JTAGEN (下面8個其中的一個)就行了。下載線和下載軟件
AVR Studio 是Atmel公司官方的匯編、下載與仿真軟件可以內聯WinAVR獲得C語言編譯能力。單獨裝AVR Studio只能編譯匯編語言的代碼,通過JTAGE 工具也具有下載仿真的功能也可以更改熔絲位不過熔絲位不夠直觀。內聯就可以獲得C語言編譯能力了。
JTAG ICE 是Atmel公司官方的仿真調試器,但已經被仿制,價格比官方版本要便宜十倍,可以使用淘寶購買的JTAGEICE 當然你買的時候最要要賣家給發給你個AVR Studio 的版本裝了AVR Studio 4,創建一個項目如下圖,點擊下一步
選著JTAGE ICE ATmega16 點擊完成
進入項目
點擊project 下的配置選項 (configuration options)
填入:晶振頻率和代碼優化 選項(-00 -01 -02 -03 -0s) 從小到大 0s 最大的優化越好編譯出的代碼越小,執行速度越快。我們選-00 因為在優化的情況下有些時候會出現一些極其少見的問題。建議選-00。點擊確定。
注意AVR都要包含一個最為基本的頭文件
#include //在C:WinAVRavrincludeavr 這個路徑下就有io.h文本文件 可以用PN打開看看
//在AVR Studio下編譯代碼就不如在 WinAVR下編譯好如括號不好用。
調試如下
這樣其實已經通過仿真器已經下載到了單片機里面了,這就提到一個JTAG的一個好處,JTAG 一邊是DB9頭一邊就是JTAG仿真接口接單片機。所以仿真什么結果實際運行就是什么結果是一樣的。51不帶JTAG口一般采用偉福仿真器。、它的仿真是一種ROM仿真,仿真時候使用仿真頭來代替單片機來進行仿真,最后再下載進去,所以最后運行的結果不一定是一樣的。
二、計算機原理基礎知識講解
數值就是一位數字能夠表示的數的數量,N進制數的進位規則是“馮N進1,常用的數制有十進制、二進制、十六進制。人類有十個指頭,所以習慣采用十進制。計算機只能識別0和1,采用二進制。為了計算機學中的數據寫方便,采用十六進制。位于字節的概念:
位(bit):簡寫為b,表示二進制數的一位。
字節(byte):簡寫為B,8位為一字節
數值轉換工具:Windows自帶的計算器
1Byte = 8bit
1字節=2位十六進制數
例如:
0x55 = 0b01010101 = 85
0xa3 = 0b10100011 = 163
存儲器
對于8位單片機,其內部存儲器均為8位。
RAM與ROM 模型
這是一個1K大小的ROM 1024-1=1023 = 0x3FF 1維的模型 每一個地址對應一個存儲單元,一個存儲單元房的有數據像上圖的0x23 0x55 0x6a …0xcf等 存儲的都是8位的二進制數。外部模型如右邊的 主要有2組總線一邊是地址線一邊是數據線(其實還有個控制總線沒畫出),對這個RAM讀寫給地址線送一個相應地址通過控制總線表示當前是讀模式,相應的數據線就將對應的地址存的內容送到數據線上。對于ROM也是這樣的。
CPU
CPU即是為中央處理器
取指令-執行
三、C語言基礎知識講解
-
變量
運算符
語句
函數
順序語句
選擇語句
循環語句
數組和指針
變量:變量就是存儲于RAM或ROM中的數據
變量的分類:
單片機中比較常用的是字符型(char)和整型(int)
實型(float)變量在單片機C語言中一般用不到(浮點)
運算符:類似于數學運算中的運算符號( – * / 移位等C語言課本后有附表)
語句:C語言中以分號作為一條語句的結束
習慣上每條語句單獨占用一行,但也可以每行有多條語句, 用分號隔開即可
DDRx PORTx 都在io.h 里面有定義 當然內嵌一層(
#elif defined (__AVR_ATmega16__)
# include )
在找到iom16.h就有定義地址了
#define DDRC _SFR_IO8(0x14)
#define DDC0 0
#define DDC1 1
#define DDC2 2
#define DDC3 3
#define DDC4 4
#define DDC5 5
#define DDC6 6
#define DDC7 7
就是說明在 0x14位置 0001 0100 這個地址保存一個8位二進制數 沒一位表示一個I/O口的方向
字符型變量
占用存儲器中的一個字節空間,即8位二進制數
取值范圍:0~(2^8 – 1 )即0~255
可以賦值為整數或ASCII碼
char zifu =97;
char zifu = \’a\’//這種特殊方式是‘a’ 字符就是把ASCII碼值給了ASCII(2)0–255對應一個字符是一種映射關系單引號告訴編譯器從這個碼表中取出對應的ASCII碼賦值給zifu 查下表得出對應就是97,所以這兩條語句是等效的。
前提是先進入調試模式下view下的Watch才能用 不然是灰色的
在Value右鍵可以選十六進制和十進制 看看 location下顯示的是地址(SRAM)中的位置
整形變量
占用存儲器中的2個字節,即16位二進制數
有無符號子類型
unsigned int :無符號整型
取值范圍0~(2^16-1)即0~65535
signed int 有符號整形,signed 可以省略。
取值范圍-2^15 ~ (2^15-1)即-32768 ~ 32767
長整型
取值范圍更大的int 子類型
long int :長整形,長度為32位,即4個字節
long long int :長度為64位,即8個字節
常用的運算符
賦值 = 加 減 – 乘 * 除 / 括號() 求余%
與& 或| 取反~ 異或^ 左移 << 右移 >>
邏輯與&& 邏輯||
了解更多AVR單片機系列,請關注“云漢電子社區(ickeybbs)”官方微信公眾號,或者登錄云漢電子社區官方網站(bbs.ickey.cn)
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。