Minggu, 30 Maret 2014

pemograman C mikrokontroler




BAGIAN PROGRAM C

//===========================================include
#include <stdio.h>
#include <delay.h>
//============================================define
#define LED PORTB        
//============================================= VARIABLE DAN CONSTANTA global
Unsigned char  temp_data;         //contoh variable
Const temp_suhu=50;                    //contoh konstanta
Unsigned char dataserial[30] ;   // contoh array untuk buffer misal serial
//dataserial[0]=1;
//dataserial[1]=1;
//============================================== subrutin
Void namasubrutin()
{
                Isi;
}

Unsigned char namafungsi()
{
                Return nilai fungsi;
}

//====================================================
Void init_devices()
{
                DDRB=255;
                DDRD.2=0;
PORTD.2=1;
                DDRD.3=0;PORTD.3=1;
}
//=======================================================



//==========================================PROGRAM UTAMA
//PROGRAM UTAMA
//saat mikro jalan program langsung lompat ke main
//semua subrutin dan fungsi di panggil di program utama
//jika subrutin hanya untuk inisialisasi awal di simpan sebelum kalang
// jika subrutin yang dipanggil terus menerus di simpan dalam kalang
//=============================================
Void main()
{
                Init_devices();
                While(1)
{
                Namasubrutin();              //cara memanggil subrutin
Temp_data=namafungsi();
}
}
//===============================================================
Variable dalam codevision
Unsigned char namavariable; //0-255
Unsigned int namavariable; //0-65535
char namavariable; //-128-128
char namavariable; //-35767-32676
unsigned long namavariable; //0- 2^32bit
//hubungan pemakaian ram.
// 24c64 i2c eeprom kapasitas 8kbyte. 8000. Pemilihan variable alamat yaitu unsigned int
//24c1024 eeprom 1mb 1000.000 pemilihan variable yaitu unsigned long

PENGGUNAAN ARRAY
unsigned char namaarray[n_array];
biasanya digunakan untuk buffer data yang cukup banyak. Misalnya untuk buffer serial atau buffer MMC.

PROSES PENGULANGAN
Pengulangan untuk for selama 5 kali
-          I merupakan variable
-          I=0;
-          Jika i<5 tambah 1
-          Jika I sam dengan atau > 5 maka selesai
for(i=0;i<5;i++)
{
}
//for tanpa syarat dia akan mengulang terus. Kecuali ada perintah break
For(;;)
{
}
//===============================
//selama I kurang dari 5 maka proses di kerjakan
While(i<5)
{
                I++;
}
//==================================
//selama I < 5 proses di kerjakan
//=================================
Do
{
                I++;

}
While(i<5);
//=====================================================
PERINTAH BREAK
perintah break digunakan untuk keluar dari kalang, dimanapun, baik mau dari subrutin atau program utama.misal
for(i=0;i<5;i++)
{
                If(tombol1==0)break;
}
Proses dikerjakan 5 kali tapi ketika di tekan tombol maka akan keluar dari kalang.
//===================================================================
Perintah seleksi
Jika if hanya melakukan perintah  1 kali maka ridak perlu kalang. contoh
If(suhu==10)alarm=1;

Jika if melakukan perintah lebih dari 1 kali maka di perlukan kalang
If(suhu==10)
{
                Alarm=1;
                Led=255;
                Relay=1;
}
//=====================================================
Penggunaan if dengan else ada 2 kondisi
If(suhu>10)alarm=1;
Else alarm =0;

If(suhu>20)
{
                Alarm=1;
                Relay=1;
}
Else
{
                Alarm=0;
Relay=0;
]

If(suhu<20)alarm=1;
Else if(suhu>=20)&&(suhu<40)relay=1;
Else if(suhu>40)led=255;

Operater matematika
i++;         variable I ditambah 1;
i=I+2;     variable I ditambah 2;
i--;          variable i-1;
i=i*5; variable i*5
i=i/2; variable I dibagi 2
i=i%2; ambil sisa bagi
1<<n      1 digeser n kali ke kiri
1>>n     1 digeser n kali ke kanan
//==========================================================================
Contoh bagi dan sisa bagi
Misal bilangan 156. mau di tampilkan ke 7 segment atau lcd
Dalam proses ini tidak bias langsung di tampilkan tapi perlu di ketau
Nilai ratusan =1
Nilai puluah =5
Nilai satuan=6
Tempbyte=156;
Ratusan=tempbyte/100;   //156/100=1
 puluahn=((tempbyte%=100)/10); 156%100=56 terus 56/10= 5
satuan=(tempbyte%10);//56%10=6

OPERATOR LOGIKA
&&         and
||           or
~              negasi
^              xor
==           sama dengan
!=            tidak sama dengan

Sintak sintak yang sering di pakai
-          Misal membuat portb.7 berlogika 1
PORTB|=(1<<7); // Dipakai di semua bahasa yang menggunakan basic c
PORTB.7=1; // Cuma dipakai di codevision
-          Membuat portb.7 berlogika 0
PORTB&=~(1<<7);  // semua bahasa c
PORTB.7=0

-          Mengecek PIND.2 bukan 0
If(PIND.2)                            //code vision
If(PIND&(1<<2))                               //semua c
If(PIND.2!=0)                     //code vision

Mengecek PIND.2  sama dengan 0
If(!(PIND.2))                       //code vision
If(PIND.2==0)                     //codevision
If(!(PIND&(1<<2)))          //semua c

//=================================================================

If bukan 0 pada variable (pengecekan bit pada variable).

if(datalcd & 0x80) {LCD_D7_HI;} else {LCD_D7_LO;}
if(datalcd & 0x40) {LCD_D6_HI;} else {LCD_D6_LO;}
if(datalcd & 0x20) {LCD_D5_HI;} else {LCD_D5_LO;}
if(datalcd & 0x10) {LCD_D4_HI;} else {LCD_D4_LO;}
if(datalcd & 0x08) {LCD_D7_HI;} else {LCD_D7_LO;}
if(datalcd & 0x04) {LCD_D6_HI;} else {LCD_D6_LO;}
if(datalcd & 0x02) {LCD_D5_HI;} else {LCD_D5_LO;}
if(datalcd & 0x01) {LCD_D4_HI;} else {LCD_D4_LO;}

datalcd&=0x80
nilai yang mungkin keluar ada dua yaitu 0 dan 0x80;
jika bukan 0 maka lcd hi , sama dengan 0 lcd lo

datalcd&=0x40
nilai yang mungkin keluar ada dua yaitu 0 dan 0x40;

CONTOH PIND SEMUANYA INPUT.
Kita ingin mengecek apakah pind bit ke 2 ==1 JIKA YA alarm hi, jika bukan alarm 0

If(PIND&(1<<2)alarm_hi; else alarm lo;
If(PIND&0X04)alarm_hi;elsealarmlo;

PENGECEKAN PAKAI WHILE
Selama PIND.2 belum ditekan (kondisi high)

while (PIND.2);
while(PIND&0X04);
while(PIND&(1<<2));
while(pind.2==1);

selama PIND.2 ditekan (kondisi low)
while(!(PIND.2);
while(!(PIND&0X04));
while(!(PIND&(1<<2)));
while(!(pind.2==1));

0 komentar:

Posting Komentar