PIC16F codes convert to 18F

Status
Not open for further replies.

nicoise

Newbie level 5
Joined
Jul 31, 2012
Messages
9
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Visit site
Activity points
1,339
Can someone convert the codes from 16f to 18f ? I will use these 'Frequency Counter' codes in my PIC18F452. i will be very grateful




Code:
//---------------------------------------------
// FREQUENCY COUNTER
// www.circuit-projects.com	
// Y.Erol
//---------------------------------------------



#include <pic.h>
#include <delay.c>

__CONFIG(WDTDIS&PWRTEN&LVPDIS&XT);

unsigned char kontrol;

//---------------------------------------------
//	     CCP1 INTERRUPT
//---------------------------------------------
void interrupt interrupt(void){
TMR1H=0; TMR1L=0;
GIE=0;

control=1; 

CCP1IF=0;
GIE=1;
}

//---------------------------------------------
//		MAIN PROGRAM
//---------------------------------------------
main(void)
{
unsigned const char number[10]={0x3F,0x06,0x5B,
  	    0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};	
unsigned char select[4]={1,2,4,8};
unsigned int counter,value,remainder1,remainder2;
float frekans;
unsigned char a,i,display[5],data;

TRISA=0x00;
TRISB=0x08;
CMCON=0x07;

cont=0;
PORTA=0; PORTB=0

CCP1IE=1;

CCP1CON=0b00000110; 

T1CON=0b00100001;
		  
GIE=1;
PEIE=1;

for(;;){


counter=256*CCPR1H+CCPR1L;

if(control==1)frequency=100000000/counter;
if(kontrol==0)frequency=0;

if(counter<10000)frequency=0; 

control=0;

for(a=0;a<25;a++){ 

	value=(int)frequency;

	display[1]=value/1000;
	remainder1=value-display[1]*1000;

	display[2]=remainder1/100;
	remainder2=remainder1-display[2]*100;

	display[3]=remainder2/10;
	display[4]=remainder2-display[3]*10;

	
	for(i=0;i<4;i++){
		PORTB=0;
		PORTA=0;

		data=number[display[i+1]];
		PORTB=data&0x07;
		data=data<<1;
		PORTB=PORTB|(data&0xF0);

		PORTA=select[i];
		DelayMs(3);
	}
} 
}
}
 

Better start with schematics. 18f452 is a 40 pins microcontroller. What you keep what you cange in pin assignment?
 

See if this works.


Code C - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/* Main.c file generated by New Project wizard
 *
 * Created:   Fri May 10 2013
 * Processor: PIC18F452
 * Compiler:  MPLAB C18
 */
 
#include <p18f452.h>
#include <delays.h>
 
#pragma config WDT = OFF
#pragma config OSC = XT
#pragma config PWRT = ON
#pragma config BOR = OFF
#pragma config STVR = OFF
 
unsigned char kontrol;
unsigned int control;
 
//---------------------------------------------
//       CCP1 INTERRUPT
//---------------------------------------------
void interrupt(void){
    TMR1H=0; 
    TMR1L=0;
    INTCONbits.GIE=0;
    control = 1; 
    PIR1bits.CCP1IF=0;
    INTCONbits.GIE=1;
}
 
//---------------------------------------------
//      MAIN PROGRAM
//---------------------------------------------
void main()
{
    unsigned const char number[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; 
    unsigned char select[4]={1,2,4,8};
    unsigned int cont, counter,value,remainder1,remainder2;
    float frekans, frequency;
    unsigned char a,i,display[5],data;
 
    TRISA=0x00;
    TRISB=0x08;
    cont=0;
    PORTA=0; 
    PORTB=0;
    PIE1bits.CCP1IE = 1;
    CCP1CON=0b00000110; 
    T1CON=0b00100001;
          
    INTCONbits.GIE=1;
    INTCONbits.PEIE=1;
 
    for(;;){
 
 
        counter=256*CCPR1H+CCPR1L;
 
        if(control==1)frequency=100000000/counter;
        if(kontrol==0)frequency=0;
 
        if(counter<10000)frequency=0; 
 
        control=0;
 
        for(a=0;a<25;a++){ 
 
            value=(int)frequency;
            display[1]=value/1000;
            remainder1=value-display[1]*1000;
            display[2]=remainder1/100;
            remainder2=remainder1-display[2]*100;
            display[3]=remainder2/10;
            display[4]=remainder2-display[3]*10;
    
            for(i=0;i<4;i++){
                PORTB=0;
                PORTA=0;
 
                data=number[display[i+1]];
                PORTB=data&0x07;
                data=data<<1;
                PORTB=PORTB|(data&0xF0);
 
                PORTA=select[i];
                Delay10KTCYx(10);
            }
        } 
    }
}

 
Last edited:

thank you very much i created a hex file. i will design a circuit and try it in isis proteus. i will write if i have a problem
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…