ateym
Newbie level 3
Hi,
My following code is working on proteus correctly.
But when I loaded it on pic in real application.
I could not seen any thing..
What is my fault...
Regards
//Ali Asker
//2006
#include<16f74.h>
#fuses XT,PUT,NOWDT
#use delay(clock=4000000 )
#byte port_a=5
#byte port_b=6
#byte port_c=7
#byte port_d=8
#define INTS_PER_SECOND 14
#define SegmentPort port_b
byte seconds,minutes,hours,int_count;
int l_digit, h_digit;
byte digitValues[4]={ 0x00,
0x00,
0x00,
0x00};
byte digitValue1,digitValue2,digitValue3,digitValue4;
byte const tblSevenSegment[10]={//01234567
0b11111101, //0
0b01100000, //1
0b11011011, //2
0b11110010, //3
0b01100110, //4
0b10110111, //5
0b10111111, //6
0b11100000, //7
0b11111111, //8
0b11100111 //9
};
#bit ENABLE=7.0
#bit ENABLE2=7.1
#bit DATA=7.6
#bit A0=7.7
#bit A1=8.1
#bit A2=8.0
boolean ignition_flag=false;
boolean ignition_on=false;
#int_rtcc
clock_isr() {
if(--int_count==0) {
seconds++;
if(seconds>59)
{
seconds=0;
minutes++;
if(minutes>59)
{
minutes=0;
hours++;
if(hours>23)
{
hours=0;
}
}
}
int_count=INTS_PER_SECOND;
}
set_rtcc(0);
}
void set_259(byte z1,byte y1,byte x1,byte d1,byte en1,byte disable1);
void set_2592(byte z2,byte y2,byte x2,byte d2,byte en2,byte disable2);
void init_259(void);
void ignition_test(void);
void bin2bcd(int value);
void GetDigitValues(byte num1,byte num2);
void Display(void);
main()
{
set_tris_b(0x00);
set_tris_c(0x00);
set_tris_d(0x00);
int_count=INTS_PER_SECOND;
set_rtcc(0);
setup_counters (RTCC_INTERNAL, RTCC_DIV_256);
enable_interrupts (INT_RTCC);
enable_interrupts(GLOBAL);
init_259();
delay_ms(20);
for(;
{
GetDigitValues(minutes,seconds);
Display();
}
}
void set_259(byte z1,byte y1,byte x1,byte d1,byte en1,byte disable1)
{
A0=x1;
A1=y1;
A2=z1;
DATA=d1;
ENABLE=en1;
delay_us(50);
ENABLE=disable1;
DATA=0;
A0=0;
A1=0;
A2=0;
}
void set_2592(byte z2,byte y2,byte x2,byte d2,byte en2,byte disable2)
{
A0=x2;
A1=y2;
A2=z2;
DATA=d2;
ENABLE2=en2;
delay_us(50);
ENABLE2=disable2;
DATA=0;
A0=0;
A1=0;
A2=0;
}
void init_259(void)
{
set_259(0,0,0,0, 0,1); //0
set_259(0,0,1,0, 0,1); //1
set_259(0,1,0,0, 0,1); //2
set_259(0,1,1,0, 0,1); //3
set_259(1,0,0,0, 0,1); //4
set_259(1,0,1,0, 0,1); //5
set_259(1,1,0,0, 0,1); //6
set_259(1,1,1,0, 0,1); //7
set_2592(0,0,0,0, 0,1); //0
set_2592(0,0,1,0, 0,1); //1
set_2592(0,1,0,0, 0,1); //2
set_2592(0,1,1,0, 0,1); //3
set_2592(1,0,0,0, 0,1); //4
set_2592(1,0,1,0, 0,1); //5
set_2592(1,1,0,0, 0,1); //6
set_2592(1,1,1,0, 0,1); //7
}
//////////////////////////////////////////////////////////////////
//convert to bcd
////////////////////////////////////////////////////////////////////
void bin2bcd(int value)
{
h_digit=0;
if (value>=10)
{ do
{ value-=10;
h_digit++; }
while (value>=10); }
l_digit=value;
}
//putting bcd values into digitValues
/////////////////////////////////////////////////////////////////////////
void GetDigitValues(byte num1,byte num2)
{
bin2bcd(num2);
digitValues[0]=tblSevenSegment[l_digit];
digitValues[1]=tblSevenSegment[h_digit];
bin2bcd(num1);
digitValues[2]=tblSevenSegment[l_digit];
digitValues[3]=tblSevenSegment[h_digit];
}
////////////////////////////////////////////////////////////////////
//display on 4 7segment cc display
void Display(void)
{
byte k;
for (k=0;k<4;k++)
{
SegmentPort=(digitValues[k]);
if(k==0)
{
set_2592(1,0,1,0,0,1); //5 0 4
set_2592(1,0,0,1,0,1); //4 set 1
//set_2592(1,1,1,0,0,1); //7 0 2
// set_2592(1,1,0,0,0,1); //6 0 3
}
else if(k==1)
{
set_2592(1,0,0,0,0,1); //4 set 1
set_2592(1,1,1,1,0,1); //7 0 2
//set_2592(1,1,0,0,0,1); //6 0 3
//set_2592(1,0,1,0,0,1); //5 0 4
}
else if(k==2)
{
//set_2592(1,0,0,0, 0,1); //4 1
set_2592(1,1,1,0,0,1); //7 0 2
set_2592(1,1,0,1,0,1); //6 0 3
// set_2592(1,0,1,0, 0,1); //5 0 4
}
else if(k==3)
{
// set_2592(1,0,0,0, 0,1); //4 1
// set_2592(1,1,1,0, 0,1); //7 0 2
set_2592(1,1,0,0,0,1); //6 0 3
set_2592(1,0,1,1,0,1); //5 0 4
}
delay_ms(2);
// port_b=0;
}
}
My following code is working on proteus correctly.
But when I loaded it on pic in real application.
I could not seen any thing..
What is my fault...
Regards
//Ali Asker
//2006
#include<16f74.h>
#fuses XT,PUT,NOWDT
#use delay(clock=4000000 )
#byte port_a=5
#byte port_b=6
#byte port_c=7
#byte port_d=8
#define INTS_PER_SECOND 14
#define SegmentPort port_b
byte seconds,minutes,hours,int_count;
int l_digit, h_digit;
byte digitValues[4]={ 0x00,
0x00,
0x00,
0x00};
byte digitValue1,digitValue2,digitValue3,digitValue4;
byte const tblSevenSegment[10]={//01234567
0b11111101, //0
0b01100000, //1
0b11011011, //2
0b11110010, //3
0b01100110, //4
0b10110111, //5
0b10111111, //6
0b11100000, //7
0b11111111, //8
0b11100111 //9
};
#bit ENABLE=7.0
#bit ENABLE2=7.1
#bit DATA=7.6
#bit A0=7.7
#bit A1=8.1
#bit A2=8.0
boolean ignition_flag=false;
boolean ignition_on=false;
#int_rtcc
clock_isr() {
if(--int_count==0) {
seconds++;
if(seconds>59)
{
seconds=0;
minutes++;
if(minutes>59)
{
minutes=0;
hours++;
if(hours>23)
{
hours=0;
}
}
}
int_count=INTS_PER_SECOND;
}
set_rtcc(0);
}
void set_259(byte z1,byte y1,byte x1,byte d1,byte en1,byte disable1);
void set_2592(byte z2,byte y2,byte x2,byte d2,byte en2,byte disable2);
void init_259(void);
void ignition_test(void);
void bin2bcd(int value);
void GetDigitValues(byte num1,byte num2);
void Display(void);
main()
{
set_tris_b(0x00);
set_tris_c(0x00);
set_tris_d(0x00);
int_count=INTS_PER_SECOND;
set_rtcc(0);
setup_counters (RTCC_INTERNAL, RTCC_DIV_256);
enable_interrupts (INT_RTCC);
enable_interrupts(GLOBAL);
init_259();
delay_ms(20);
for(;
{
GetDigitValues(minutes,seconds);
Display();
}
}
void set_259(byte z1,byte y1,byte x1,byte d1,byte en1,byte disable1)
{
A0=x1;
A1=y1;
A2=z1;
DATA=d1;
ENABLE=en1;
delay_us(50);
ENABLE=disable1;
DATA=0;
A0=0;
A1=0;
A2=0;
}
void set_2592(byte z2,byte y2,byte x2,byte d2,byte en2,byte disable2)
{
A0=x2;
A1=y2;
A2=z2;
DATA=d2;
ENABLE2=en2;
delay_us(50);
ENABLE2=disable2;
DATA=0;
A0=0;
A1=0;
A2=0;
}
void init_259(void)
{
set_259(0,0,0,0, 0,1); //0
set_259(0,0,1,0, 0,1); //1
set_259(0,1,0,0, 0,1); //2
set_259(0,1,1,0, 0,1); //3
set_259(1,0,0,0, 0,1); //4
set_259(1,0,1,0, 0,1); //5
set_259(1,1,0,0, 0,1); //6
set_259(1,1,1,0, 0,1); //7
set_2592(0,0,0,0, 0,1); //0
set_2592(0,0,1,0, 0,1); //1
set_2592(0,1,0,0, 0,1); //2
set_2592(0,1,1,0, 0,1); //3
set_2592(1,0,0,0, 0,1); //4
set_2592(1,0,1,0, 0,1); //5
set_2592(1,1,0,0, 0,1); //6
set_2592(1,1,1,0, 0,1); //7
}
//////////////////////////////////////////////////////////////////
//convert to bcd
////////////////////////////////////////////////////////////////////
void bin2bcd(int value)
{
h_digit=0;
if (value>=10)
{ do
{ value-=10;
h_digit++; }
while (value>=10); }
l_digit=value;
}
//putting bcd values into digitValues
/////////////////////////////////////////////////////////////////////////
void GetDigitValues(byte num1,byte num2)
{
bin2bcd(num2);
digitValues[0]=tblSevenSegment[l_digit];
digitValues[1]=tblSevenSegment[h_digit];
bin2bcd(num1);
digitValues[2]=tblSevenSegment[l_digit];
digitValues[3]=tblSevenSegment[h_digit];
}
////////////////////////////////////////////////////////////////////
//display on 4 7segment cc display
void Display(void)
{
byte k;
for (k=0;k<4;k++)
{
SegmentPort=(digitValues[k]);
if(k==0)
{
set_2592(1,0,1,0,0,1); //5 0 4
set_2592(1,0,0,1,0,1); //4 set 1
//set_2592(1,1,1,0,0,1); //7 0 2
// set_2592(1,1,0,0,0,1); //6 0 3
}
else if(k==1)
{
set_2592(1,0,0,0,0,1); //4 set 1
set_2592(1,1,1,1,0,1); //7 0 2
//set_2592(1,1,0,0,0,1); //6 0 3
//set_2592(1,0,1,0,0,1); //5 0 4
}
else if(k==2)
{
//set_2592(1,0,0,0, 0,1); //4 1
set_2592(1,1,1,0,0,1); //7 0 2
set_2592(1,1,0,1,0,1); //6 0 3
// set_2592(1,0,1,0, 0,1); //5 0 4
}
else if(k==3)
{
// set_2592(1,0,0,0, 0,1); //4 1
// set_2592(1,1,1,0, 0,1); //7 0 2
set_2592(1,1,0,0,0,1); //6 0 3
set_2592(1,0,1,1,0,1); //5 0 4
}
delay_ms(2);
// port_b=0;
}
}