Veba
Üye
- Katılım
- 9 May 2007
- Mesajlar
- 15
- Puanları
- 1
- Yaş
- 40
//Main.h--------------------------------------------------------------------------------------------------------
#ifndef __MAIN_H
#define __MAIN_H
#include <p18f4550.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pwm.h> // PWM library functions
#include <delays.h> // Timer library functions
#include <usart.h> // USART library functions
#include <adc.h> // ADC library functions
#include <timers.h> // Timer library functions
//#include <portb.h>
//#include <string.h>
//---------------------------------------------------------------------
// Function Prototypes
//---------------------------------------------------------------------
#pragma code
void main (void);
void INITPic (void);
void InterruptHandlerLow(void);
void InterruptHandlerHigh(void);
//---------------------------------------------------------------------
//Config bits
//---------------------------------------------------------------------
#pragma config PLLDIV = 5, CPUDIV = OSC1_PLL2 ,USBDIV = 1
#pragma config FOSC = HSPLL_HS, FCMEN = OFF, IESO = OFF
#pragma config PWRT = ON, BOR = ON, BORV = 3, VREGEN = OFF
#pragma config WDT = OFF, WDTPS = 32768
#pragma config MCLRE = ON, LPT1OSC = OFF, PBADEN = OFF, CCP2MX = ON
#pragma config STVREN = ON, LVP = OFF, ICPRT = OFF, XINST = OFF, DEBUG = OFF
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF
#pragma config CPB = OFF, CPD = OFF
#pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF
#pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF
#pragma config EBTRB = OFF
//---------------------------------------------------------------------
// Structures
//---------------------------------------------------------------------
//---------------------------------------------------------------------
//Constant Definitions
//---------------------------------------------------------------------
#define TRUE 1
#define FALSE 0
#define INIT_TRISC 0b10111011 // 1-input, 0-output
#define INIT_PORTC 0xFF
#define INIT_TRISD 0b11101100
#define INIT_PORTD 0xFF
#define INIT_TRISB 0b11111111
#define INIT_PORTB 0x00
#define LED_1 PORTDbits.RD0
#define LED_2 PORTDbits.RD1
#define PIC_TX PORTCbits.RC6
#define PIC_RX PORTCbits.RC7
#define PIC_RE PORTDbits.RD4
#define OSC_SPEED 20000000 // 20 MHz(PIC oscillator speed)
#define USART_BAUD 9600 // BaudRate
#define BRGH_HIGH 0
#define RXBUF_SIZE 32
#define TXBUF_SIZE 32
#define STRLENGHT 64 // lenght of data buffer
#endif // end #ifndef
//Main.c----------------------------------------------------------------------------------------------------------------
#include "main.h" // this file is in my directory
#include <p18f4550.h> // tihs file is in C compiler directory
#include <usart.h> // tihs file is in C compiler directory
//ram char serial[] ="please write the number of Leds How many you want to switch on : 0, 1 or 2";
//ram char serial2[]="Leds were switched off!";
//ram char serial3[]="please write the value of Leds intensity percent: 0% --> 100% and then press enter: ";
//ram char serial4[]="Warning!!! You should enter the value for percent: ";
//ram char serial5[]="%";
//ram char serial6[]="Press DEL for quit this programme in anytime";
//---------------------------------------------------------------------
// Interrupts
//---------------------------------------------------------------------
// High priority interrupt vector .....................................
#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh (void)
{
_asm
goto InterruptHandlerHigh //jump to interrupt routine
_endasm
}
// Low priority interrupt vector ......................................
#pragma code InterruptVectorLow = 0x18
void InterruptVectorLow (void)
{
_asm
goto InterruptHandlerLow //jump to interrupt routine
_endasm
}
// Low priority interrupt routine .....................................
#pragma code
#pragma interrupt InterruptHandlerLow
void InterruptHandlerLow (void)
{
}
// High priority interrupt routine ....................................
#pragma code
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh (void)
{
}
//----------------------------------------------------------------------------
// Init
//----------------------------------------------------------------------------
//#pragma code
void INITPic (void)
{
TRISD = INIT_TRISD;
PIC_RE=0;
PORTD=0x00;
}
//---------------------------------------------------------------------
// Main Program
//---------------------------------------------------------------------
//#pragma code
void main (void)
{
int i,j,k,m,x,t,y=0,a=0,percent=0;
signed int z[5];
INITPic();
OpenUSART( USART_TX_INT_OFF &
USART_RX_INT_ON &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH,
129 );
//OpenTimer2(TIMER_INT_OFF & T2_PS_1_16& T2_POST_1_1 );
OpenPWM1(0xFF); //Configure the PWM Period 0xF0=50kHz
/*SetDCPWM1(0) for 0% initial duty cycle,
SetDCPWM1(512)for 50% initial duty cycle,
SetDCPWM1(1024)for100% initial duty cycle */
j=0x54;
k=0x55;
LED_1=1;
LED_2=1;
putrsUSART("Press DEL for quit this programme in anytime");
putrsUSART("please write the number of Leds How many you want to switch on : 0, 1 or 2: ");
while(ReadUSART()!= 0x7F) // Quit the programme (0x7F is ascii code for DEL)
{
if(DataRdyUSART())
{
x = ReadUSART();
if(x=='0')
{
PIC_RE=1;
WriteUSART( x );
PIC_RE=0;
putrsUSART("Leds were switched off!");
LED_1=0;
LED_2=0;
}
else if(x=='1')
{
PIC_RE=1;
WriteUSART( x );
for(i=0; i<1024; i++)
{
SetDCPWM1(i); //Set the duty-cycle 10bit
Delay10KTCYx(1);
if (i==1023)
{
PORTD=k;
k=~k;
}
}
PIC_RE=0;
putrsUSART("please write the value of Leds intensity percent: 0% --> 100% and then press enter: ");
while( a=0) // for checking the percent value
{
unsigned char cx;
cx=ReadUSART();
while(cx!=t) // t is ascii code number of "enter"
{
if( DataRdyUSART())
{
z[y]=ReadUSART();
y++;
if ( y>=4)
{
putrsUSART("Warning!!! You should enter the value for percent: ");
y=0; // for entering right percent value
a=0;
}
else if ( y<=3)
a=1; // entering is right
}
}
}
PIC_RE=1;
if ( z[2]!=-1) // calculation for the percent value
{
percent=100;
WriteUSART( percent );
}
else if ( z[2]=-1 && z[1]!=-1)
{
percent=((z[0]-30)*10) + ( z[1]-30);
WriteUSART( percent );
}
else if ( z[1]=-1 && z[0]!=-1)
{
percent=z[0]-30;
WriteUSART( percent );
}
PIC_RE=0;
putrsUSART("%");
m=percent*(1024/100); //calculate the duty-cycle
SetDCPWM1(m); //Set the duty-cycle 10bit
for(i=0; i<1024; i++)
{
SetDCPWM1(m); //Set the duty-cycle 10bit
Delay10KTCYx(1);
if (i==1022)
{
PORTD=k;
k=~k;
i=0;
}
}
}
else if(x=='2')
{
PIC_RE=1;
WriteUSART( x );
for(i=0; i<1024; i++)
{
SetDCPWM1(i); //Set the duty-cycle 10bit
Delay10KTCYx(1);
if (i==1023)
{
PORTD=j;
j=~j;
}
}
PIC_RE=0;
putrsUSART("please write the value of Leds intensity percent: 0% --> 100% and then press enter: ");
while( a=0) // for checking the percent value
{
unsigned char cx;
cx=ReadUSART();
while( cx!=t) // t is ascii code number of "enter"
{
if( DataRdyUSART())
{
z[y]=ReadUSART();
y++;
if ( y>=4)
{
putrsUSART("Warning!!! You should enter the value for percent: ");
y=0; // for entering right percent value
a=0;
}
else if ( y<=3)
a=1; // entering is right
}
}
}
PIC_RE=1;
if ( z[2]!=-1) // calculation for the percent value
{
percent=100;
WriteUSART( percent );
}
else if ( z[2]=-1 && z[1]!=-1)
{
percent=((z[0]-30)*10) + ( z[1]-30);
WriteUSART( percent );
}
else if ( z[1]=-1 && z[0]!=-1)
{
percent=z[0]-30;
WriteUSART( percent );
}
PIC_RE=0;
putrsUSART("%");
m=percent*(1024/100); //calculate the duty-cycle
SetDCPWM1(m); //Set the duty-cycle 10bit
for(i=0; i<1024; i++)
{
SetDCPWM1(m); //Set the duty-cycle 10bit
Delay10KTCYx(1);
if (i==1022)
{
PORTD=j;
j=~j;
i=0;
}
}
}
PIC_RE=0;
}
}
}
Arkadaşlar yukarıdaki programı 184550 için derlemeye çalışıyorum,fakat bir türlü başaramadı.Kodlarda bir hata yok fakat derleyemiyorum.Hi-tech universal tool suite,mplab c compiler (select tool language) bu ikisini denedim yine derlemiyor.Yardımcı olursanız sevinirim.
#ifndef __MAIN_H
#define __MAIN_H
#include <p18f4550.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pwm.h> // PWM library functions
#include <delays.h> // Timer library functions
#include <usart.h> // USART library functions
#include <adc.h> // ADC library functions
#include <timers.h> // Timer library functions
//#include <portb.h>
//#include <string.h>
//---------------------------------------------------------------------
// Function Prototypes
//---------------------------------------------------------------------
#pragma code
void main (void);
void INITPic (void);
void InterruptHandlerLow(void);
void InterruptHandlerHigh(void);
//---------------------------------------------------------------------
//Config bits
//---------------------------------------------------------------------
#pragma config PLLDIV = 5, CPUDIV = OSC1_PLL2 ,USBDIV = 1
#pragma config FOSC = HSPLL_HS, FCMEN = OFF, IESO = OFF
#pragma config PWRT = ON, BOR = ON, BORV = 3, VREGEN = OFF
#pragma config WDT = OFF, WDTPS = 32768
#pragma config MCLRE = ON, LPT1OSC = OFF, PBADEN = OFF, CCP2MX = ON
#pragma config STVREN = ON, LVP = OFF, ICPRT = OFF, XINST = OFF, DEBUG = OFF
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF
#pragma config CPB = OFF, CPD = OFF
#pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF
#pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF
#pragma config EBTRB = OFF
//---------------------------------------------------------------------
// Structures
//---------------------------------------------------------------------
//---------------------------------------------------------------------
//Constant Definitions
//---------------------------------------------------------------------
#define TRUE 1
#define FALSE 0
#define INIT_TRISC 0b10111011 // 1-input, 0-output
#define INIT_PORTC 0xFF
#define INIT_TRISD 0b11101100
#define INIT_PORTD 0xFF
#define INIT_TRISB 0b11111111
#define INIT_PORTB 0x00
#define LED_1 PORTDbits.RD0
#define LED_2 PORTDbits.RD1
#define PIC_TX PORTCbits.RC6
#define PIC_RX PORTCbits.RC7
#define PIC_RE PORTDbits.RD4
#define OSC_SPEED 20000000 // 20 MHz(PIC oscillator speed)
#define USART_BAUD 9600 // BaudRate
#define BRGH_HIGH 0
#define RXBUF_SIZE 32
#define TXBUF_SIZE 32
#define STRLENGHT 64 // lenght of data buffer
#endif // end #ifndef
//Main.c----------------------------------------------------------------------------------------------------------------
#include "main.h" // this file is in my directory
#include <p18f4550.h> // tihs file is in C compiler directory
#include <usart.h> // tihs file is in C compiler directory
//ram char serial[] ="please write the number of Leds How many you want to switch on : 0, 1 or 2";
//ram char serial2[]="Leds were switched off!";
//ram char serial3[]="please write the value of Leds intensity percent: 0% --> 100% and then press enter: ";
//ram char serial4[]="Warning!!! You should enter the value for percent: ";
//ram char serial5[]="%";
//ram char serial6[]="Press DEL for quit this programme in anytime";
//---------------------------------------------------------------------
// Interrupts
//---------------------------------------------------------------------
// High priority interrupt vector .....................................
#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh (void)
{
_asm
goto InterruptHandlerHigh //jump to interrupt routine
_endasm
}
// Low priority interrupt vector ......................................
#pragma code InterruptVectorLow = 0x18
void InterruptVectorLow (void)
{
_asm
goto InterruptHandlerLow //jump to interrupt routine
_endasm
}
// Low priority interrupt routine .....................................
#pragma code
#pragma interrupt InterruptHandlerLow
void InterruptHandlerLow (void)
{
}
// High priority interrupt routine ....................................
#pragma code
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh (void)
{
}
//----------------------------------------------------------------------------
// Init
//----------------------------------------------------------------------------
//#pragma code
void INITPic (void)
{
TRISD = INIT_TRISD;
PIC_RE=0;
PORTD=0x00;
}
//---------------------------------------------------------------------
// Main Program
//---------------------------------------------------------------------
//#pragma code
void main (void)
{
int i,j,k,m,x,t,y=0,a=0,percent=0;
signed int z[5];
INITPic();
OpenUSART( USART_TX_INT_OFF &
USART_RX_INT_ON &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH,
129 );
//OpenTimer2(TIMER_INT_OFF & T2_PS_1_16& T2_POST_1_1 );
OpenPWM1(0xFF); //Configure the PWM Period 0xF0=50kHz
/*SetDCPWM1(0) for 0% initial duty cycle,
SetDCPWM1(512)for 50% initial duty cycle,
SetDCPWM1(1024)for100% initial duty cycle */
j=0x54;
k=0x55;
LED_1=1;
LED_2=1;
putrsUSART("Press DEL for quit this programme in anytime");
putrsUSART("please write the number of Leds How many you want to switch on : 0, 1 or 2: ");
while(ReadUSART()!= 0x7F) // Quit the programme (0x7F is ascii code for DEL)
{
if(DataRdyUSART())
{
x = ReadUSART();
if(x=='0')
{
PIC_RE=1;
WriteUSART( x );
PIC_RE=0;
putrsUSART("Leds were switched off!");
LED_1=0;
LED_2=0;
}
else if(x=='1')
{
PIC_RE=1;
WriteUSART( x );
for(i=0; i<1024; i++)
{
SetDCPWM1(i); //Set the duty-cycle 10bit
Delay10KTCYx(1);
if (i==1023)
{
PORTD=k;
k=~k;
}
}
PIC_RE=0;
putrsUSART("please write the value of Leds intensity percent: 0% --> 100% and then press enter: ");
while( a=0) // for checking the percent value
{
unsigned char cx;
cx=ReadUSART();
while(cx!=t) // t is ascii code number of "enter"
{
if( DataRdyUSART())
{
z[y]=ReadUSART();
y++;
if ( y>=4)
{
putrsUSART("Warning!!! You should enter the value for percent: ");
y=0; // for entering right percent value
a=0;
}
else if ( y<=3)
a=1; // entering is right
}
}
}
PIC_RE=1;
if ( z[2]!=-1) // calculation for the percent value
{
percent=100;
WriteUSART( percent );
}
else if ( z[2]=-1 && z[1]!=-1)
{
percent=((z[0]-30)*10) + ( z[1]-30);
WriteUSART( percent );
}
else if ( z[1]=-1 && z[0]!=-1)
{
percent=z[0]-30;
WriteUSART( percent );
}
PIC_RE=0;
putrsUSART("%");
m=percent*(1024/100); //calculate the duty-cycle
SetDCPWM1(m); //Set the duty-cycle 10bit
for(i=0; i<1024; i++)
{
SetDCPWM1(m); //Set the duty-cycle 10bit
Delay10KTCYx(1);
if (i==1022)
{
PORTD=k;
k=~k;
i=0;
}
}
}
else if(x=='2')
{
PIC_RE=1;
WriteUSART( x );
for(i=0; i<1024; i++)
{
SetDCPWM1(i); //Set the duty-cycle 10bit
Delay10KTCYx(1);
if (i==1023)
{
PORTD=j;
j=~j;
}
}
PIC_RE=0;
putrsUSART("please write the value of Leds intensity percent: 0% --> 100% and then press enter: ");
while( a=0) // for checking the percent value
{
unsigned char cx;
cx=ReadUSART();
while( cx!=t) // t is ascii code number of "enter"
{
if( DataRdyUSART())
{
z[y]=ReadUSART();
y++;
if ( y>=4)
{
putrsUSART("Warning!!! You should enter the value for percent: ");
y=0; // for entering right percent value
a=0;
}
else if ( y<=3)
a=1; // entering is right
}
}
}
PIC_RE=1;
if ( z[2]!=-1) // calculation for the percent value
{
percent=100;
WriteUSART( percent );
}
else if ( z[2]=-1 && z[1]!=-1)
{
percent=((z[0]-30)*10) + ( z[1]-30);
WriteUSART( percent );
}
else if ( z[1]=-1 && z[0]!=-1)
{
percent=z[0]-30;
WriteUSART( percent );
}
PIC_RE=0;
putrsUSART("%");
m=percent*(1024/100); //calculate the duty-cycle
SetDCPWM1(m); //Set the duty-cycle 10bit
for(i=0; i<1024; i++)
{
SetDCPWM1(m); //Set the duty-cycle 10bit
Delay10KTCYx(1);
if (i==1022)
{
PORTD=j;
j=~j;
i=0;
}
}
}
PIC_RE=0;
}
}
}
Arkadaşlar yukarıdaki programı 184550 için derlemeye çalışıyorum,fakat bir türlü başaramadı.Kodlarda bir hata yok fakat derleyemiyorum.Hi-tech universal tool suite,mplab c compiler (select tool language) bu ikisini denedim yine derlemiyor.Yardımcı olursanız sevinirim.