Hi Tech i yeni kullanmaya basladım cok fazlada bildigim söylenemez ama program hexe çevirebiliyorum. asıl sorun şu benim internetten bulduğum ve tekrar derlediğim kod u hex e çeviremiyorum devamlı hata veriyor. PIC C ile yazılmış kod. Yardımcı olabilecek arkadaslar var mı acaba??
KOD:
#pragma chip PIC16F84
/*
SERIAL COMMUNICATION (RS232)
============================
Using 9600 baud, one stop bit, no parity.
Baudrate 9600 baud => 104.167 microsec. per bit
TMR0 counts each 8th microsec. => 13.02 steps per bit
______ _____ _____ _____ _____ _____ _____ _____ _____ _____
|_____|_____|_____|_____|_____|_____|_____|_____|_____|
Start bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7 Stop
NOTE: RS232 signal levels are different from the CMOS levels
used by the PIC device. A level converter is required:
Logic level CMOS RS232
1 (default) +Vcc -2.8V to -15V
0 0 V +2.8V to +15V
*/
#define _4_MHz /* 4 MHz system clock */
#define BPS9600 /* 9600 bits per sec */
//#define BPS4800 /* 4800 bits per sec */
//#define BPS2400 /* 2400 bits per sec */
//#define BPS1200 /* 1200 bits per sec */
// optional items
#define UseTMR0
#define USE_CONST
#pragma bit RS232_out @ PORTA.0
#pragma bit RS232_in @ PORTB.0
#pragma bit LED_Green @ PORTA.1
#pragma bit Button0 @ PORTB.4
#pragma bit Button1 @ PORTB.5
//UltraSonic Transmitter
//======================
#pragma bit US_TX1 @ PORTA.3
#pragma bit US_TX2 @ PORTA.2
//UltraSonic Transmitter Enable
// - 0 to enable,
// - 1 to disable.
//=============================
#pragma bit US_Enable_N @ PORTB.2
//UltraSonic Receiver
// - 0 to not received
// - 1 to first pulse received
//=============================
#pragma bit Echo_Recvd @ PORTB.1
#ifdef _4_MHz
#ifdef BPS9600
#define TimeStartbit 4 //9600
#define BitTimeIncr 13 //9600
#endif
#ifdef BPS4800
#define TimeStartbit 8 //4800
#define BitTimeIncr 26 //4800
#endif
#ifdef BPS2400
#define TimeStartbit 4 //2400
#define BitTimeIncr 13 //2400
#endif
#ifdef BPS1200
#define TimeStartbit 8 //1200
#define BitTimeIncr 26 //1200
#endif
#endif
unsigned long DelayCount;
char bitCount, limit;
char serialData;
char command; //first 4 bits are state
// state 0 - expected = 0xAA
// state 1 - expected = 0x55
// state 2 - command
// state 3 - bitwise complement of command
//MSB 4 bits are the actual command.
#ifdef _4_MHz
#ifdef UseTMR0
#define delayStart limit = TMR0;
#define delayOneBit \
limit += BitTimeIncr; \
while (limit != TMR0) \
;
#else
#define delayStart /* empty */
//9600
//====
#ifdef BPS9600
#define delayOneBit { \
char ti; \
ti = 30; \
do ; while( --ti > 0); \
nop(); \
} /* total: 5 + 30*3 - 1 + 1 + 9 \
= 104 microsec. at 4 MHz */
#endif
#ifdef BPS4800
#define delayOneBit { \
char ti; \
ti = 63; \
do ; while( --ti > 0); \
nop(); \
} /* total: 5 + 33*(3+9) - 1 + 1 + 9 \
= 416.6 microsec. at 4 MHz */
#endif
#ifdef BPS2400
#define delayOneBit { \
char ti; \
ti = 100; \
do {nop();} while( --ti > 0); \
nop(); \
} /* total: 5 + 33*(3+9) - 1 + 1 + 9 \
= 416.6 microsec. at 4 MHz */
#endif
#ifdef BPS1200
#define delayOneBit { \
char ti; \
ti = 137; \
do {nop(); nop(); nop(); } while( --ti > 0); \
nop(); \
} /* total: 5 + 33*(3+9) - 1 + 1 + 9 \
= 416.6 microsec. at 4 MHz */
#endif
#endif
#endif
void sendData( char dout)
/* sends one byte */
{
RS232_out = 0; /* startbit */
delayStart
for (bitCount = 9; ; bitCount--) {
delayOneBit
if (bitCount == 0)
break;
Carry = 1; /* incl. stopbit */
dout = rr( dout);
RS232_out = Carry;
}
}
#define NText 12
#ifndef USE_CONST
char text( char i)
{
skip(i);
#pragma return[NText] = "YANGIN VAR"
}
#else
const char text[NText] = "Datmobile US";
#endif
const char ResetMobile[5] = "ATZ\r\n"; //reset mobile
const char NoEcho[6] = "ATE0\r\n"; //no echo
const char FwdMsg[13] = "AT+CNMI=3,3\r\n"; //forward all messages to
mobile phone
const char SndMsg[12] = "AT+CMGS=23\r\n"; //send message to mobile
phone, AT+CMGS=%d\r\n...PDU..
const char Dial[8] = "ATD000\r\n"; //Dial number 000
const char text1[5] = "State";
const char SMSMsg[48] =
"0021000B815063141516F600000AD9A0F3987482AC416928";
/*
#define delay12usec { \
char titemp0; \
titemp0 = 30; \
do ; while( --titemp0 > 0); \
nop(); \
} /* total: 5 + 30*3 - 1 + 1 + 9 \
= 104 microsec. at 4 MHz */
*/
#define delay10usec { \
nop(); \
nop(); \
nop(); \
nop(); \
nop(); \
nop(); \
nop(); \
nop(); \
nop(); \
} /* to create a total of 12 sec, but, adjusted for the looping delay
at 4 MHz */
#define delay12usec { \
nop(); \
nop(); \
nop(); \
nop(); \
nop(); \
nop(); \
nop(); \
nop(); \
nop(); \
nop(); \
} /* to create a total of 12 sec, but, adjusted for the looping delay
at 4 MHz */
#define delay13usec { \
nop(); \
nop(); \
nop(); \
nop(); \
nop(); \
nop(); \
nop(); \
} /* to create a total of 13 sec, but, adjusted for the looping
delay at 4 MHz */
void send_40KHz(void)
{
char i;
i = 8;
do
{
PORTA = 0x05; //The RS232 Txd bit has to be high all the time
delay12usec;
PORTA = 0x09; //The RS232 Txd bit has to be high all the time
delay13usec;
} while ( --i > 0);
PORTA = 0x01;
}
void delay_1millisec(void)
{
int temp;
for (temp = 0; temp < 100; temp++)
{
delay10usec;
}
}
void delay_500millisec(void)
{
int16 temp;
for (temp = 0; temp < 500; temp++)
{
delay_1millisec();
}
}
void delay_200millisec(void)
{
int16 temp;
for (temp = 0; temp < 250; temp++)
{
delay_1millisec();
}
}
const char Digitext[10] = "0123456789";
void print_dec(unsigned char bytedata)
{
char i_temp, j_temp;
if (bytedata > 100)
{
i_temp = bytedata/100;
sendData(Digitext[i_temp]);
j_temp = (bytedata/10);
i_temp = j_temp % 10;
sendData(Digitext[i_temp]);
i_temp = bytedata % 10;
sendData(Digitext[i_temp]);
}
else if (bytedata > 10)
{
i_temp = bytedata/10;
sendData(Digitext[i_temp]);
i_temp = bytedata % 10;
sendData(Digitext[i_temp]);
}
else
{ //single digit
sendData(Digitext[bytedata]);
}
}
const char Digitext[10] = "0123456789";
void send_SMS(void)
{
int i;
for (i = 0; i < 12; i++)
{
sendData( SndMsg );
}
delay_500millisec();
for (i = 0; i < 48; i++)
{
sendData( SMSMsg );
}
sendData( 0x1A );
sendData( '\r' );
sendData( '\n' );
}
void main( void)
{
char i;
/* NOTE: some devices like the 16F877 have an on-chip analog to
digital converter with analog input pins that should be
configured. */
//ADCON1 = ..; // Refer to the data sheet for init values.
PORTB = 0x07; // xxxx xx11
TRISB = 0xFB; // Bit 2: US_Enable_N (output), Bit 1: Ultrasonic
Recvd Bit (Input), Bit 0 : Rxd_RS232 (Input)
PORTA = 0x01; // xxxx xx11
TRISA = 0xF0; // xxxx xx10
serialData = 0;
#ifdef BPS9600
OPTION = 2; // prescaler divide by 8, for 9600 bps
#endif
#ifdef BPS4800
#ifdef UseTMR0
OPTION = 2; // prescaler divide by 16, for 4800 bps
#else
OPTION = 2; // prescaler divide by 16, for 4800 bps
#endif
#endif
#ifdef BPS2400
OPTION = 4; // prescaler divide by 16, for 2400 bps
#endif
#ifdef BPS1200
OPTION = 4; // prescaler divide by 16, for 1200 bps
#endif
for (i = 0; i < NText; i++) {
#ifndef USE_CONST
sendData( text(i)); /* text string */
#else
sendData( text); /* text string */
#endif
}
while(1)
{
LED_Green = 1;
delay_500millisec();
LED_Green = 0;
delay_500millisec();
while (Button0 == 0)
{
LED_Green = 1;
delay_200millisec();
LED_Green = 0;
delay_200millisec();
}
}
}
Merhaba,
Bu gönderdiğini tek bir dosya halindemi yoksa ayrı ayrı dosyalarımı gönderdin. Eğer Tek bir dosya ise zaten çalışmaz. Çalışmamassının sebebi, hi-tech'den değil C nin yazım kurallarına hiç uyulmadığı için derlemez. Cünkü global değişkenler en başta tamınlanır ortada bir yerde global değişken tanımlayamassın.
Selamlar.
en azından derleyici hatalarını yazsaydınız daha kolay yardım edilirdi
program baştan sona mantık hataları ile dolu ve hi-teck in kendi kütüphanelerinde bulunan tanımlamalar ile bire bir çakışan yanlış tanımlamalar var...
Bu kodlar CC5X kodları.
Kodlar internette yanlış aktarılıyor.Yanlış kopyalanıyor.
Burayada yazım hataları olan kodlar aktarılmış.
Yönetici arkadaşlar bu konuyu CC5X altına alabilirlermi?