Software yang digunakan dalam ujicoba kali ini ialah MIKROC 8051 ver 2.2. pemrograman mikrokontroler AT89S51 dengan bahasa C memang lebih mudah jika dibandingkan dengan menggunakan Assembler. apalagi jika kita ingin membuat perangkat yang rumit akan sangat terasa perbedaannya.
Awal pembuatan program bisa di lihat pada video berikut :
Resolusi lebih tinggi klik disini
Berikut merupakan daftar uji coba tersebut:
1. Percobaan LED
Skema Uji Coba LED
void main() {
P0=0x00;     // LED SEMUA ON
}
Program LED 2 menyalakan sebagian Led dengan bilangan heksa
void main() {
P0=0xF0;     // LED P0-P3 ON
}
Program LED 3 menyalakan 1 Led dengan bilangan biner
void main() {
P0=0b11111110;     // LED 1 ON
}
Program LED 4 menyalakan 2  Led dengan bilangan biner
void main() {
P0=0b01111110;     // LED 1 dan 8 ON
}
Program LED 5 menyalakan Led per bit
void main() {
P0_0_bit=0;     // LED 1 
ON
P0_7_bit=0;     // LED 8 ON
}
Program LED 6 Blinking led dengan delay
void main() {
while(1){
P0=0b00000000;     //led ON
delay_ms(1000);    //tunda 1 detik
P0=0b11111111;     //led OFF
delay_ms(1000);    //tunda 1 detik
} 
}
2. Percobaan Switch
Skema Uji Coba Switch
Program Switch 1
void main() {
while(1){
if(P1_0_bit==0){P0=0x00;}  //jika tombol 1 ditekan LED ON
}
}
Program Switch 2 
void main() {
while(1){
if(P1_0_bit==0){P0=0x00;}  //jika tombol 1 ditekan LED ON
if(P1_1_bit==0){P0=0xff;}  //jika tombol 2 ditekan LED OFF
}
}
Program Switch 3
void main() {
while(1){
if(P1_0_bit==0){P0_0_bit=0;}  //jika tombol 1 ditekan LED 1 ON
if(P1_1_bit==0){P0_1_bit=0;}  //jika tombol 2 ditekan LED 2 ON
if(P1_2_bit==0){P0=0xff;}     //jika tombol 3 ditekan LED OFF
}
}
Program Switch 4
void main() {
while(1){
if(P1_0_bit==0){P0=0x00;}     //jika tombol 1 ditekan led on dilepas led
off
else{P0=0xff;}
} 
}
3. Percobaan LCD
Skema Uji Coba LCD
Program LCD 1
// lcd pinout
settings
sbit LCD_RS at
P2_0_bit;
sbit LCD_EN at
P2_1_bit;
sbit LCD_D7 at
P2_7_bit;
sbit LCD_D6 at
P2_6_bit;
sbit LCD_D5 at
P2_5_bit;
sbit LCD_D4 at
P2_4_bit;
void main() {
lcd_init();
Lcd_Out(1, 3,
"tutorial-");             //tulis
di baris ke 1 kolom 3
lcd_Out(2,1,
"mikrokontroler");   //tulis di
baris ke 2 kolom 1
}
Program LCD 2
// lcd pinout
settings
sbit LCD_RS at
P2_0_bit;
sbit LCD_EN at
P2_1_bit;
sbit LCD_D7 at
P2_7_bit;
sbit LCD_D6 at
P2_6_bit;
sbit LCD_D5 at
P2_5_bit;
sbit LCD_D4 at
P2_4_bit;
void main() {
lcd_init();
Lcd_Out(1, 3,
"Uji coba");               //tulis di
baris ke 1 kolom 3
Lcd_Cmd(_LCD_CURSOR_OFF);    //matikan kursor
while(1)
{
Lcd_Cmd(_LCD_SHIFT_RIGHT);     //geser tulisan ke kanan
delay_ms(1000);                              //tunda 1 detik
}                                                          //ulangi 
}
Program LCD 3
// lcd pinout
settings
sbit LCD_RS at
P2_0_bit;
sbit LCD_EN at
P2_1_bit;
sbit LCD_D7 at
P2_7_bit;
sbit LCD_D6 at
P2_6_bit;
sbit LCD_D5 at
P2_5_bit;
sbit LCD_D4 at
P2_4_bit;
void main() {
lcd_init();
Lcd_Out(1, 3,
"Uji coba");               //tulis di
baris ke 1 kolom 3
Lcd_Cmd(_LCD_CURSOR_OFF);    //matikan kursor 
}
Command LCD lainnya :
Skema Uji Coba RTC
Program Jam Digital
char seconds,
minutes, hours, date, month;  // Global
date/time variables
unsigned int year;
unsigned int
RTCModuleAddress, YearOffset; // RTC chip description variables
#define DS1307          // Uncomment this line if you use
DS1307 RTC chip (mE RTC2 extra board)
// Software I2C
connections
sbit Soft_I2C_Scl at
P1_0_bit;
sbit Soft_I2C_Sda at
P1_1_bit;
// End Software I2C
connections
// LCD module
connections
sbit LCD_RS at
P2_0_bit;
sbit LCD_EN at
P2_1_bit;
sbit LCD_D4 at
P2_4_bit;
sbit LCD_D5 at
P2_5_bit;
sbit LCD_D6 at
P2_6_bit;
sbit LCD_D7 at
P2_7_bit;
// End LCD module
connections
//------------------
Performs project-wide init
void Init_Main() {
  #ifdef DS1307
    RTCModuleAddress   = 0xD0;
    YearOffset         = 2000;
  #endif
  Soft_I2C_Init();           // Initialize Soft I2C communication
  Lcd_Init();                // Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);       // Clear LCD display
  Lcd_Cmd(_LCD_CURSOR_OFF);  // Turn cursor off
  LCD_Out(1,1,"Date:");      // Prepare and output static text on LCD
  Lcd_Chr(1,8,':');
  Lcd_Chr(1,11,':');
  LCD_Out(2,1,"Time:");
  Lcd_Chr(2,8,':');
  Lcd_Chr(2,11,':');
}
//---------------------
Reads time and date information from DS1307 RTC
void
Read_Time_DS1307() {
  char byte_read;
  Soft_I2C_Start();                   // Issue start signal
  Soft_I2C_Write(RTCModuleAddress);   // RTC module address + write (R#/W = 0)
  Soft_I2C_Write(0);                  // Start from seconds byte
  Soft_I2C_Start();                   // Issue repeated start
signal
  Soft_I2C_Write(RTCModuleAddress+1); // RTC
module address + read  (R#/W = 1)
  byte_read = Soft_I2C_Read(1);                                // Read seconds
byte
  seconds = ((byte_read & 0x70) >>
4)*10 + (byte_read & 0x0F); // Transform seconds
  byte_read = Soft_I2C_Read(1);                                // Read minutes
byte
  minutes = ((byte_read & 0x70) >>
4)*10 + (byte_read & 0x0F); // Transform minutes
  byte_read = Soft_I2C_Read(1);                                // Read hours
byte
  if (byte_read.B6) {                                          //
12h format
    hours = ((byte_read & 0x10) >>
4)*10 + (byte_read & 0x0F); // Transform hours
    if (byte_read.B5)                                          // PM
flag
      hours = hours + 12;
  }
  else
    hours = ((byte_read & 0x30) >>
4)*10 + (byte_read & 0x0F); // Transform hours
  byte_read = Soft_I2C_Read(1);                                // Read weekday
byte
  byte_read = Soft_I2C_Read(1);                                // Read date
byte
  date = ((byte_read & 0x30) >> 4)*10
+ (byte_read & 0x0F);    // Transform
date
  byte_read = Soft_I2C_Read(1);                                // Read month
byte
  month = ((byte_read & 0x10) >>
4)*10 + (byte_read & 0x0F);   //
Transform month
  byte_read = Soft_I2C_Read(1);                                // Read year
byte
  year = YearOffset + ((byte_read & 0xF0)
>> 4)*10 + (byte_read & 0x0F); // Transform year
  Soft_I2C_Stop();                    // Issue stop signal
}
//---------------------
Reads time and date information from RTC
void Read_Time() {
  #ifdef DS1307
    Read_Time_DS1307();
  #endif
}
//--------------------
Output values to LCD
void Display_Time()
{
  Lcd_Chr(1, 6, (date / 10)   + 48);       // Print tens digit of date variable
  Lcd_Chr(1, 7, (date % 10)   + 48);   
// Print oness digit of date variable
  Lcd_Chr(1, 9, (month / 10)  + 48);
  Lcd_Chr(1,10, (month % 10)  + 48);
  Lcd_Chr(1,12, ((year / 1000) % 10) +
48);    // Print year
  Lcd_Chr(1,13, ((year / 100)  % 10) + 48);
  Lcd_Chr(1,14, ((year / 10)   % 10) + 48);
  Lcd_Chr(1,15, (year % 10)          + 48);
  Lcd_Chr(2, 6, (hours / 10)   + 48);
  Lcd_Chr(2, 7, (hours % 10)   + 48);
  Lcd_Chr(2, 9, (minutes / 10) + 48);
  Lcd_Chr(2,10, (minutes % 10) + 48);
  Lcd_Chr(2,12, (seconds / 10) + 48);
  Lcd_Chr(2,13, (seconds % 10) + 48);
}
//-----------------
Main procedure
void main() {
  Init_Main();               // Perform initialization
  while (1) {                // Endless loop
    Read_Time();             // Read time from RTC
    Display_Time();          // Prepare and display on LCD
    Delay_ms(950);          // Wait 1 second
  }
}
5. Percobaan SOUND (mikrokontroler mengeluarkan nada)
Skema Uji Coba Sound
sbit Sound_Play_Pin
at P2_0_bit;
/*
220.00 Hz A (La)
246.94 Hz B (Si)
261.63 Hz C (Do)
293.66 Hz D (Re)
329.63 Hz E (Mi)
349.23 Hz F (Fa)
392.00 Hz G (Sol)
*/
void main() {
 Sound_Init();
 while(1){
 Sound_Play(262, 250);  // Frequency = 262Hz, duration = 250ms DO
 Sound_Play(294, 250);  // Frequency = 294Hz, duration = 250ms RE
 Sound_Play(330, 250);  // Frequency = 330Hz, duration = 250ms MI
 Sound_Play(349, 250);  // Frequency = 349Hz, duration = 250ms FA
 Sound_Play(392, 250);  // Frequency = 392Hz, duration = 250ms SO
 Sound_Play(220, 250);  // Frequency = 220Hz, duration = 250ms LA
 Sound_Play(247, 250);  // Frequency = 247Hz, duration = 250ms SI
 }
}
semua file uji coba tersebut dapat di download disini







