Training Elektronika Industri

No HP : 082322992336

Trainer Microcontroller

No HP : 082322992336

team electronics indonesia

No HP : 082322992336

Interface Electric car

No HP : 082322992336

Altium designer

No HP : 082322992336

Sabtu, 07 Februari 2015

Latihan UKK Elektronika Industri

CODING SEVEN SEGMENT BAHASA ASSEMBLER

SOAL/TUGAS

 Buatlah rangkaian kontrol display 7 segment dengan ketentuan
  • SW 1 ditekan maka program akan reset
  •  SW2 ditekan 7 segment menghitung 00 - 99 (7 segment tetap menyala walaupun SW2 sudah dilepas lagi. 
  • SW3 ditekan 7 segment menghitung 99 - 00 (7 segment tetap menyala walaupun SW3 sudah dilepas lagi)
Gambar 1. Gambar Rangkaian
 Gambar 1. Block diagram

Gambar 2. Diagram blok perencanaan

Gambar 2. Block diagram 


Contoh coding menggunakan M-IDE dan simulasi ISIS Proteus 7
password: faridberbagi

Coding M-IDE

 ;*******************************************************
;mendefisinikan i/o atau variable
;*******************************************************

        dispdata_satuan        equ    P2
        dispdata_puluhan    equ    P0
  
        My_number        equ    30H
      
        Org    0000H
;------------------------------------------------------
      
;*******************************************************
;MAIN PROGRAM (pembacaan kondisi tombol)
;*******************************************************
main_prog:    MOV    P0,#0C0H
        MOV    P2,#0c0H
        mov    My_number,#0
        JNB    P1.0,up_A
        JNB    P1.1,down_A
        sjmp    main_prog  
;------------------------------------------------------

;*******************************************************
;mejadikan number start 0 atau 99 sebelum di up atau down
;*******************************************************
up_A:        mov    a, My_number
        Cjne    A,#99, up
        mov    My_number,#0FFH
        sjmp    up
      
down_A:        mov    a, My_number
        Cjne    A,#0, down
        mov    My_number,#99H
        sjmp    down
;------------------------------------------------------

;*******************************************************
;running up
;*******************************************************
up:        inc     My_number        ;nilai ditambah
        JNB    P1.1,down
        Call    BCD
        call    delay
        mov    a, My_number
        Cjne    A,#99, up
        mov    My_number,#0FFH        ;jika nilai sama 00 maka nilai sama dengan 255
        SJMP    up      
;------------------------------------------------------

;*******************************************************
;running down
;*******************************************************
down:        dec     My_number        ;nilai pdikurangi
        JNB    P1.0,up
        Call    BCD
        call    delay
        mov    a, My_number
        Cjne    A,#00, down        ;jika nilai tidak sama 00 maka kembali ke down
        mov    My_number,#100        ;jika nilai sama 00 maka nilai sama dengan 100
        SJMP    down  
;------------------------------------------------------

;*******************************************************
;conversi hex to desimal
;*******************************************************      
BCD:        Mov     A,My_number
        Mov     B,#10
        Div    AB            ;pembagian A/10
        call    Seg_conv
        mov    dispdata_puluhan, A    ;puluhan
        mov    A,B
        call    Seg_conv
        mov    dispdata_satuan, A    ;satuan
        Ret
;------------------------------------------------------

;*******************************************************
;data aray seven segment
;*******************************************************
Seg_conv:    inc     A
        Movc    A, @A+PC
        RET
      
        DB    0C0H    ;angka 0
        DB    0F9H    ;angka 1
        DB    0A4H    ;angka 2
        DB    0B0H    ;angka 3
        DB    099H    ;angka 4
        DB    092H    ;angka 5
        DB    082H    ;angka 6
        DB    0F8H    ;angka 7
        DB    080H    ;angka 8
        DB    090H    ;angka 9
;------------------------------------------------------

;*******************************************************
;tunda
;*******************************************************
delay:        MOV    R5,#0ffh
        MOV    R6,#0ffH
        MOV    R7,#2
delay_loop:    DJNZ    R5,delay_loop
        DJNZ    R6,delay_loop
        DJNZ    R7,delay_loop
        RET
      
        END  
;------------------------------------------------------


 

Minggu, 13 April 2014

percobaan Push Button AVR ATmega8535


  PERCOBAAN PUSH BUTTON
-          Percobaan 1 (Menyalakan LED dengan Push Button)
#include <mega8535.h>
#include <delay.h>
void main(void)
{
PORTB=0x00;
DDRB=0xff;
PORTD=0x00;
DDRD=0x00;
while (1)
      {
        PORTB=~PIND;
      }
}
-          Percobaan 2 (Geser Led ke kanan dengan push button)
#include <mega8535.h>
#include <delay.h>
void main(void)
{
int a,i;
PORTB=0x00;
DDRB=0xff;
PORTD=0x00;
DDRD=0x00;
while (1)
      {
        if(PIND.0==0)
        {
         a=0x01;
         for(i=7;i>=0;i--)
         {
          a=((a>>1)|(a<<7));
          PORTB=a;
          delay_ms(30);
         }
        }
        if(PIND.0==1)
        {
         PORTB=0x00;
        }                                                                     
      }
}
-          Percobaan 3 (Geser Led ke kiri dengan push button)
#include <mega8535.h>
#include <delay.h>
void main(void)
{
int a,i;
PORTB=0x00;
DDRB=0xff;
PORTD=0x00;
DDRD=0x00;
while (1)
      {
        if(PIND.0==0)
        {
         a=0x7f;
        for(i=0;i<=7;i++)
        {
         a=((a<<1)|(a>>7));
         PORTB=~a;
         delay_ms(30);
        }
        }
        if(PIND.0==1)
        {
         PORTB=0x00;
        }
      }
}
-          Percobaan 4 (Geser Led kanan kiri dengan push button)
#include <mega8535.h>
#include <delay.h>

void main(void)
{
int a,i;
PORTB=0x00;
DDRB=0xff;
PORTD=0x00;
DDRD=0x00;
while (1)
      {
       if(PIND.0==0)
        {
         a=0x01;
         for(i=7;i>=0;i--)
         {
          a=((a>>1)|(a<<7));
          PORTB=a;
          delay_ms(30);
         }
        }
        if(PIND.0==1)
        {
         PORTB=0x00;
        }
  
        if(PIND.1==0)
        {
         a=0x7f;
         for(i=0;i<=7;i++)
         {
          a=((a<<1)|(a>>7));
          PORTB=~a;
          delay_ms(30);
         }
        }
        if(PIND.1==1)
        {
         PORTB=0x00;
        }
      }
}

Pecobaan seven segment AVR ATmega8535







PERCOBAAN SEVEN SEGMENT
-          Percobaan 1 (Seven Segment Counter Up)
#include <mega8535.h>
#include <delay.h>
int baca_digit1(int data)
{              
       int digit1=data;
       //////////////////////////////////////status digit1//////////////////////////////////////
       if (digit1==0) {PORTE.0=0;PORTE.1=0;PORTE.2=0;PORTE.3=0; goto selesai;} //digit1 0
       if (digit1==1) {PORTE.0=0;PORTE.1=0;PORTE.2=0;PORTE.3=1; goto selesai;} //digit1 1
       if (digit1==2) {PORTE.0=0;PORTE.1=0;PORTE.2=1;PORTE.3=0; goto selesai;} //digit1 2
       if (digit1==3) {PORTE.0=0;PORTE.1=0;PORTE.2=1;PORTE.3=1; goto selesai;} //digit1 3
       if (digit1==4) {PORTE.0=0;PORTE.1=1;PORTE.2=0;PORTE.3=0; goto selesai;} //digit1 4
       if (digit1==5) {PORTE.0=0;PORTE.1=1;PORTE.2=0;PORTE.3=1; goto selesai;} //digit1 5
       if (digit1==6) {PORTE.0=0;PORTE.1=1;PORTE.2=1;PORTE.3=0; goto selesai;} //digit1 6
       if (digit1==7) {PORTE.0=0;PORTE.1=1;PORTE.2=1;PORTE.3=1; goto selesai;} //digit1 7
       if (digit1==8) {PORTE.0=1;PORTE.1=0;PORTE.2=0;PORTE.3=0; goto selesai;} //digit1 8
       if (digit1==9) {PORTE.0=1;PORTE.1=0;PORTE.2=0;PORTE.3=1; goto selesai;} //digit1 9
       selesai:                                                                
       /////////////////////////////////////////////////////////////////////////////////////////
}
int baca_digit2(int data)
{                
       int digit2=data;
       /////////////////////////////////////status digit1//////////////////////////////////////
       if (digit2==0) {PORTE.4=0;PORTE.5=0;PORTE.6=0;PORTE.7=0; goto end;} //digit2 0     
       if (digit2==1) {PORTE.4=0;PORTE.5=0;PORTE.6=0;PORTE.7=1; goto end;} //digit2 1
       if (digit2==2) {PORTE.4=0;PORTE.5=0;PORTE.6=1;PORTE.7=0; goto end;} //digit2 2
       if (digit2==3) {PORTE.4=0;PORTE.5=0;PORTE.6=1;PORTE.7=1; goto end;} //digit2 3
       if (digit2==4) {PORTE.4=0;PORTE.5=1;PORTE.6=0;PORTE.7=0; goto end;} //digit2 4
       if (digit2==5) {PORTE.4=0;PORTE.5=1;PORTE.6=0;PORTE.7=1; goto end;} //digit2 5
       if (digit2==6) {PORTE.4=0;PORTE.5=1;PORTE.6=1;PORTE.7=0; goto end;} //digit2 6
       if (digit2==7) {PORTE.4=0;PORTE.5=1;PORTE.6=1;PORTE.7=1; goto end;} //digit2 7
       if (digit2==8) {PORTE.4=1;PORTE.5=0;PORTE.6=0;PORTE.7=0; goto end;} //digit2 8
       if (digit2==9) {PORTE.4=1;PORTE.5=0;PORTE.6=0;PORTE.7=1; goto end;} //digit2 9    
       end:
       //////////////////////////////////////////////////////////////////////////////////////
}
void main(void)
{
int digit1, digit2;
int a,b;
PORTE=0x00;
DDRE=0xff;
while (1)
      {
        for(a=0;a<=9;a++)
        {
         baca_digit1(a);
         delay_ms(30);
         for(b=0;b<=9;b++)
        {
         baca_digit2(b);
         delay_ms(30);
        }
       }
      }  
 }
-          Percobaan 2 (Seven Segment Counter Down)
#include <mega8535.h>
#include <delay.h>
int baca_digit1(int data)
{              
       int digit1=data;
       //////////////////////////////////////status digit1//////////////////////////////////////
       if (digit1==0) {PORTE.0=0;PORTE.1=0;PORTE.2=0;PORTE.3=0; goto selesai;} //digit1 0
       if (digit1==1) {PORTE.0=0;PORTE.1=0;PORTE.2=0;PORTE.3=1; goto selesai;} //digit1 1
       if (digit1==2) {PORTE.0=0;PORTE.1=0;PORTE.2=1;PORTE.3=0; goto selesai;} //digit1 2
       if (digit1==3) {PORTE.0=0;PORTE.1=0;PORTE.2=1;PORTE.3=1; goto selesai;} //digit1 3
       if (digit1==4) {PORTE.0=0;PORTE.1=1;PORTE.2=0;PORTE.3=0; goto selesai;} //digit1 4
       if (digit1==5) {PORTE.0=0;PORTE.1=1;PORTE.2=0;PORTE.3=1; goto selesai;} //digit1 5
       if (digit1==6) {PORTE.0=0;PORTE.1=1;PORTE.2=1;PORTE.3=0; goto selesai;} //digit1 6
       if (digit1==7) {PORTE.0=0;PORTE.1=1;PORTE.2=1;PORTE.3=1; goto selesai;} //digit1 7
       if (digit1==8) {PORTE.0=1;PORTE.1=0;PORTE.2=0;PORTE.3=0; goto selesai;} //digit1 8
       if (digit1==9) {PORTE.0=1;PORTE.1=0;PORTE.2=0;PORTE.3=1; goto selesai;} //digit1 9
       selesai:                                                                
       /////////////////////////////////////////////////////////////////////////////////////////
}
int baca_digit2(int data)
{                
       int digit2=data;
       ////////////////////////////////////status digit1//////////////////////////////////////
       if (digit2==0) {PORTE.4=0;PORTE.5=0;PORTE.6=0;PORTE.7=0; goto end;} //digit2 0     
       if (digit2==1) {PORTE.4=0;PORTE.5=0;PORTE.6=0;PORTE.7=1; goto end;} //digit2 1
       if (digit2==2) {PORTE.4=0;PORTE.5=0;PORTE.6=1;PORTE.7=0; goto end;} //digit2 2
       if (digit2==3) {PORTE.4=0;PORTE.5=0;PORTE.6=1;PORTE.7=1; goto end;} //digit2 3
       if (digit2==4) {PORTE.4=0;PORTE.5=1;PORTE.6=0;PORTE.7=0; goto end;} //digit2 4
       if (digit2==5) {PORTE.4=0;PORTE.5=1;PORTE.6=0;PORTE.7=1; goto end;} //digit2 5
       if (digit2==6) {PORTE.4=0;PORTE.5=1;PORTE.6=1;PORTE.7=0; goto end;} //digit2 6
       if (digit2==7) {PORTE.4=0;PORTE.5=1;PORTE.6=1;PORTE.7=1; goto end;} //digit2 7
       if (digit2==8) {PORTE.4=1;PORTE.5=0;PORTE.6=0;PORTE.7=0; goto end;} //digit2 8
       if (digit2==9) {PORTE.4=1;PORTE.5=0;PORTE.6=0;PORTE.7=1; goto end;} //digit2 9    
       end:
       ////////////////////////////////////////////////////////////////////////////////////////
}
void main(void)
{
int digit1, digit2;
int a,b;
PORTE=0x00;
DDRE=0xff;




while (1)
      {
        for(a=9;a>0;a--)
        {
         baca_digit1(a);
         for(b=9;b>=0;b--)
         {
         baca_digit2(b);
         delay_ms(30);
         }
       }
      }  
}

up down AVR ATmega16


 



#include <mega16.h>
#include <delay.h>
#define UP PIND.4
#define DOWN PIND.5
#define RESET PIND.6
// Declare your global variables here
char a=0;
//b=0;
void main(void)
{
// Declare your local variables here

PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0xFF;

PORTC=0x00;
DDRC=0xFF;


PORTD=0xFF;
DDRD=0x00;   

a=9;
PORTB=a;       
while (1)
      {
      // Place your code here
      if (UP==0){
         if (a<9){
         a++;  
         PORTB=a;
         delay_ms(500);
         }
      }   
     
      if (DOWN==0){     
      a--;   
          if (a==255){
          a=0;
          }
      PORTB=a;
      delay_ms(500);
      }
     
      if (RESET==0){
      a=0;  
      PORTB=a;
      PORTC=a;
      delay_ms(500);
      } 

      }
}