Hi leute, ich bins mal wieder und habe ein PIC-problem:
ich hab die Lite-Version vom Hi-Tech C Compiler ( Microchp hat ja kein C16 Compiler). beutze einen PIC16F689
Der Compiler funktioniert gut, mein 16x2 LCD funktioniert wie es soll. sobald ich aber interrupts hinzufüge wie laut Handbuch angegeben, stürzt "cgpic.exe", ab und der build failed!
Bild hier
hier das Output-Window:
Code:
Build D:\Robotik\Assembler\PIC16F689\UART_C for device 16F689
Using driver C:\Program Files\HI-TECH Software\PICC\9.70\bin\picc.exe
Make: The target "D:\Robotik\Assembler\PIC16F689\UART_C.p1" is out of date.
Executing: "C:\Program Files\HI-TECH Software\PICC\9.70\bin\picc.exe" --pass1 D:\Robotik\Assembler\PIC16F689\UART_C.c -q --chip=16F689 -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
Executing: "C:\Program Files\HI-TECH Software\PICC\9.70\bin\picc.exe" -oUART_C.cof -mUART_C.map --summary=default --output=default UART_C.p1 --chip=16F689 -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
(1273) Omniscient Code Generation ist in der Lite Version nicht verfügbar (warning)
HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode) V9.70
Copyright (C) 2009 Microchip Technology Inc.
********** Build failed! **********
das "(1273) Omniscient Code Generation ist in der Lite Version nicht verfügbar (warning) " kommt jedesmal, auch bei erfolgreichem build. (wegen Lite-Version eben).
hier der Quellcode:
Code:
#include <htc.h>
__CONFIG(WDTDIS & XT & UNPROTECT );
#define _E RC5
#define _RS RC4
#define _D PORTC
void interrupt ISR();
void init(void);
void lcd_init();
void lcd_out(char);
void lcd_cmd(char);
void lcd_char(char);
void lcd_enter();
void UART_init();
void wait(int);
void main(){
init();
lcd_init();
UART_init();
GIE=1;
while(1){}
}
void interrupt ISR(void){
if (RCIE && RCIF) {
lcd_char(RCREG);
RCIF=0;
}
return;
}
void init(){
TRISC=0;
ANSEL=0;
ANSELH=0;
}
void UART_init(){
TXSTA=0x20;
RCSTA=0x90;
SPBRG=0x0C;
RCIE=1;
PEIE=1;
}
// --------------------------------------------------------------------
// ---------------------ab hier uninterressant----------------------
// --------------------------------------------------------------------
void lcd_init(){
_D=0;
lcd_cmd(0x28);
lcd_cmd(0x0F);
lcd_cmd(0x01);
wait(100);
lcd_cmd(0x06);
lcd_char('O');
lcd_char('K');
return;
}
void lcd_cmd(char Data){
_RS=0;
lcd_out(Data);
return;
}
void lcd_char(char Data){
_RS=1;
lcd_out(Data);
return;
}
void lcd_out(char Data){
char Data2=Data&0xF0;
_D=_D&0xF0;
Data2=Data2>>4;
_D=_D=Data2|_D;
lcd_enter();
_D=_D&0xF0;
_D=_D|(Data&0x0F);
lcd_enter();
return;
}
void lcd_enter(){
char pause=0x1F;
_E=1;
for(pause=0x1F;pause>0;pause--){
}
_E=0;
return;
}
void wait(int Zeit){
int i;
for(i=0;i<Zeit;i++){
asm("nop");
}
}
im Handbuch für den C-Compiler steht folgendes Beispiel:
Code:
int tick_count;
void interrupt tc_int(void)
{
if (T0IE && T0IF) {
T0IF=0;
++tick_count;
return;
}
// process other interrupt sources here
}
hat jemand schonmal probleme bei Interrupts gehabt mit dem Hi-Tech C-compiler ?? bin für Ideen und Anregungen offen..
Gruß Jango
Lesezeichen