一、實驗介紹
因為這系列教學文主要是自己作為實驗筆記,所以理論的部分就不會太多說明,大家可以自己看書
(參考[Chai's AVR 學習筆記] 01)、看datasheet等
其實搞懂常用的AVR Assembly指令,還有register的操作,就可以開始實驗了
二、硬體連接
首先是這個開發板將AVR晶片的PORT重新排了一下
轉接上去後,左右PORT排列好,晶振的腳位(XTAL1、XTAL2)接到開發板的12.0Mhz上,然後Analog Reference為5V,JTAG的腳位也引出來,供debug或燒錄使用。
三、開發板LED模塊
我們使用JP1 插座上的8顆LED 接到PORTB 上面 (PB0~PB7)
由於LED為共陰極,因此AVR的pin為OUTPUT模式下,輸出0則sink電流進去,LED燈亮,輸出1(5V)則和Vcc電位同,LED燈暗
*AVR 控制IO 概念說明
ATmega 16 共有4個PORT,每個PORT 8個Pin
每個PORT由3個8-Bits Register控制
如 PORTB
Register
|
功能
|
Set(=1)
|
Clear(=0)
|
DDRB
|
Data Direction
Register
控制為Input 或 Output
|
輸出模式
|
輸入模式
|
PORTB
|
Output下輸出的值
|
輸出High
|
輸出Low
|
PINB
|
Input下讀取的值
|
讀到High
|
讀到Low
|
接下來會有範例示範如何存取這些register
/* * LED1.asm * * Created: 2015/2/11 10:35:12 * Author: Stanley Chai */ .include "m16def.inc" //Initial Stack for subroutine ldi r16,HIGH(RAMEND) out SPH,r16 ldi r16,LOW(RAMEND) out SPL,r16 ldi r16,0xff out DDRB,r16 START: ldi r16,0b01010101 out PORTB,r16 call Delay_500ms ldi r16,0b10101010 out PORTB,r16 rcall Delay_500ms rjmp START Delay_500ms: //for crystal oscillator freq=12Mhz 1 clock=0.083us =>need 6*10^6 clock cycle // 6*10^6=255*245*96 ldi r17,255 LOOP0: ldi r18,161 LOOP1: ldi r19,48 LOOP2: dec r19 //1 brne LOOP2 //2 / 1 //143 dec r18 //1 brne LOOP1 //2 / 1 //23505 dec r17 //1 brne LOOP0 //2 / 1 //5994539 ret //4 //brne 成立(Z!=0)時為2 clk cycle, Z=0時為1 clk cycle



沒有留言:
張貼留言