Você está na página 1de 7

/***************************************************** { segment = 0b01011011;

This program was produced by the break;

CodeWizardAVR V2.04.4a Advanced }

Automatic Program Generator case 3 :

© Copyright 1998-2009 Pavel Haiduc, HP InfoTech s.r.l. { segment = 0b01001111;

http://www.hpinfotech.com break;

case 4 :

Chip type : ATmega16 { segment = 0b01100110;

Program type : Application break;

AVR Core Clock frequency: 1.000000 MHz }

Memory model : Small case 5 :

External RAM size :0 { segment = 0b01101101;

Data Stack size : 256 break;

*****************************************************/ }

case 6 :

#include <mega16.h> { segment = 0b01111101;

break;

int ubahint7seg (int a) }

{ case 7 :

//prosedur untuk menampilkan angka pada 7 segment { segment = 0b00000111;

int segment; break;

switch (a) }

{ case 8 :

case 0 : { segment = 0b01111111;

{ segment = 0b00111111; break;

break; }

} case 9 :

case 1 : { segment = 0b01101111;

{ segment = 0b00000110; break;

break; }

} }

case 2 : return segment;


} }

int selector = 0; //variabel untuk selektor dalam pengubahan }


angka

int sdtk = 0; //variabel 1/100 dtk


// External Interrupt 1 service routine
int dtk = 0; //variabel penampung detik
interrupt [EXT_INT1] void ext_int1_isr(void)
int mnt = 0; //variabel penampung menit
{
int jam = 0; //variabel penampung jam
if (selector == 1) //menambahkan 1/100 dtk
int ovr0 = 0; //variabel penghitung overflow flag timer 0
{
// External Interrupt 0 service routine
sdtk++;
interrupt [EXT_INT0] void ext_int0_isr(void)
} else
{
{
selector++; //menambahkan selektor
if (selector == 2) //menambahkan dtk
if (selector == 5) //mengulangi selektor
{dtk++;}
{selector = 1;}
else
if (selector == 1) //memilih 1/100 dtk
{
{
if (selector == 3) //menambahkan menit
PORTB = 0b10000000; //menyalakan LED indikator 1
{mnt++;}
} else
else
{
{
if (selector == 2) //memilih dtk utk diubah
if (selector == 4) //menambahkan jam
{PORTB = 0b01000000;} //menyalakan LED indikator 2
{jam++;
else
}
{

if (selector == 3) //memilih menit utk diubah


}
{PORTB = 0b00100000;} //menyalakan LED indikator 3
}
else
}
{
}
if (selector == 4) //memilih jam utk diubah

{PORTB = 0b00010000; //menyalakan LED indikator 4


// External Interrupt 2 service routine
}
interrupt [EXT_INT2] void ext_int2_isr(void)

{
}
if (selector == 1) //mengurangi 1/100 detik
{ mnt++;

sdtk--; dtk = 0;

} else }

if (selector == 2) //mengurangi detik if (mnt == 60)

{dtk--;} {

else jam++;

{ mnt = 0;

if (selector == 3) //mengurangi menit }

{mnt--;}

else
if (jam == 24)
{
{
if (selector == 4) //mengurangi jam
jam = 0;
{jam--;
mnt = 0;
}
dtk = 0;

} }

void switchd ()

} {

} int sdtktemp1 = sdtk % 10; //variabel untuk menampung


satuan dan puluhan masing2

int sdtktemp2 = sdtk /10; //jenis (jam , menit,, detik dan


void convert () //prosedur untuk mengubah jam menit 1/100 detik)
detik dan 1/100 detik
int dtktemp1 = dtk % 10;
{
int dtktemp2 = dtk /10;
if (sdtk == 100)
int mnttemp1 = mnt % 10;
{
int mnttemp2 = mnt /10;
dtk++;
int jamtemp1 = jam % 10;
sdtk = 0;
int jamtemp2 = jam /10;
}
int bts = 19; //perhitungan cycle utk 5ms 19 kali
timer0 overflow

if (dtk == 60)
if (ovr0 <= (1*bts))
{
{ //1/100 satuan menyala }

PORTC = 0b10000000; else

PORTA = ubahint7seg(sdtktemp1); {

} if ((ovr0 > (6*bts)) && (ovr0 <= (7*bts)))


//menit puluhan menyala
else
{
{
PORTC = 0b00000100;
if ((ovr0 > (1*bts)) && (ovr0 <= (2*bts))) //1/100 puluhan
menyala PORTA = ubahint7seg(mnttemp2);

{ }

PORTC = 0b01000000; else

PORTA = ubahint7seg(sdtktemp2); {

} if ((ovr0 > (7*bts)) && (ovr0 <= (8*bts)))


//jam satuan menyala
else
{
{
PORTC = 0b00000010;
if ((ovr0 > (2*bts)) && (ovr0 <= (3*bts))) //detik
satuan menyala PORTA = ubahint7seg(jamtemp1);

{ }

PORTC = 0b00100000; else

PORTA = ubahint7seg(dtktemp1); {

} if ((ovr0 > (8*bts)) && (ovr0 <= (9*bts)))


//jam puluhan menyala
else
{
{
PORTC = 0b00000001;
if ((ovr0 > (3*bts)) && (ovr0 <= (4*bts))) //detik
puluhan menyala PORTA = ubahint7seg(jamtemp2);

{ }

PORTC = 0b00010000; }

PORTA = ubahint7seg(dtktemp2);

} }

else }

{ }

if ((ovr0 > (4*bts)) && (ovr0 <= (5*bts))) //menit }


satuan menyala
}
{
}
PORTC = 0b00001000;

PORTA = ubahint7seg(mnttemp1);
if (ovr0 == 9*bts) //reset harga ovr0 // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out
Func2=Out Func1=Out Func0=Out
{
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0
ovr0 = 0; State1=0 State0=0

} PORTA=0x00;

} DDRA=0xFF;

// Port B initialization

// Timer 0 overflow interrupt service routine // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out
Func2=In Func1=Out Func0=Out
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0
{ State1=0 State0=0

ovr0++; //increment setiap terjadi overflow PORTB=0x00;

switchd(); //pemanggilan prosedur switchd DDRB=0b11111111;

// Port C initialization

// Timer1 overflow interrupt service routine // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out
Func2=Out Func1=Out Func0=Out
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
// State7=T State6=T State5=T State4=T State3=T State2=T
{ State1=T State0=T

// Reinitialize Timer1 value PORTC=0x00;

TCNT1H=0xD8F0 >> 8; //setting nilai awal 8 bit atas DDRC=0xFF;

TCNT1L=0xD8F0 & 0xff; //setting nilai awal 8 bit bawah

sdtk++; //increment 1/100 dtk // Port D initialization

convert(); //pemanggilan prosedur convert // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out(int0)


Func2=Out(Int1) Func1=Out Func0=Out

// State7=T State6=T State5=T State4=T State3=T State2=T


} State1=T State0=T

PORTD=0x00;

// Declare your global variables here DDRD=0b11111111;

void main(void) // External Interrupt(s) initialization

{ // INT0: On

// Declare your local variables here // INT0 Mode: Low level

// INT1: On

// Input/Output Ports initialization // INT1 Mode: Low level

// Port A initialization // INT2: On


// INT2 Mode: Falling Edge OCR1AH=0x00;

GICR|=0xE0; OCR1AL=0x00;

MCUCR=0x05; OCR1BH=0x00;

MCUCSR=0x00; OCR1BL=0x00;

GIFR=0xE0;

// Timer/Counter 2 initialization

// Timer/Counter 0 initialization // Clock source: System Clock

// Clock source: System Clock // Clock value: Timer2 Stopped

// Clock value: 1000.000 kHz // Mode: Normal top=FFh

// Mode: Normal top=FFh // OC2 output: Disconnected

// OC0 output: Disconnected ASSR=0x00;

TCCR0=0x01; TCCR2=0x00;

TCNT0=0x00; TCNT2=0x00;

OCR0=0x00; OCR2=0x00;

// Timer/Counter 1 initialization // External Interrupt(s) initialization

// Clock source: System Clock // INT0: Off

// Clock value: 1000.000 kHz // INT1: Off

// Mode: Normal top=FFFFh // INT2: Off

// OC1A output: Discon. MCUCR=0x00;

// OC1B output: Discon. MCUCSR=0x00;

// Noise Canceler: Off

// Input Capture on Falling Edge // Timer(s)/Counter(s) Interrupt(s) initialization

// Timer1 Overflow Interrupt: On TIMSK=0x05;

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off // Analog Comparator initialization

// Compare B Match Interrupt: Off // Analog Comparator: Off

TCCR1A=0x00; // Analog Comparator Input Capture by Timer/Counter 1: Off

TCCR1B=0x01; ACSR=0x80;

TCNT1H=0xD8; SFIOR=0x00;

TCNT1L=0xF0; // Global enable interrupts

ICR1H=0x00; #asm("sei")

ICR1L=0x00; while (1){ } }


Implementasi melalui Proteus

Você também pode gostar