Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
Szia!
Többször dolgoztam már 4550-el, de azért én is megnéztem az adatlapot... Csatlakozom MPi-hez: a 4550-ben csak a B és a D porton vannak belső. programból vezérelhető portszintű felhúzó ellenállások. A D port ilyen vezérlése pedig nem megy "direktben", hanem pontosan úgy, ahogy azt MPi írta.
Köszönöm a segítséget mindkettőtöknek, közben megoldottam úgy, hogy "NOMCLR"!
És igazatok van nem tud olyat a 18f4550, de azt is tudom honnan vettem. Ennek az adatlapjával meg volt nyitva egyszerre a 16f727 -nek az adatlapja is és éjszaka belekeveredtem. Köszi még egyszer!
Sziasztok!
Nemrég kezdtem el C-ben PIC-t programozni, és a megszakításkezelésnél elakadtam. (PIC16f84A) Megszakítás után szeretnék egy bitet törölni, de a fordító hibát ír ki.
Error 12 "int1.c" Line 21(1,11): Undefined identifier INTCONbits próbálkoztam így is:
eredmény: Undefined identifier INTCON Mit csinálok rosszul? Előre is köszönöm a segítséget !
Ilyenkor hasznos, ha megírod, hogy melyik fordító. Az INTCONbits alapján C18-al próbálkozol, ami viszont - mint ahogy a neve is mondja - csak 18F-hez való, tehát 16F-hez nem lehet használni.
Ha már ebbe a témába írtad, akkor valószínűleg CCS, abban INTCONbits biztosan nincs, ott úgy emlékszem, a fordító törli az INTF bitet magától, nem kell külön beleírni a kódba. Nézd meg a generált listing fájlt, abból egyértelműen kiderül. Az INTCON nem ismerete szintén a CCS-re utal. Sajnos ebben a fordítóban kézzel kell beírni a regisztereket, emiatt én inkább kerülném a helyedben... A Hi-Tech fordítói lettek a Microchip hivatalos C fordítói, inkább azokat használd.
Szia !
Szerintem hiányzik egy preprocessor direktíva, azért akad ki a fordító. Így csináld :
Így már tudsz hivatkozni az INTCON regiszter INTF bitjére. Erre azért van szükség, mert a CCS-C nem támogatja a közvetlen regisztercímzést. Ezzel az eljárással egy memóriacímet adtál az INTF bitnek. Tanulmányozgasd a PIC adatlapjában a register file map szekciót. Üdv. szerk.: lehet, hogy nem is a CCS-el küzdesz?
Igen azért ebbe a témába írtam mert CCS-t használok.
Az INTCONbits csak próbálkozás volt, nemtudtam , hogy csak a 18-hoz jó. A fordító törli az INTF bitet magától? Ezt én nem tapasztaltam, ezért akarom "kézzel" törölni.
Beírtam:
Ezt írja: A numeric expression must appear here
Tedd fel légy szíves a programot, úgy könnyebb lenne segíteni.
szerk.: Amikor hívatkozol az intf bitre, akkor azt így teszed: pl.: INTF = 0; ?
Igen, úgy hivatkozom.
A programot csatolom.
A #bit -et a #byte után tedd be, ne a megszakítást kiszolgáló rutinba! Felfigyeltem még egy problémára. A főprogram inicializálós részében a b port 0. bitje bemenetre van állítva, gondolom neked kimenetként kellene, akkor ezt módosítsd.
Nem néztem meg a Pic adatlapját, de lehet, hogy a 6 MHz sok lesz a kontrollernek. A #byte PORTB = 0x06 is javítsd. Szerk.: Ránéztem az adatlapra, bírni fogja a 6MHz-et, de a #fuses-nál az XT-t írd át HS-re
Első fontos szabály, hogy megszakításban késleltetéseket ne használj! Nem arra való. Kapcsolókkal (flagek) jelezd a főprogramnak az esemény megtörténtét és ott kezeld az eseményt.
Az INTF törlését elvégzi az interrupt kezelése. (Nézd meg fordítás után a lista fájlt, benne kell lennie.) A megszakítást lefutóélre állítottad, gondolom, külső felhúzó ellenállást raktál. 6 MHz-es órajel -> HS-re kell konfigurálni az oszcillátort. Idézet: „inicializálós részében a b port 0. bitje bemenetre van állítva” Az úgy jó, különben hogy nézi a külső megszakítást. A "#byte PORTB = 0x08" tényleg nem a PORTB-re mutat, de ez a sor fölösleges, mert a "PORTB"-t nem használja a programban.
Jajj !!
Ez igaz Kicsit megzavart a főprogramban az output_b(11111111)
A b port 0. bitje azért van bemenetre állítva mert azon van a nyomógomb ami a megszakítást végzi. Az igaz, hogy a PIC elméletileg csak 4 MHz-es, de azért volt 6-os mert, még azzal is kipróbáltam és fut. A #bit -et a #byte után tettem be és máris működik. Nagyon szépen köszönöm a segítséget.
Örülök, hogy végül is sikeredett a mutatvány. Elnézést a figyelmetlenségért, kicsit felületesen néztem át a kódodat. Ez van, ha az ember egyszerre több dologgal foglalkozik. Jó tanácsként javasolnám, hogy nézd át a CCS helpjét a direktívákkal kapcsolatban is.
Csak így tovább, sok sikert a programozásban !
Felesleges neked, kézzel birizgálnod az INTF bitet, a fordítás odateszi:
Tehát az a #BIT , és INTF = 0; teljesen felesleges. De ha neked így tetszik:
Nyomógombot külső megszakítással csak hardveres pergésmentesítéssel szabad kezelni, mert anélkül a kontroller egy gombnyomás helyett sok gombnyomásként fogja érezni. RC tag nem elég, hiszterézissel rendelkező kapu is kell utána az RC tag és a pic bemenete közé. Ezért célszerűbb (főleg több nyomógomb esetén) szoftveresen pergésmentesíteni. Keress rá itt a fórumon a PIC-es témákban, volt már ennek a megvalósításáról többször is szó.
Birka kérdésem van:
C18 compilerbe a LATA(hexában megadva melyik kimenet) parancs beállítja a kimeneteket nullába vagy 1-be, azonban ugyan ennek a csak ezt találtam output_low(pinX) vagy output_high(pinX). Nah én ugyanezt akarom elérni a CCS-ben, mi a megoldás?
Ne haragudj, de elég értelmetlen lett, amit írtál.
1. Idézet: „C18 compilerbe a LATA(hexában megadva melyik kimenet) parancs beállítja...” A LATA nem a C18 parancsa, hanem a PIC A portjának latch regisztere. Igazság szerint mindegy, hogy a PORTA-ba vagy a LATA-ba írunk, de a helyes szokás az, hogy a LAT-ba írunk és a PORT-ból olvasunk(Javaslom tanulmányozni az adatlapban a portok felépítését). A regiszter hexa kódját minden PIC adatlap tartalmazza! 2. A CCS-ben a output_low(pinx) vagy output_high(pinX) egy bitet változtat a porton. Ha az egész portot akarod egyben, akkor az output_x (value) függvény segít, ahol a x helyére a port betűjét kell írni. 3. Meg lehet oldani úgy is, hogy mutatóval hivatkozol a LATA-ra:
Idézet: „csak ezt találtam output_low(pinX) vagy output_high(pinX).” Olyat miért nem találtál, hogy: output_a(value), optput_b(value), output_c(value) stb.? Példa: OUTPUT_B(0xf0);
Sziasztok!
Nincs meg esetleg valakinek CCS Compilerhez az update amiben már a 18f14k50 is benne van? Nagyon jó lenne! Előre is köszi!
Bővebben: Link
Szerintem működik.
Jövök 1el! Vettem 3db ilyen ICt legyártottam a panelokat, minden kész és akkor látom, hogy nem támogatja a Compiler! Kicsit kétségbe estem! Tényleg köszi!
Tudom igazad van, de már annyira megszoktam ezt, meg ennek jó a helpje! Ezzel nem azt mondom, hogy a gyárinak rossz, mert annak még nem is láttam!
Sziasztok! Segítséget szeretnék kérni a köv. problémában a fájlmellékletben szereplő fájlt szeretném valahogy lefordítani .hex fájlba...pontossan mi is kell hozzá? Milyen programot kell alkalmaznom? Előre is köszi a válaszokat!
Ezt a www.microchip.com oldalról letölhető MPLAB fejlesztői programcsomag MPASM assembler fordítójával kellene megpróbálni. A CCS C fordítóhoz (amiről a topik szól) nem sok köze van...
Watt fórumtársunk honlapján találsz egy hasznos linkgyűjteményt.
CCS fiuk ismét erre jártak http://www.megaupload.com/?d=1CUR432H
|
Bejelentkezés
Hirdetés |