2015年9月18日 星期五

ATMEGA328 port 的操作

原因: 使用 arduino 的 digitalWrite() 及 digitalRead() 的速度不夠快, 直接對 register 控制.
用到的 register:
   PORTD: set data output
   DDRD  : set input/output mode
   PIND    : read data input . if write 1 , the port will toggle.

方法:

-- 找出對應的 pin 腳 --
input pin:
  digital pin 6, PORTD6

output pin:
  digital pin 2, PORTD2

-- 設定 --
 output mode:
    DDRD |= (0x04);    // 1: output, 0:input
  
 input mode:
   DDRD &= (~0x40)
   PORTD |= (0x40);  // input pull-high

-- 讀值 --
   Data = PIND;     // read PORTD input data

ex: // 反向輸出
..
noInterrupts();
while(1){
    
    if(PIND & 0x04){
        PORTD &= (~0x40);
    }
    else{
        PORTD |= (0x40);
    }
}







沒有留言:

張貼留言