Instruksi yang digunakan dalam CVAVR untuk mengakses data keluaran (output) ke salah satu port sudah baku. Ada dua macam peng-akses-an port, yaitu secara bersamaan dan secara satu-persatu pin/bit. Sebagai contohnya sebagai berikut ini :
Mengakses PORT B.
Instruksi CVAVR secara bersamaan :
PORTB = 0xf0; //pada 8 bit data PORTB akan mengeluarkan data 11110000
atau
PORTB = 0b11110000;
Instruksi CVAVR secara per-bit:
PORTB.0=1; //pin atau bit ke-0 PORTB akan mengeluarkan data 1 (HIGH/+5V)
atau
PINB.0=1;
.
.
PORTB.3=1; //pin atau bit ke-3 PORTB akan mengeluarkan data 1 (HIGH/+5V)
atau
PINB.3=1;
PORTB.4=0; //pin atau bit ke-4 PORTB akan mengeluarkan data 0 (LOW/0V)
atau
PINB.4=0;
.
.
PORTB.7=0; //pin atau bit ke-7 PORTB akan mengeluarkan data 0 (LOW/0V)
atau
PINB.7=0;
RANGKAIAN SIMULASI ATMEGA16 DENGAN KELUARAN 8 LED
Contoh program LED menyala semua secara bersamaan :
#include <mega16.h>
void main(void){
PORTB=0x00;
DDRB=0xff;
while(1){
PORTB=0xff;
}
}
Contoh program running LED :
#include <mega16.h>
#include <delay.h>
void main(void){
PORTB=0x00;
DDRB=0xff; //PORTB diatur menjadi output
while (1)
{
PORTB=0b10000000;
delay_ms(10);
PORTB=0b01000000;
delay_ms(10);
PORTB=0b00100000;
delay_ms(10);
PORTB=0b00010000;
delay_ms(10);
PORTB=0b00001000;
delay_ms(10);
PORTB=0b00000100;
delay_ms(10);
PORTB=0b00000010;
delay_ms(10);
PORTB=0b00000001;
delay_ms(10);
}
}
atau
#include <mega16.h>
#include <delay.h>
int geser=1;
void main(void){
PORTB=0x00;
DDRB=0xFF;
delay_ms(10);
PORTB=0x01;
delay_ms(10);
while (1){
if(geser<0){
geser=0x01;}
delay_ms(10);
PORTB=geser;
geser<<=1; //melakukan shift register
};
}
Contoh program LED berkedip secara bersamaan dengan delay :
#include <mega16.h>
#include <delay.h>
void main(void){
PORTB=0x00;
DDRB=0xff; //PORTB diatur menjadi output
while (1)
{
PORTB=0xff;
delay_ms(500);
PORTB=0x00;
delay_ms(500);
}
}
amang parmusik nami bahen jo musik naung partus i
ReplyDelete