Real time and embedded system lab exercise
Real time and embedded system lab exercise
1
Prepared by Dereje Saifu
Click on Next
Type your project name eg. Blinking_LED_PIC, Select the Project Folder path and
select Device name P16F877A
2
Prepared by Dereje Saifu
If the Microc pro for pic code is correct, the compiler generate
Blinking_LED_PIC.hex file in the defined path
For example the path of the above code in my project is
C:\Users\user\Documents\Real Time
Note:- Real Time is the folder created by myself for this project
Step 2
b. Then open proteus 8 professional schematic design
Click on File
New project wizard displayed
Type project name e.g Blinking_LED_Pic
Specify the path of your project e.g C:\Users\user\Documents\Real Time or
C:\Users\user\Documents or any other path
4
Prepared by Dereje Saifu
Click on program File select the hex file generated by Microc pro for pic compiler
Click on Select file name folder
5
Prepared by Dereje Saifu
c. t
6
Prepared by Dereje Saifu
do
PORTB.F0 = 1;
PORTB.F1 = 1;
}while(1);
7
Prepared by Dereje Saifu
3. Program 3: Clock
a. Microc pro for pic code
// LCD module connections
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;
int BCD2Binary(int a)
{
int r,t;
9
Prepared by Dereje Saifu
t = a & 0x0F;
r = t;
a = 0xF0 & a;
t = a >> 4;
t = 0x0F & t;
r = t*10 + r;
return r;
}
int second;
int minute;
int hour;
int hr;
int day;
int dday;
int month;
int year;
int ap;
void main()
{
I2C1_Init(100000); //DS1307 I2C is running at 100KHz
TRISA = 0x07;
PORTA = 0x00;
do
{
set = 0;
if(PORTA.F0 == 0)
{
Delay_ms(100);
if(PORTA.F0 == 0)
10
Prepared by Dereje Saifu
{
set_count++;
if(set_count >= 7)
{
set_count = 0;
}
}
}
if(set_count)
{
if(PORTA.F1 == 0)
{
Delay_ms(100);
if(PORTA.F1 == 0)
set = 1;
}
if(PORTA.F2 == 0)
{
Delay_ms(100);
if(PORTA.F2 == 0)
set = -1;
}
if(set_count && set)
{
switch(set_count)
{
case 1:
hour = BCD2Binary(hour);
hour = hour + set;
hour = Binary2BCD(hour);
if((hour & 0x1F) >= 0x13)
{
hour = hour & 0b11100001;
hour = hour ^ 0x20;
}
else if((hour & 0x1F) <= 0x00)
{
hour = hour | 0b00010010;
hour = hour ^ 0x20;
}
write_ds1307(2, hour); //write hour
break;
case 2:
minute = BCD2Binary(minute);
minute = minute + set;
if(minute >= 60)
11
Prepared by Dereje Saifu
minute = 0;
if(minute < 0)
minute = 59;
minute = Binary2BCD(minute);
write_ds1307(1, minute); //write min
break;
case 3:
if(abs(set))
write_ds1307(0,0x00); //Reset second to 0 sec. and start Oscillator
break;
case 4:
day = BCD2Binary(day);
day = day + set;
day = Binary2BCD(day);
if(day >= 0x32)
day = 1;
if(day <= 0)
day = 0x31;
write_ds1307(4, day); // write date 17
break;
case 5:
month = BCD2Binary(month);
month = month + set;
month = Binary2BCD(month);
if(month > 0x12)
month = 1;
if(month <= 0)
month = 0x12;
write_ds1307(5,month); // write month 6 June
break;
case 6:
year = BCD2Binary(year);
year = year + set;
year = Binary2BCD(year);
if(year <= -1)
year = 0x99;
if(year >= 0x50)
year = 0;
write_ds1307(6, year); // write year
break;
}
}
}
second = read_ds1307(0);
minute = read_ds1307(1);
hour = read_ds1307(2);
12
Prepared by Dereje Saifu
time[0] = BCD2UpperCh(hr);
time[1] = BCD2LowerCh(hr);
time[3] = BCD2UpperCh(minute);
time[4] = BCD2LowerCh(minute);
time[6] = BCD2UpperCh(second);
time[7] = BCD2LowerCh(second);
date[0] = BCD2UpperCh(day);
date[1] = BCD2LowerCh(day);
date[3] = BCD2UpperCh(month);
date[4] = BCD2LowerCh(month);
date[6] = BCD2UpperCh(year);
date[7] = BCD2LowerCh(year);
if(ap)
{
time[9] = 'P';
time[10] = 'M';
}
else
{
time[9] = 'A';
time[10] = 'M';
}
Lcd_out(1, 6, time);
Lcd_out(2, 6, date);
Delay_ms(100);
}while(1);
}
b. Proteus schematic design
Devices needed
24AA00
02013A220JAT2A
3005P-1-101
BATTERY
Button
CRYSTAL
13
Prepared by Dereje Saifu
DS1307
LM016L
MINRES47K
P16F877A
PULLDOWN
PULLUP
4. Program 4: Segment
a. Microc pro for pic code
unsigned int Hex(int a)
{
switch(a)
{
case 1: return 0x06;
case 2: return 0x5B;
case 3: return 0x4F;
case 4: return 0x66;
case 5: return 0x6D;
case 6: return 0x7D;
case 7: return 0x07;
case 8: return 0x7F;
case 9: return 0x6F;
14
Prepared by Dereje Saifu
d = 10;
}
if(s >= 999)
s = 0;
}
while(1);
}
b. Proteus schematic design
Devices needed
7SEG-COM-CATHODE
9C08052A1002FKHFT
02013A220JAT2A
BATTERY
BC548
CRYSTAL
P16F877A
//The End//
Thank you
17