PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Interrupt!



doolitle15
10.05.2008, 14:02
Hallo!

ich verwende einen PIC16F877, und ich möchte damit einen servo ansteuern. ich habe ein c programm geschriebn aber iregendwie funktioniert das nicht so wirklich wie ich mir das vorstelle!! (servo zuckt nur)

ich sende vom PC über die serielle Schnittstelle ein zeichen zum pic, je nachdem welches zeichen das ist soll der servo ganz nach links drehen oda in die mittelstellung oda ganz nach rechts drehen.
es soll ein interrupt ausgelöst werden wenn der pic etwas über rs232 empfängt!
kann mir bitte jemand sagen wo der fehler liegt!
oder mach ich das komplett falsch?? bitte um vorschläge , anmerkungen etc.


++++++++++++++++++++++++++++++++++++++++++
#include <16F877a.h>
#include <stdlib.h>
#use delay (clock=4000000)
#fuses XT, NOWDT, NOPROTECT, NOLVP
#use RS232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)


long position = 1000;
char empfangen;

// interrupt service routine
#INT_RDA NOCLEAR
long RS232_isr()
{
empfangen = getc();
if(empfangen == 'a')
position = 1000;
else if(empfangen == 's')
position = 1500;
else if(empfangen == 'd')
position = 2000;
printf("\f\rServo Position: %ld", position);
return position;
}
//*****************************
void main (void)
{
int8 i;
output_low(PIN_C2);
enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);

while(true)
{
output_high(PIN_C2);
delay_us(position);
output_low(PIN_C2);
delay_us(19000);
}
}
++++++++++++++++++++++++++++++++++++++++++

Geh', macht doch CODE-Tags rein ! (PicNick)


ich danke schon im Voraus

Mfg doolitle

djdune
12.05.2008, 11:48
void serial_isr() {
empfangen=getc();
}

void main() {

enable_interrupts(int_rda);
....
while(1)
{
...
}