| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Проблем с компилатора ccs, mikroc http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=7407 |
Страница 1 от 1 |
| Автор: | kalinskia [ Нед Дек 20, 2009 7:21 pm ] |
| Заглавие: | Проблем с компилатора ccs, mikroc |
Здравейте на всички! Бихте ли ми помогнали с отстраняването на следната грешка: #include"16F876A.h" #use delay(clock=4000000) #fuses NOWDT,XT, NOPUT, NOPROTECT #define DS1307_SDA PIN_C4 #define DS1307_SCL PIN_C3 #use i2c(master, sda=DS1307_SDA, scl=DS1307_SCL) void read_ds1307(); int8 sec; void main() { while(1) { sec=read_ds1307(0); } } BYTE read_DS1307(byte address) { BYTE data; i2c_start(); i2c_write(0xd0); i2c_write(address); i2c_start(); i2c_write(0xd1); data=i2c_read(0); i2c_stop(); return(data); } Това е част от кода за RTC със ds1307. Компилатора (използвам mplab с CCS_PCWH_v4.023) ми изкарва грешка " Error 58 "C:\Users\Kalin\Desktop\parno.c" Line 16(18,19): Expecting a close paren 1 Errors, 1 Warnings." на реда " sec=read_ds1307(0);" Когато компилирам кода в CCS_PCWH_v4.023 без да го прекарвам през mplab няма проблеми. Къде греша? Благодаря ви предварително!!! |
|
| Автор: | perlsite [ Нед Дек 20, 2009 8:10 pm ] |
| Заглавие: | |
Незнам този компилатор до колко адекватни съобщения издава, но стандартният С език е чувствителен към малки/големи букви и има разлика между read_ds1307 и read_DS1307. Да не говорим, че прототипа тотално не съвпада. Edit: Всъщност съобщението си е точно. Първоначално не го прочетох внимателно а то показва, че компилатора очаква след отварящата скоба веднага затваряща, защото прототипа ти не посочва параметри. С други думи поправи си прототипа и преименувай или прототипа или реализацията на функцията да имат еднакви имена (ds vs DS). |
|
| Автор: | kalinskia [ Нед Дек 20, 2009 8:17 pm ] | |||||||||
| Заглавие: | ||||||||||
В конкретния случай не е от големината на буквите... |
||||||||||
| Автор: | perlsite [ Нед Дек 20, 2009 8:21 pm ] |
| Заглавие: | |
Виж едита ми - докато поправях си писал и ти мнение |
|
| Автор: | bobyper [ Нед Дек 20, 2009 8:26 pm ] | |||||||||
| Заглавие: | Re: Проблем с компилатора ccs | |||||||||
Под-добре смени версията че 4.023 е бая бъгава. Да не се натъкнеш на други бъгове. |
||||||||||
| Автор: | kalinskia [ Нед Дек 20, 2009 8:32 pm ] |
| Заглавие: | |
Бихте ли препоръчали читава версия и как да модифицирам кода за да се оправят нещата. |
|
| Автор: | Zeus [ Нед Дек 20, 2009 8:32 pm ] |
| Заглавие: | |
void main() { while(1) { sec=read_ds1307(0); } } Последната скоба ти затваря главната процедура main. После имаш още . Не трябва ли след последната скоба да свършват писаниците? P.S. Премести main() най-отдолу и пробвай пак да компилираш. |
|
| Автор: | kalinskia [ Нед Дек 20, 2009 8:59 pm ] |
| Заглавие: | |
Благодаря на всички Ви! Нещата се оправиха след като преместих main() най-отдолу, незнайно защо. |
|
| Автор: | perlsite [ Нед Дек 20, 2009 9:09 pm ] |
| Заглавие: | |
Защото прототипа ти е грешен, както ти обясних вече (ако ти е грешен прототипа кода в main() не може да намери използваната функция, но когато преместиш кода на main() след пълната дефиниция на ds1307(), то вече самият прототип не е нужен за да се компилира кода). В GCC, както и в VC този код гърми и се оправя както вече споменах, CCS може и да не е следва никакви стандарти... |
|
| Автор: | kalinskia [ Нед Дек 20, 2009 11:00 pm ] |
| Заглавие: | |
Няма да пускам нова тема...Можете ли да ми помогнете с примерен код за lcd hd44780 2X16 CCS?Ще ползвам такъв дисплей за визуализация на информация, но незнам как да го управлявам с тия компилатори. Досега съм се занимавал само с асемблер и ми е малко сложно с началото с това С. |
|
| Автор: | Zeus [ Нед Дек 20, 2009 11:23 pm ] |
| Заглавие: | |
В инсталационната директория на компилатора в папка Drivers намираш файла LCD.c и го включваш към твоята програма, като ползваш неговите функции. Разгледай го, в него е описано и на кой порт кои крачета се вързват от дисплея Нещо подобно: void main() { #include <LCD.c> ... lcd_init(); lcd_putc("\f"); lcd_gotoxy(1,1); lcd_putc("12345678"); } |
|
| Автор: | RM [ Сря Дек 23, 2009 9:47 pm ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
По принцип това е обявяване на функция която няма дефиниран, или не връща резултат.
Тука вече има дефиниран връщан резултат от тип BYTE (въпреки че не видях typedef или #byte) Мисля че щом е обявена функця, преди mine(){...} тялото на функцията може да бъде и след затварящите скоби на mine. Освен ако CCS са на друго мнение |
|||||||||||||||||||
| Автор: | sv_shady [ Чет Дек 24, 2009 1:35 pm ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Вярно е, че ако напишеш прототип на функцията преди main() можеш да сложиш където искаш, ССS си го поддържа това. Обаче тези две функции
са различни, макар и с едно име - нарича се предефиниране. Затова прототипа трябва да е
|
|||||||||||||||||||
| Автор: | kalinskia [ Пон Дек 28, 2009 1:34 am ] |
| Заглавие: | Сега проблем с mikroc |
Кода съм го изтеглил от техния сайт /* * Project name: RTC2_Read (Reading date/time data from DS1307 through I2C) * Copyright: (c) MikroElektronika, 2005-2009 * Revision History: 20090504: - Author: Igor Stancic; * Description: This project is simple demonstration how to read date and time from DS1307 RTC (real-time clock). The code MCU use MSSP module at PORTC. Date and time are printed at LCD. * Test configuration: MCU: PIC16F887 Dev.Board: EasyPIC5 Oscillator: HS, 8.000MHz Ext. Modules: IC RTC (DS1307), LCD 2x16 chars SW: mikroC PRO v1.65 * NOTES: - For proper I2C communication, pins on PORTC must be in the pull-up mode, RC3 - pin 6 DS1307 - SCL, RC4 - pin 5 DS1307 - SDA, and the LEDs on board switched OFF! */ unsigned char sec, min1, hr, week_day, day, mn, year; char *txt, tnum[4]; // LCD module connections sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB0_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; // End LCD module connections void Zero_Fill(char *value) { // fill text repesentation if (value[1] == 0) { // with leading zero value[1] = value[0]; value[0] = 48; value[2] = 0; } }//~ //--------------------- Reads time and date information from RTC (DS1307) void Read_Time(char *sec, char *min, char *hr, char *week_day, char *day, char *mn, char *year) { I2C1_Start(); I2C1_Wr(0xD0); I2C1_Wr(0); I2C1_Repeated_Start(); I2C1_Wr(0xD1); *sec =I2C1_Rd(1); *min =I2C1_Rd(1); *hr =I2C1_Rd(1); *week_day =I2C1_Rd(1); *day =I2C1_Rd(1); *mn =I2C1_Rd(1); *year =I2C1_Rd(0); I2C1_Stop(); }//~ //-------------------- Formats date and time void Transform_Time(char *sec, char *min, char *hr, char *week_day, char *day, char *mn, char *year) { *sec = ((*sec & 0x70) >> 4)*10 + (*sec & 0x0F); *min = ((*min & 0xF0) >> 4)*10 + (*min & 0x0F); *hr = ((*hr & 0x30) >> 4)*10 + (*hr & 0x0F); *week_day =(*week_day & 0x07); *day = ((*day & 0xF0) >> 4)*10 + (*day & 0x0F); *mn = ((*mn & 0x10) >> 4)*10 + (*mn & 0x0F); *year = ((*year & 0xF0)>>4)*10+(*year & 0x0F); }//~ //-------------------- Output values to LCD void Display_Time(char sec, char min, char hr, char week_day, char day, char mn, char year) { switch(week_day){ case 1: txt="Sun"; break; case 2: txt="Mon"; break; case 3: txt="Tue"; break; case 4: txt="Wed"; break; case 5: txt="Thu"; break; case 6: txt="Fri"; break; case 7: txt="Sat"; break; } LCD_Out(1,1,txt); Lcd_Chr(1, 6, (day / 10) + 48); // Print tens digit of day variable Lcd_Chr(1, 7, (day % 10) + 48); // Print oness digit of day variable Lcd_Chr(1, 9, (mn / 10) + 48); Lcd_Chr(1,10, (mn % 10) + 48); Lcd_Chr(1,15, year + 48); // Print year vaiable + 8 (start from year 2008) Lcd_Chr(2, 6, (hr / 10) + 48); Lcd_Chr(2, 7, (hr % 10) + 48); Lcd_Chr(2, 9, (min / 10) + 48); Lcd_Chr(2,10, (min % 10) + 48); Lcd_Chr(2,12, (sec / 10) + 48); Lcd_Chr(2,13, (sec % 10) + 48); }//~ //------------------ Performs project-wide init void Init_Main() { ANSEL=0; ANSELH=0; Lcd_Init(); // Initialize LCD Lcd_Cmd(_LCD_CLEAR); // Clear LCD display Lcd_Cmd(_LCD_CURSOR_OFF); // Turn cursor off I2C1_Init(100000); // initialize I2C LCD_Chr(1,8,'.'); LCD_Chr(1,11,'.'); txt = "Time:"; LCD_Out(2,1,txt); LCD_Chr(2,8,':'); LCD_Chr(2,11,':'); txt = "200"; LCD_Out(1,12,txt); LCD_Cmd(_LCD_CURSOR_OFF); }//~ //----------------- Main procedure void main() { Init_Main(); // perform initialization while (1) { Read_Time(&sec,&min1,&hr,&week_day,&day,&mn,&year); // read time from RTC(DS1307) Transform_Time(&sec,&min1,&hr,&week_day,&day,&mn,&year); // format date and time Display_Time(sec, min1, hr, week_day, day, mn, year); // prepare and display on LCD Delay_ms(1000); // wait 1s } }// но това което имам на симулация е :
Задал съм ds1307 да се Update–ва от pc-то...пробвах с най-различни компилатори на mikroc но резултатът беше един и същ. Можете ли да ми помогнете и този път? |
|
| Автор: | kalinskia [ Вто Дек 29, 2009 12:21 am ] |
| Заглавие: | |
Никой ли не може да помогне? Бях гледал, че и други хора са го имали този проблем, но така и не можах да разбера как е бил решен! |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|