Liviu M Postat Februarie 14, 2015 Partajează Postat Februarie 14, 2015 (editat) Pentru ca Vezi Muti arde de dorinta de a vedea codul sursa al unui proiect al unui membru de pe forum incat polueaza toate topicurile care-i ies in fata, am decis sa-i satisfac dorinta, in speranta ca va trece la faza urmatoare a activitatii pe forum, respectiv postarea utila. Asadar, mai jos e codul care aprinde/stinge un led conectat la portul RA0 al unui pic16f627. Toate porturile sunt configurate ca iesiri, asa ca atentie mare cum le conectezi. Codul e scris in xc8, compilatorul de la microchip. Daca e nevoie de mai multe explicatii, raspund la intrebari. Pana atunci... PS Atentie mare la copyright, da? /* * File: ledVM.c * Author: liviu * * Created on February 14, 2015, 4:00 PM * Copyright (c) Liviu M ledVM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. ledVM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. For the GNU General Public License see <http://www.gnu.org/licenses/>. */// Bitii de configurare; generati automat de mplabx#pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)#pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR)#pragma config BOREN = ON // Brown-out Detect Enable bit (BOD enabled)#pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has PGM function, low-voltage programming enabled)#pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off)#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)#include <xc.h> //fisier header pe baza caruia XC ajunge la definitiile specifice fiecarui controller in parte#define _XTAL_FREQ 4000000 //frecventa oscilatorului intern. Necesara functiei/macro-ului __delay_ms()void chipInit(void); //functie in care realizez initializarea circuitului - directie pini, comparator... // aici o declar ca sa o pot folosi in main, definitia (implementarea) fiind facuta dupa main()/* * */void main(void) { //functia main. Nu trebuie sa lipseasca din nici un program chipInit(); //functia mentionata anterior while(1){ //bucla infinita PORTAbits.RA0 ^= 1; //XOR logic. (xor 1) e operatia de negare/inversare a unui bit __delay_ms(300); }}void chipInit(void){ TRISA = 0; //all outputs TRISB = 0; //all outputs CMCON = 7; //comparator disabled PORTA=0; //all low PORTB=0; //all low} Editat Februarie 14, 2015 de Liviu M 1 Link spre comentariu
bercioiu Postat Februarie 14, 2015 Partajează Postat Februarie 14, 2015 Cred ca urmatorul raspuns al userului mentionat de tine va contine rugamintea compilarii softului in hex . Link spre comentariu
Liviu M Postat Februarie 14, 2015 Autor Partajează Postat Februarie 14, 2015 (editat) Ai dreptate, stiam eu ca lipseste ceva. PS Trebuie stearsa extensia .txt, desigur. led.X.production.hex.txt Editat Februarie 14, 2015 de Liviu M Link spre comentariu
bercioiu Postat Februarie 14, 2015 Partajează Postat Februarie 14, 2015 Gata, l-a descarcat :-))))))))))) Link spre comentariu
Liviu M Postat Februarie 14, 2015 Autor Partajează Postat Februarie 14, 2015 (editat) Nu, eu am fost. Am testat sa vad daca merge. Ups, vad ca n-am fost singurul. Editat Februarie 14, 2015 de Liviu M Link spre comentariu
rosmarin Postat Februarie 14, 2015 Partajează Postat Februarie 14, 2015 Desigur ca oamenii sunt diferiti,diferit pregatiti.Ma refer la raportul pregatire/educatie.Nu ma asteptam ! ! Dar metoda folosita de dvs mi se pare cea mai intelepta si mai educativa.Un rol important il are conducerea forumului.O fi democratie si... dar pana aici! Nu putem calca cu bocancii nici munca unui om care este si de initiativa pe forum GANMARK, cu realizari frumoase si preocupat ca si noi cei din ultimele esaloane sa ne bucuram de aceste realizari si siguranta unui proiect ca " functioneaza sigur" Dl Gan Mark rog sa primiti scuze de la un om de pe marginea drumului, de si nu acel om trebuia sa faca acest pas. Link spre comentariu
GanMark Postat Februarie 15, 2015 Partajează Postat Februarie 15, 2015 multumesc pentru postarea codului sursa,acum sper ca e satisfacut...si va realiza un proiect...nu sunt suparat pe el,pacat ca scrie repede fara sa gandeasca... Link spre comentariu
Vezi Muti Postat Februarie 15, 2015 Partajează Postat Februarie 15, 2015 (editat) o prima intrebare am a pune: care sa fie motivul pentru care functia delay ({singura omisa(intentionat? de la comentare)}); incepe cu "__" ? si sigur mai discutam. !gresit. ce mult este de comentat pe tema codului sursa postat mai sus. atat de simplu... Editat Februarie 15, 2015 de Vezi Muti Link spre comentariu
bercioiu Postat Februarie 15, 2015 Partajează Postat Februarie 15, 2015 (editat) VM...si sigur mai discutam. !gresit." "!gresit" inseamna corect, nu? Editat Februarie 15, 2015 de bercioiu Link spre comentariu
Mircea Postat Februarie 15, 2015 Partajează Postat Februarie 15, 2015 Orice exemplu, fie el simplul blink a led, e util.Am si eu o intrebare sau mai multe: de ce declari de 2 ori chipInit? De ce prima oara nu contine nimic? De ce a doua oara e pusa dupa bucla principala? Daca raspunsul e: asta e marca Liviu M, atunci nu mai e nevoie de raspuns.Sunt obisnuit cu basic unde procedurile sunt declarate inaintea programului propriu-zis. Cum uneori descopar limitari in basic, poate intr-o zi voi schimba la C. Si raspunsul tau poate fi folositor, oricat de simpla si evidenta ar fi explicatia. Link spre comentariu
Vezi Muti Postat Februarie 15, 2015 Partajează Postat Februarie 15, 2015 (editat) bercioiu: asta a fost intrebarea mea? thunderer: te rog sa ai putina rabdare. plecand de la codul sursa postat "la misto" mai sus, multe vei avea de aflat. inclusiv raspunsul la dilema ta cu declararea functiei chipInit.promit:) Editat Februarie 15, 2015 de Vezi Muti Link spre comentariu
bercioiu Postat Februarie 15, 2015 Partajează Postat Februarie 15, 2015 bercioiu: asta a fost intrebarea mea? Nu, asta a fost intrebarea mea, daca nu stii cine a intrebat, te poti uita in dreptul postului si vezi cine a scris Link spre comentariu
Elef Postat Februarie 15, 2015 Partajează Postat Februarie 15, 2015 (editat) @Thunder in C orice lucru(functie, variabila) trebuie declarat inainte de a fi folosit - lucrul asta e mentionat de LiviuM in comentariu. Prima este declaratia , dupa care undeva trebuie sa fie si implentarea. Declaratia nu are corp- {...}. Editat Februarie 15, 2015 de Elef Link spre comentariu
Mircea Postat Februarie 15, 2015 Partajează Postat Februarie 15, 2015 (editat) As fi apasat pe Like This, dar mi-am consumat cota de 1 multumesc pe zi. Nu este evident ca trebuie sa declari daca nu stii cum e cu C-ul . Editat Februarie 15, 2015 de thunderer Link spre comentariu
Liviu M Postat Februarie 15, 2015 Autor Partajează Postat Februarie 15, 2015 (editat) care sa fie motivul pentru care functia delay (singura omisa(intentionat? de la comentare)); incepe cu "__" ? Nu am comentat functia __delay_ms() pentru ca e "functie (de fapt macro) compilator", nu e "inventia" mea si numele mi s-a parut suficient de sugestiv ca sa nu merite explicatii.Pentru partea a doua a intrebarii (intrebarea propriuzisa?), raspunsul pe scurt e RTFM.De data asta fac o exceptie si comentez si "pe lung".Functia delay nu incepe cu "__" ci cu "_" (=> _delay()). Cu "__" incep delay_ms() si delay_us() (adica __delay_us() & __delay_ms()).Iata ce spune manualul (RTFM, remember?) despre "functiile" astea: __DELAY_MS, __DELAY_US, __DELAYWDT_US, __DELAYWDT_MSSynopsis__delay_ms(x) //request a delay in milliseconds__delay_us(x) //request a delay in microseconds__delaywdt_ms(x) // request a delay in milliseconds__delaywdt_us(x) // request a delay in microsecondsDescriptionIt is often more convenient to request a delay in time-based terms, rather than in cyclecounts. The macros __delay_ms(x) and __delay_us(x) are provided to meet thisneed. These macros convert the time-based request into instruction cycles that can beused with _delay(n). In order to achieve this, these macros require the prior defini-tion of preprocessor symbol _XTAL_FREQ, which indicates the system frequency. Thissymbol should equate to the oscillator frequency (in hertz) used by the system.On PIC18 devices only, you can use the alternate WDT-form of these functions, whichuses the CLRWDT instruction as part of the delay code. See the _delay function.The macro argument must be a constant expression. An error will result if these macrosare used without defining the oscillator frequency symbol, the delay period requestedis too large, or the delay period is not a constant.See also_delay()_DELAY(),_DELAYWDT Synopsis#include<xc.h>void _delay(unsigned long cycles);void _delaywdt(unsigned long cycles);DescriptionThis is an in-line function that is expanded by the code generator. When called, this rou-tine expands to an in-line assembly delay sequence. The sequence will consist of codethat delays for the number of instruction cycles that is specified as the argument. Theargument must be a constant expression.The _delay in-line function can use loops and the NOP instruction to implement thedelay. On PIC18 devices only, the _delaywdt in-line function performs the same task,but can use the CLRWDT instruction, as well as loops to achieve the specified delay.An error will result if the delay period requested is not a constant expression or is toolarge (approximately 179,200 for PIC18 devices, and 50,659,000 instructions for other8-bit PIC devices). For very large delays, call this function multiple times.Example#include <xc.h>voidmain (void){control |= 0x80;_delay(10);// delay for 10 cyclescontrol &= 0x7F;}See Also_delay3(), __delay_us(), __delay_ms() De ce incep functiile astea cu _ / __? Buna intrebare.Din cate stiu eu, exista anumite "conventii de denumire". Se pare ca la fel stie si wikipedia (RTFM), care spune ca:Names containing double underscore or beginning with an underscore and a capital letter are reserved for implementation (compiler, standard library) and should not be used (e.g. __reserved or _Reserved). Editat Februarie 15, 2015 de Liviu M Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum