pomoč pri učinkoviti C18 kodo

S

shaneelal

Guest
Nisem doživela dal drugih pisnih napotkov code.I "m uporabo C18 prevajalnik in PIC 18f452.I uporablja priročnik, da mi pomaga. Ta oznaka je bil napisan prejeti prekinitev vsakih 2 sekundi od 555 timer. Ko prekine je prejel , odčitki dveh senzorjev, ki so sprejete z ADC. wirespeed je tudi bere iz druge naprave. Ti rezultati so nato prikazani na LCD-zaslon, kot tudi tv zaslona. Jaz sem novi v interrupts.
Funkcija ISR je vrsta dolga, je predolgo?
Kako lahko vložim koda bolj učinkovita?Ali lahko pišem nekaj konstant k ROM PIC?Ali ISR funkcijo, ustanovljen pravilno?Če je kaj narobe mi prosim povejte.Vsi nasveti bi bili zelo uvaževati.

Code:

# include <p18f452.h>

# include <xlcd.h>

# include <delays.h>

# include <stdlib.h>

# include <usart.h>

# include <portb.h>

# include <adc.h>

# include <string.h>/ * Bits Set konfiguracija za uporabo z ICD2 / PICDEM2 PLUS Demo Board:

* - Set XT oscilator

* - Onesposobiti watchdog timer

* - Onesposobiti nizko napetost programiranja

* /

# pragma romdata CONFIG

_CONFIG_DECL (_CONFIG1H_DEFAULT & _OSC_XT_1H,

_CONFIG2L_DEFAULT,

_CONFIG2H_DEFAULT & _WDT_OFF_2H,

_CONFIG3H_DEFAULT,

_CONFIG4L_DEFAULT & _LVP_OFF_4L,

_CONFIG5L_DEFAULT,

_CONFIG5H_DEFAULT,

_CONFIG6L_DEFAULT,

_CONFIG6H_DEFAULT,

_CONFIG7L_DEFAULT,

_CONFIG7H_DEFAULT);

# pragma romdataSistem void (void);void DelayFor18TCY (void)

(

Nov ();

Nov ();

Nov ();

Nov ();

Nov ();

Nov ();

Nov ();

Nov ();

Nov ();

Nov ();

Nov ();

Nov ();

)void DelayPORXLCD (void)

(

Delay1KTCYx (60) / / Delay of 15ms

return;

)void DelayXLCD (void)

(

Delay1KTCYx (20) / / Delay of 5ms

return;

)void main ()

(

/ / config RBO za interrupts

OpenRB0INT (PORTB_CHANGE_INT_ON & PORTB_CHANGE_INT_ON & RISING_EDGE_INT & PORTB_PULLUPS_ON);

/ / Configure zunanji LCD

OpenXLCD (FOUR_BIT & LINES_5X7); / / štiri bit mode, multiple line zaslon/ / Configure USART, DOUBLE CHECK

/ / prekine za prenos in o prejemu

/ / asinhroni način

/ * / / 8-bit transmisson

/ / ne prejemajo nič, naj grem ven??

/ / spbrg = 25 * /

OpenUSART (USART_TX_INT_OFF & & USART_RX_INT_OFF

USART_ASYNCH_MODE & & USART_EIGHT_BIT

USART_BRGH_HIGH &

USART_CONT_RX, 25);OpenADC (ADC_FOSC_8 & & ADC_RIGHT_JUST

ADC_8ANA_0REF, ADC_CH0 &

ADC_INT_OFF);/ * OpenADC (ADC_FOSC_8 & & ADC_RIGHT_JUST

ADC_8ANA_0REF & & ADC_CH1

ADC_INT_OFF); * /INTCONbits.GIE = 1; / / moram dati, da od pg58

while (1)

())# pragma prekinitev sistem / / shraniti = PRODH, PRODL, oddelek ( ". tmpdata")

Sistem void (void)

(int current_adc;

int voltage_adc;

int napetosti;

int current;

char hitrost [7];

char voltage_str [7];

char current_str [7];

int convFactor = (5,0 / 1024);

char sp_units [10] = "mm / sec";

char vol_units [10] = "voltov";

char cur_units [10] = "Amps";

char dobrodošli [20] = "Welding Monitor";

char cursorL1 [5] = "(A17";

char cursorL2 [7] = "(C0202";

char cursorL5 [7] = "(C0204";

char cursorL7 [7] = "(C0206";

char cursorL9 [9] = "(C0209";INTCONbits.INT0IE = 0; / / stop prekinja stalno

SetChanADC (ADC_CH0); / / select napetost kanal

Delay10TCYx (3);

ConvertADC ();

while (BusyADC ());

voltage_adc = ReadADC ();

napetosti = (voltage_adc * convFactor * 100);

SetChanADC (ADC_CH1); / / select trenutni kanal

Delay10TCYx (3);

ConvertADC ();

while (BusyADC ());

current_adc = ReadADC ();

trenutni = (current_adc * 1,2 * convFactor * 600);

while (! DataRdyUSART ());

getsUSART (hitrost, 7); / / dobi hitrost

while (BusyUSART ()); / / TEST da vidim, če lahko odstranite

/*************** pišite na LCD *******************/

while (BusyXLCD ());

SetDDRamAddr (0x1C);

while (BusyXLCD ());

putsXLCD (sp_units);

while (BusyXLCD ());

SetDDRamAddr (0x14);

while (BusyXLCD ());

putsXLCD (hitrost);

while (BusyXLCD ());

SetDDRamAddr (0x48);

while (BusyXLCD ());

putsXLCD (cur_units);

while (BusyXLCD ());

SetDDRamAddr (0x40);

itoa (sedanjih, current_str);

while (BusyXLCD ());

putsXLCD (current_str);

while (BusyXLCD ());

SetDDRamAddr (0x08);

while (BusyXLCD ());

putsXLCD (vol_units);

while (BusyXLCD ());

SetDDRamAddr (0x00);

itoa (napetost, voltage_str);

while (BusyXLCD ());

putsXLCD (voltage_str);

/************ pišite na tv zaslona *************************/

while (BusyUSART ());

putsUSART (cursorL1); / / jasen zaslon

while (BusyUSART ());

putsUSART (cursorL2);

while (BusyUSART ());

putsUSART (dobrodošli);

while (BusyUSART ());

putsUSART (cursorL5);

while (BusyUSART ());

putsUSART (hitrost);

while (BusyUSART ());

putsUSART (sp_units);

putsUSART (cursorL7);

while (BusyUSART ());

putsUSART (current_str);

while (BusyUSART ());

putsUSART (cur_units);

putsUSART (cursorL9);

while (BusyUSART ());

putsUSART (voltage_str);

while (BusyUSART ());

putsUSART (vol_units);

)
 
Nisem hotel, da začnete nov sukanec, tako da sem asking tukaj.
V C18 prevajalnik, če ne uporabljate "# define"?
Kako napisati konstante za PIC18f452 za uporabo ROM C18 prevajalnik?
Ali lahko funkcijo ISR je brati konstante iz ROM-a na PIC?
Prosim pomoč, če boste lahko, vem, da se lahko zdi kot preprosta vprašanja za vas, ampak jaz bi res rad vedel.

 

Welcome to EDABoard.com

Sponsor

Back
Top