BERBAGILAH DALAM HAL KEBAIKAN TERMASUK ILMU WALAU CUMA SETITIK....

9/18/2015

Mikrokontroler AVR ATMega16

 AVR merupakan seri mikrokontroler CMOS 8-bit buatan Atmel, berbasis arsitektur RISC (Reduced Instruction Set Computer). Hampir semua instruksi dieksekusi dalam satu siklus clock. AVR mempunyai 32 register general-purpose, timer/counter fleksibel dengan mode compare, interrupt internal dan eksternal, serial UART, programmable Watchdog Timer, dan mode power saving, ADC dan PWM internal. AVR juga mempunyai In-System Programmable Flash on-chip yang mengijinkan memori program untuk diprogram ulang dalam sistem menggunakan hubungan serial SPI. ATMega16. ATMega16 mempunyai throughput mendekati 1 MIPS per MHz membuat disainer sistem untuk mengoptimasi konsumsi daya versus kecepatan proses.

Beberapa keistimewaan dari AVR ATMega16 antara lain:
1. Advanced RISC Architecture
-  130 Powerful Instructions – Most Single Clock Cycle Execution
-   32 x 8 General Purpose Fully Static Operation
-  Up to 16 MIPS Throughput at 16 MHz
-  On-

2. Nonvolatile Program and Data Memories
-  8K Bytes of In-System Self-Programmable Flash
-  Optional Boot Code Section with Independent Lock Bits
-  512 Bytes EEPROM
- 512 Bytes Internal SRAM
- Programming Lock for Software Security

3. Peripheral Features
-  Two 8-bit Timer/Counters with Separate Prescalers and CompareMode
-  Two 8-bit Timer/Counters with Separate Prescalers and CompareModes
-  One 16-bit Timer/Counter with Separate Prescaler, Compar Mode, and Capture Mode
-  Real Time Counter with Separate Oscillator
-  Four PWM Channels
-  8-channel, 10-bit ADC
-  Byte-oriented Two-wire Serial Interface
 - Programmable Serial USART

4. Special Microcontroller Features
-  Power-on Reset and Programmable Brown-out Detection
-  Internal Calibrated RC Oscillator
-  External and Internal Interrupt Sources
-  Six Sleep Modes: Idle, ADC Noise Reduction, Power-save, Powerdown,
-  Standby and Extended Standby

5. I/O and Package
-  32 Programmable I/O Lines
-  40-pin PDIP, 44-lead TQFP, 44-lead PLCC, and 44-pad MLF

6. Operating Voltages
-  2.7 - 5.5V for Atmega16L
-  4.5 - 5.5V for Atmega16

                                                       Gambar 1 Pin-pin ATMega16 kemasan 40-pin

Pin-pin pada ATMega16 dengan kemasan 40-pin DIP (dual inline package) ditunjukkan oleh gambar 1. Guna memaksimalkan performa, AVR menggunakan arsitektur Harvard (dengan memori dan bus terpisah untuk program dan data).

Port sebagai input/output digital
ATMega16 mempunyai empat buah port yang bernama PortA, PortB, PortC, dan PortD. Keempat port tersebut merupakan jalur bidirectional dengan pilihan internal pull-up. Tiap port mempunyai tiga buah register bit, yaitu DDxn, PORTxn, dan PINxn. Huruf ‘x’mewakili nama huruf dari port sedangkan huruf ‘n’ mewakili nomor bit. Bit DDxn terdapat pada I/O address DDRx, bit PORTxn terdapat pada I/O address PORTx, dan bit PINxn terdapat pada I/O address PINx. Bit DDxn dalam register DDRx (Data Direction Register) menentukan arah pin. Bila DDxn diset 1 maka Px berfungsi sebagai pin output. Bila DDxn diset 0 maka Px berfungsi sebagai pin input.Bila PORTxn diset 1 pada saat pin terkonfigurasi sebagai pin input, maka resistor pull-up akan diaktifkan. Untuk mematikan resistor pull-up, PORTxn harus diset 0 atau pin dikonfigurasi sebagai pin output. Pin port adalah tri-state setelah kondisi reset. Bila PORTxn diset 1 pada saat pin terkonfigurasi sebagai pin output maka pin port akan berlogika 1. Dan bila PORTxn diset 0 pada saat pin terkonfigurasi sebagai pin output maka pin port akan berlogika 0. Saat mengubah kondisi port dari kondisi tri-state (DDxn=0, PORTxn=0) ke kondisi output high
(DDxn=1, PORTxn=1) maka harus ada kondisi peralihan apakah itu kondisi pull-up enabled (DDxn=0, PORTxn=1) atau kondisi output low (DDxn=1, PORTxn=0).

Biasanya, kondisi pull-up enabled dapat diterima sepenuhnya, selama lingkungan impedansi tinggi tidak memperhatikan perbedaan antara sebuah strong high driver dengan sebuah pull-up. Jika ini bukan suatu masalah, maka bit PUD pada register SFIOR dapat diset untuk mematikan semua pull-up dalam semua port. Peralihan dari kondisi input dengan pull-up ke kondisi output low juga menimbulkan masalah yang sama. Kita harus menggunakan kondisi tri-state (DDxn=0, PORTxn=0) atau kondisi output high (DDxn=1, PORTxn=0) sebagai kondisi transisi.

 Tabel 1 Konfigurasi pin port


Bit 2 – PUD : Pull-up Disable
Bila bit diset bernilai 1 maka pull-up pada port I/O akan dimatikan walaupun register DDxn dan PORTxn dikonfigurasikan untuk menyalakan pull-up (DDxn=0, PORTxn=1).

Timer
Timer/counter adalah fasilitas dari ATMega16 yang digunakan untuk perhitungan pewaktuan. Beberapa fasilitas chanel dari timer counter antara lain: counter channel tunggal, pengosongan data timer sesuai dengan data pembanding, bebas -glitch, tahap yang tepat Pulse Width Modulation (PWM), pembangkit frekuensi, event counter external..

Gambaran Umum
Gambar diagram block timer/counter 8 bit ditunjukan pada gambar 2. Untuk penempatan pin I/O telah di jelaskan pada bagian I/O di atas. CPU dapat diakses register I/O, termasuk dalam pin-pin I/O dan bit I/O. Device khusus register I/O dan lokasi bit terdaftar pada deskripsi timer/counter 8 bit.


           Gambar 2 Blok diagram timer/counter
  
Timing Diagram Timer/Counter
Timer/counter didesain sinkron clock timer (clkT0) oleh karena itu ditunjukkan sebagai sinyal enable clock pada gambar 3. Gambar ini termasuk informasi ketika flag interrupt dalam kondisi set. Data timing digunakan sebagai dasar dari operasi timer/counter.

                                   
                                       Gambar 3 Timing diagram timer/counter, tanpa prescaling

Sesuai dengan gambar 4 timing diagram timer/counter dengan prescaling maksudnya adalah counter akan menambahkan data counter (TCNTn) ketika terjadi pulsa clock telah mencapai 8 kali pulsa dan sinyal clock pembagi aktif clock dan ketika telah mencapai nilai maksimal maka nilai TCNTn akan kembali ke nol. Dan kondisi flag timer akan aktif ketika TCNTn maksimal.



                                        Gambar 4 Timing diagram timer/counter, dengan prescaling

Sama halnya timing timer diatas, timing timer/counter dengan seting OCFO timer mode ini memasukan data ORCn sebagai data input timer. Ketika nilai ORCn sama dengan nilaiTCNTn maka pulsa flag timer akan aktif. TCNTn akan bertambah nilainya ketika pulsa clock telah mencapai 8 pulsa. Dan kondisi flag akan berbalik (komplemen) kondisi ketika nilai TCNTn kembali kenilai 0 (overflow).


             Gambar 5 Timing diagram timer/counter, menyeting OCFO, dengan pescaler
                                                                (fclk_I/O/8)

Ketika nilai ORCn sama dengan nilai TCNTn maka pulsa flag timer akan aktif. TCNTn akan bertambah nilainya ketika pulsa clock telah mencapai 8 pulsa. Dan kondisi flag akan berbalik (komplemen) kondisi ketika nilai TCNTn kembali kenilai 0 (overflow).


                 Gambar 6  Timing diagram timer/counter, menyeting OCFO, pengosongan data
                         timer sesuai dengan data pembanding,dengan pescaler (fclk_I/O/8)

   Deskripsi Register Timer/Counter 8 bit
 
Bit 7 – FOCO : perbandingan kemampuan output
FOCO hanya akan aktif ketika spesifik-spesifik bit WGM00 tanpa PWM mode. Adapun untuk meyakinkan terhadap kesesuaian dengan device-device yang akan digunakan, bit ini harus diset nol ketika TCCRO ditulisi saat mengoperasikan mode PWM. Ketika menulisi logika satu ke bit FOCO, dengan segera dipaksakan untuk disesuaikan pada unit pembangkit bentuk gelombang. Output OCO diubah disesuaikan pda COM01: bit 0 menentukan pengaruh daya pembanding.

Bit 6,3 – WGM01:0: Waveform Generation Mode
Bit ini mengontrol penghitungan yang teratur pada counter, sumber untuk harga counter maksimal ( TOP )., dan tipe apa dari pembangkit bentuk gelombang yang digunakan. Mode-mode operasi didukung oleh unit timer/counter sebagai berikut : mode normal, pembersih timer pada mode penyesuaian dengan pembanding ( CTC ), dan dua tipe mode Pulse Width Modulation ( PWM ).

      Tabel 2 Deskripsi Bit Mode Pembangkit Bentuk Gelombang
 
catatan: definisi nama-nama bit CTC0 dan PWM0 sekarang tidak digunakan lagi. Gunakan    WGM 01: 0 definisi. Bagaimanapun lokasi dan fungsional dan lokasi dari masing-masing bit sesuai dengan versi timer sebelumnya.

Bit 5:4 – COMO1:0 Penyesuaian Pembanding Mode Output
Bit ini mengontrol pin output compare (OCO), jika satu atau kedua bit COM01:0 diset, output OC0 melebihi fungsional port normal I/O dan keduanya terhubung juga. Bagaimanapun, catatan bahwa bit Direksi Data Register (DDR) mencocokan ke pin OC0 yang mana harus diset dengan tujuan mengaktifkan. Ketika OC0 dihubungkan ke pin, fungsi dari bit COM01:0 tergantung dari pengesetan bit WGM01:0. Tabel di bawah menunjukkan COM fungsional ketika bit-bt WGM01:0 diset ke normal atau mode CTC (non PWM).

  Tabel 3 Mode Output Pembanding, tanpa PWM


Tabel 4 menunjukan bit COM01:0 fungsional ketika bit WGM01:0 diset ke mode fast PWM.

   Tabel 4 Mode Output Pembanding, Mode fast PWM

Tabel 5 menunjukan bit COM01:0 fungsional ketika bit WGM01:0 diset ke mode phase correct PWM.
   Tabel 5 Mode Output Pembanding, Mode phase correct PWM


Bit 2:0 – CS02:0 : Clock Select
Tiga bit clock select sumber clock digunakan dengan timer/counter. Jika mode pin eksternal digunakan untuk timer counter0, perpindahan dari pin T0 akan memberi clock counter.

  Tabel 6 Deskripsi bit clock select
 
Sesuai dengan tabel diatas maka sumber clock dapat dibagi sehingga timer/counter dapat disesuaikan dengan banyak data yang dihitung.

   Register Timer/Counter TCNT0



                                         Gambar 8 Register timer TCNT0
  
Register timer/counter memberikan akses secara langsung, keduanya digunakan untuk membaca dan menulis operasi, untuk penghitung unit 8-bit timer/counter. Menulis ke blok-blok register TCNT0 (removes) disesuaikan dengan clock timer berikutnya. Memodifikasi counter (TCNT0) ketika perhitungan berjalan, memperkenalkan resiko kehilangan perbandingan antara TCNC0 dengan register OCR0.

Register Timer/Counter OCR0



                                      Gambar 9. Register timer OCR0

Register output pembanding berisi sebuah haraga 8 bit yang mana secara terus-menerus dibandingkan dengan harga counter (TCNT0). Sebuah penyesuaian dapat digunakan untuk
membangkitkan output interrupt pembanding, atau untuk membangkitkan sebuah output bentuk gelombang pada pin OC0.

Register Timer/Counter Interrupt Mask

Bit 1-OCIE0: output timer counter menyesuaikan dengan kesesuaian interrupt yang aktif.
Ketika bit OCIE0 ditulis satu, dan 1-bit pada register status dalam kondisi set (satu), membandingkan timer/counter pada interrupt yang sesuai diaktifkan. Mencocokkan interrupt yang dijalankan kesesuaian pembanding pada timer/counter0 terjadi, ketika bit OCF0 diset pada register penanda timer/counter-TIFR.

Bit 0 – TOIE0: Timer/Counter 0 Overflow Interrupt Enable
Ketika bit TOIE0 ditulis satu, dan 1-bit pada register status dalam kondisi set (satu), timer/counter melebihi interrupt diaktifkan. Mencocokkan interrupt dijalankan jika kelebihan pada timer/counter0 terjadi, ketika bit TOV0 diset pada register penanda timer/counter- TIFR

    Register Timer/Counter Register - TIFR


                                                             Gambar 10 Register timer TIFR
 
Bit 1 – OCF0: Output Compare Flag 0
OCF0 dalam kondisi set (satu) kesesuaian pembanding terjadi antara timer/counter dan data pada OCRO – Register 0 keluaran pembanding. OCF0 diclear oleh hardware ketika eksekusi pencocokan penanganan vector interrupt. Dengan alternatif mengclearkan OCF0 dengan menuliskan logika satu pada flag. Ketika I-bit pada SREG, OCIE0 (Timer/Counter0 penyesuaian pembanding interrupt enable), dan OCF0 diset (satu), timer/counter pembanding kesesuaian interrupt dijalankan.

Bit 0 – TOV0: Timer/Counter Overflow Flag
Bit TOV0 diset (satu) ketika kelebihan terjadi pada timer/counter0. TOV0 diclearkan dengan hardware ketika penjalanan pencocokan penanganan vector interrupt. Dengan alternatif, TOV0
diclearkan dengan jalan memberikan logika satu pada flag. Ketika Ibit pada SREG, TOIE0 (Timer/Counter0 overflow interrupt enable), dan TOV0 diset (satu ), timer/counter overflow interrupt dijalankan. Pada tahap mode PWM yang tepat, bit ini di set ketika timer/counter
merubah bagian perhitungan pada $00.

Serial pada ATMega16
Universal synchronous dan asynchronous pemancar dan penerima serial adalah suatu alat komunikasi serial sangat fleksibel. Jenis yang utama adalah :
a) Operasi full duplex (register penerima dan pengirim serial dapat berdiri sendiri)
b) Operasi Asychronous atau synchronous
c) Master atau slave mendapat clock dengan operasi synchronous
d) Pembangkit baud rate dengan resolusi tinggi
e) Dukung frames serial dengan 5, 6, 7, 8 atau 9 Data bit dan 1 atau 2 Stop bit
f) Tahap odd atau even parity dan parity check didukung oleh hardware
g) Pendeteksian data overrun
h) Pendeteksi framing error
i) Pemfilteran gangguan (noise) meliputi pendeteksian bit false start dan pendeteksian low pass filter digital
j) Tiga interrupt terdiri dari TX complete, TX data register empty dan RX complete.
k) Mode komunikasi multi-processor
l) Mode komunikasi double speed asynchronous

Generator Clock
Logic generator clock menghasilkan dasar clock untuk pengirim dan penerima. USART mendukung empat mode operasi clock: Normal Asynchronous, Double Speed Asynchronous mode Master Synchronous dan Slave Synchronous. Bit UMSEL pada USART control dan status register C (UCSRC) memilih antara operasi Asychronous dan Synchronous. Double speed (hanya pada mode Asynchronou ) dikontrol oleh U2X yang mana terdapat pada register UCSRA. Ketika mengunakan mode operasi synchronous (UMSEL = 1) dan data direction register untuk pin XCk (DDR_XCK) mengendalikan apakah sumber clock tersebut adalah internal (master mode) atau eksternal (slave mode) pin-pin XCK hanya akan aktif ketika menggunakan mode Synchronous.



                               ambar 11 Blok diagram clock generator logic

Keterangan sinyal :
Txclk : clock pengirim (internal clock)
rxclk : clock dasar penerima (internal clock)
xcki   : input dari pin XCK (sinyal internal). Digunakan untuk operasi slave synchronous.
xcko  : clock output ke pin XCK (sinyal internal). Digunakan untuk operasi master synchronous
fosc   : frekuensi pin XTAL (system clock)

Generator Internal Clock – Pembangkit Baud rate
Generasi internal clock digunakan untuk mode – mode operasi master asynchronous dan synchronous. Register USART baud rate (UBRR) dan down-counter dikoneksikan kepada fungsinya sebagai programmable prescaler atau pembangkit baud rate. Down-counter, dijalankan pada system clock ( fosc), dibebani dengan nilai UBRR setiap counter telah dihitung mundur ke nol atau ketika register UBRRL ditulisi. Clock dibangkitkan setiap counter mencapai nol. Clock ini adalah pembangkit baud rate clock output (fosc/( UBBR+1)). Pemancar membagi baud rete generator clock output dengan 2, 8, atau 16 cara tergantung pada mode. Pembangkit output baud rate digunakan secara langsung oleh penerima clock dan unit-unit pelindung data. Unit-unit recovery menggunakan suatu mesin status yang menggunakan 2, 8, atau 16 cara yang tergantung pada cara menyimpan status dari UMSEL, bit-bit U2X dan DDR_XCK.

Tabel di bawah menunjukan penyamaan perhitungan baud rate dan nilai UBRR tiap mode operasi mengunakan sumber pembangkit clock internal.

    Tabel 7 Persamaan untuk menyeting perhitungan register baud rate


    Note    : baud rate menunjukan pengiriman rate bit tiap detik (bps)
    BAUD  : baud rate ( pada bit-bit per detik,bps ) fosc frekuensi sistem clock osilator
    UBRR  : terdiri dari UBRRH dan UBBRL,( 0-4095 )

Eksternal Clock
Eksternal clock digunakan untuk operasi mode slave synchronous. Eksternal clock masuk dari pin XCK dicontohkan oleh suatu daftar sinkronisasi register untuk memperkecil kesempatan meta-stabilitas. Keluaran dari sinkronisasi register kemudian harus menerobos detector tepi sebelum digunakan oleh pengirim dan penerima. Proses ini mengenalkan dua period delay clock CPU dan oleh karena itu maksimal frekuensi clock XCK eksternal dibatasi oleh persamaan sebagai berikut

                                        Fxck < fosc/4
Keterangan: fosc tergantung pada stabilitas sistem sumber clock.

Operasi Synchronous Clock
Ketika mode sinkron digunakan (UMSEL=1), pin XCK akan digunakan sama seperti clock input (slave) atau clock output (master). Dengan ketergantungan antara tepi clock dan data sampling atau perubahan data menjadi sama. Prinsip dasarnya adalah data input (on RxD) dicontohkan pada clock XCK berlawanan dari tepi data output (TxD) sehingga mengalami perubahan.


                                           Gambar 12 Operasi synchronous Clock

UCPOL bit UCRSC memilih tepi yang mana clock XCK digunakan untuk data sampling dan yang mana digunakan untuk perubahan data. Seperti yang ditunjukan pada gambar di atas, ketika UCPOL nol data akan diubah pada tepi kenaikan XCK dan dicontohkan pada tepi XCK saat jatuh. Jika UCPOL dalam kondisi set, data akan mengalami perubahan pada saat tepi XCK jatuh dan data akan dicontohkan pada saat tepi XCK naik.

Inisialisasi USART
USART harus diinisialisasi sebelum komunikasi manapun dapat berlangsung. Proses inisialisasi normalnya terdiri dari pengesetan baud rate, penyetingan frame format dan pengaktifan pengirim atau penerima tergantung pada pemakaian. Untuk interrupt menjalankan operasi USART, global interrupt flag (penanda) sebaiknya dibersihkan (dan interrupt global disable) ketika inisialisasi dilakukan.
Sebelum melakukan inisialisasi ulang dengan mengubah baud rate atau frame format, untuk meyakinkan bahwa tidak ada transmisi berkelanjutan sepanjang periode register yang diubah. Flag TXC dapat digunakan untuk mengecek bahwa pemancar telah melengkapi semua pengiriman, dan flag RXC dapat digunakan untuk mengecek bahwa tidak ada data yang tidak terbaca pada buffer penerima. Tercatat bahwa flag TXC harus dibersihkan sebelum tiap transmisi (sebelum UDR ditulisi) jika itu semua digunakan untuk tujuan tersebut.
Share

6/22/2015

PEMROGRAMAN BAHASA C UNTUK MIKROKONTROLER AVR



Bahasa C luas digunakan untuk pemrograman berbagai jenis perangkat, termasuk mikrokontroler. Bahasa ini sudah merupakan high level language, dimana memudahkan programmer menuangkan algoritmanya. Untuk mengetahui dasar bahasa C dapat 3dipelajari sebagai berikut.

Struktur Penulisan Program
Struktur penulisan bahasa C secara umum terdiri atas empat blok, yaitu header, deklarasi konstanta global dan atau variable, fungsi dan atau prosedur (dapat di bawah program utama), dan program utama.

STRUKTUR PENULISAN
CONTOH

/* HEADER untuk memanggil library yang akan digunakan */
#include < [library1.h] > // Opsional
#include < [library2.h] > // Opsional

#define [nama1] [nilai] ; // Opsional
#define [nama2] [nilai] ; // Opsional

/* Deklarasi konstanta dan atau variabel global */
[global variables] // Opsional

/* Deklarasi fungsi dan atau prosedur */
[functions] // Opsional



/* Program utama */
void main(void)
{
/* Deklarasi konstanta dan atau variabel lokal */
[Deklarasi local variable/constant]
[Isi Program Utama]
}


#include <mega8535.h>
#include <stdio.h>

unsigned char dt, xx;
char buf[33];

unsigned char lampu (unsigned char bitn)
{
PORTA=bitn & 0x3C;
}

void main (void);
{
char data;

PORTA=0x00;
DDRA=0xF0;
While (1)
     {
      …
     };
}

Tipe Data
Tabel 3.1 memperlihatkan tipe-tipe variable data yang dapat digunakan di compiler Code Vision AVR.
Tabel 3.1 Tipe Data
Tipe
Size (bit)
Range
bit
1
0,1
char
8
-128 to 127
unsigned char
8
0 to 255
signed char
8
-128 to 127
int
16
-32768 to 32767
short int
16
-32768 to 32767
unsigned int
16
0 to 65535
signed int
16
-32768 to 32767
long int
32
-2147483648 to 2147483647
unsigned long int
32
0 to 4294967292
signed long int
32
-2147483648 to 2147483647
float
32
±1.175e-38 to ±3.402e38
double
32
±1.175e-38 to ±3.402e38



Deklarasi Variabel dan Konstanta
Variabel adalah memori penyimpanan data yang nilainya dapat diubah-ubah.
Penulisan : [tipe data] [nama] = [nilai] ;
Konstanta adalah memori penyimpanan data yang nilainya tidak dapat diubah.
Penulisan : const [nama] = [nilai] ;
Tambahan:
Global variabel/konstanta yang dapat diakses di seluruh bagian program.
Local variabel/konstanta yang hanya dapat diakses oleh fungsi tempat dideklarasikannya.

Identifikasi label, variable dan fungsi dapat berupa huruf (A…Z, a…z) dan angka (0…9), juga karakter underscore (_).  Meskipun begitu identifikasi hanya bisa dimulai dengan huruf atau karakter underscore. Yang lebih penting lagi, identifikasi ini case sensitive, yaitu huruf besar dan huruf kecil berbeda. Misalnya, variable1 tidak sama dengan Variable1. Identifikasi bisa memuat sebanyak 32 karakter.
Penulisan konstanta adalah sebagai berikut:
  • Integer atau long integer dapat ditulis dengan format decimal (contoh 1234), biner dengan awalan 0b (contoh 0b101001), heksadesimal dengan awalan 0x (contoh 0xff) atau octal dengan awalan 0 (contoh 0777).
  • Unsigned integer ditulis dengan diakhiri U (contoh 10000U)
  • Long integer ditulis dengan diakhiri L (contoh 99L)
  • Unsigned long integer ditulis dengan diakhiri UL (contoh 99UL)
  • Floating point ditulis dengan diakhiri F (contoh 1.234F)
  • Karakter harus dituliskan dalam tanda kutip (contoh ‘a’)
  • String harus dalam tanda kutip dua (contoh “Saya Belajar C”).

Komentar
Komentar diawali dengan tanda /* dan diakhiri dengan */
Contoh:
/* Ini komentar */
/* Ini komentar
     Multi baris */
Sedangkan komentar satu baris bias dengan tanda //
Contoh:
// Ini juga komentar

Reserved Keywords
Berikut ini adalah daftar kata baku yang tidak bias dipakai (reserved keywords) untuk label, identifikasi atau variabel.
break
Flash
signed
bit
Float
sizeof
case
For
Sfrb
char
Funcused
Sfrw
const
Goto
static
continue
If
struct
default
inline
switch
do
Int
typedef
double
interrupt
union
eeprom
Long
unsigned
else
register
void
enum
return
volatile
extern
Short
while

Percabangan
If - then
Struktur penulisan
Contoh
if (kondisi) {
   // pernyataan
   };
if (a<0x50) {
   PORTC=0x55;
   }

if – then – else
Struktur penulisan
Contoh
if (kondisi) {
   // pernyataan a
   }
Else {
   // pernyataan b
   };
If (a<0x50) {
   PORTC=0x55;
   }
Else {
   PORTC=0xAA;
   };

Switch – case
Struktur penulisan
Contoh
Switch (ekspresi) {
   Case konstanta1:
Pernyataan1
   Break;
Case konstanta2:
Pernyataan2
   Break;
Case konstantaN:
pernyataanN
   break;
}
switch (a) {
   case 1:
      PORTC=0x01;
         break;
   case 2:
      PORTC=0x02;
         break;
   case 3:
      PORTC=0x04;
         break;
   }

Switch – case – default
Struktur penulisan
Contoh
Switch (ekspresi) {
   Case konstanta1:
Pernyataan1
   Break;
Case konstanta2:
Pernyataan2
   Break;
Case konstantaN:
pernyataanN
   break;
default:
   pernyataan-pernyataan;
}
switch (a) {
   case 1:
      PORTC=0x01;
         break;
   case 2:
      PORTC=0x02;
         break;
   case 3:
      PORTC=0x04;
         break;
   default:
      PORTC=0xFF;
   }


Perulangan
For
For (mulai; kondisi; penambahan atau pengurangan) {
   Pernyataan-pernyataan;
};
A=1;
For (i=1; i<50; i++) {
   A=a*2;
PORTC=a;;
};


While
While (kondisi) {
   Pernyataan-pernyataan;
}
I=1;
A=1;
While (i<50) {
   A=a*2;
PORTc=a;;
I++;
};

Do – while
Do {
   Pernyataan-pernyataan;
}
While (kondisi);
I=1;
A=1;
Do {
   A=a*2;
PORTc=a;;
I++;
}
While (i<50);

Operasi logika dan biner
Logika
AND :&&
NOT : !
OR : ||
Biner
AND : &
OR : |
XOR : ^
Shift right: >>
Shift left : <<
Komplemen : ~

Operasi relasional (perbandingan)
Sama dengan : ==
Tidak sama dengan : !=
Lebih besar : >
Lebih besar sama dengan : >=
Lebih kecil : <
Lebih kecil sama dengan : <=

Operasi aritmatika
+ , - , * , / : tambah,kurang,kali,bagi
+= , -= , *= , /= : nilai di sebelah kiri operator di tambah/kurang/kali/bagi dengan nilai di sebelah kanan operator
% : sisa bagi
++ , -- : tambah satu (increment) , kurang satu (decrement)
Contoh :
a = 5 * 6 + 2 / 2 -1 ; maka nilai a adalah 30
a *= 5 ; jika nilai awal a adalah 30, maka nilai a = 30x5 = 150.
a += 3 ; jika nilai awal a adalah 30, maka nilai a = 30+5 = 33.
a++ ; jika nilai awal a adalah 5 maka nilai a = a+1 = 6.
a-- ; jika nilai awal a adalah 5 maka nilai a = a-1 = 4.


Memasukkan bahasa Assembly (in line assembly)
Dalam pemrograman dengan bahasa C, bahasa assembly masih dapat dimasukkan ke dalam program C. Struktur penulisannya pun juga mudah, yaitu:

#asm  // dimulai dengan #asm
nop // blok bahasa assembly
nop
#endasm // diakhiri dengan #endasm

Atau jika hanya beberapa instruksi maka bias dituliskan dengan;
#asm(“nop`nop`nop”)

Statement
Statement adalah setiap operasi dalam pemrograman, harus diakhiri dengan [ ; ] atau [ } ]. Statement tidak akan dieksekusi bila diawali dengan tanda [ // ] untuk satu baris. Lebih dari 1 baris gunakan pasangan [ /* ] dan [ */ ]. Statement yang tidak dieksekusi disebut juga comments / komentar.

Contoh: suhu=adc/255*100; //contoh rumus perhitungan suhu

Function
Function adalah bagian program yang dapat dipanggil oleh program utama.
Penulisan : [tipe data hasil] [nama function]([tipe data input 1],[tipe data input 2])
{
[statement] ;
}

Share