Jump to content
PLC Forum


Sign in to follow this  
Alessandro Dj-alex Turco

Pic16F Con Programma In C

Recommended Posts


Alessandro Dj-alex Turco

c7ffaef8ef5c31169f5c9525bbc8af13.PNG

accende un led con pulsante
#include<pic.h>
#define S2 PORTAbits.RA0
#define LED1 PORTBbits.RB1
void main()
{
TRISA=0x30;
TRISB=0x00;
PORTB=0x00;
while (1)
{
if (S2==0)
{
LED1=1;
}
else
{
LED1=0;
}
}
Edited by Alessandro Dj-alex Turco

Share this post


Link to post
Share on other sites
Livio Orsini

Nota bene come è fatto l'esempio che ti ha citato simuffa.

#include <htc.h> 
#define _XTAL_FREQ 8000000 
void main()
  { 
     TRISB=0X00; 
     PORTB=0X00; 
     while(1) 
       { PORTB=0XFF; 
         __delay_ms(1000); 
         PORTB=0X00; 
         __delay_ms(1000); 
    } 
}

se tu conoscessi il "C" sapresti come lavora l'istruzione while. Scritta così fa in modo che il programma cicli sempre all'interno di quel loop. In questo modo le 8 uscite della porta B saranno alte per 1" e basse per un altro secondo.

Ovviamente devi verificare il compilatore che stai usando se accetta la medesima grafia per i ritardi e se sono già definite le porte ed i registri con quelle etichette.

Edited by Livio Orsini

Share this post


Link to post
Share on other sites
Alessandro Dj-alex Turco

incrementi o decrementi di una unità il contatore ad ogni pressione di S1 (UP) o S2 (Down).

'****************************************************************
'* nome programma: sette_segmenti_01
'* MCU: PIC16F84A
'* Oscillatore: HS, 4MHz
'* Dev.Board: EasyPic 5
'* SW: mikroBasic v4.0 o sup.
'****************************************************************

program sette_segmenti_01
const display as byte[10]= (63,6,91,79,102,109,125,7,127,111)
dim k as byte 'Variabile che contiene il NUMERO (0-9)
main:
porta=0 'Azzera PORTA
portb=0 'Azzera PORTB
trisa=%00011 'RA0 e RA1 come Input
trisb=0 'definisce PORTB come output
k=0 'Azzera indice
while true
'--------------Processa TASTO 1-------
if (porta.0=1) AND (k<9) then 'Se premo Tasto 1 e k<9
k=k+1 'Incrementa contatore
while porta.0=1 'Ciclo anti REPEAT
wend
end if
'--------------Processa TASTO 2-------
if (porta.1=1) AND (k>0) then 'Se premo Tasto 2 e k>0
k=k-1 'Decrementa contatore
while porta.1=1 'Ciclo anti REPEAT
wend
end if
'------------Visualizzazione sul dispay -------
portb=display[k] 'visualizza numero di posizione k contenuto nell'array display
Delay_ms(100) 'Pausa per ANTIRIMBALZO di 100 ms
wend
end.

pero da me da errore penso a causa del diverso compilatore

Edited by Alessandro Dj-alex Turco

Share this post


Link to post
Share on other sites
Alessandro Dj-alex Turco

An ok

Mi potreste dare una mano nella stesura del programma

Share this post


Link to post
Share on other sites
Livio Orsini

Scusa ma nell'esempio che hai citato to c'è tutto: schema elettrico e programma in mcroC.

Poi deciditi e scegli un linguaggio, parli di "C", poi metti un esempio in basic.

Fai una scelta e studia il linguaggio che hai scelto.

Share this post


Link to post
Share on other sites
Alessandro Dj-alex Turco

Ma devo farlo in C

Share this post


Link to post
Share on other sites
Livio Orsini

Allora ce lo hai già bello e pronto.

Share this post


Link to post
Share on other sites
Livio Orsini

Senti ma ci stai prendendo per i fondelli? lo hai pubblicato tu il link.

Share this post


Link to post
Share on other sites
Alessandro Dj-alex Turco

SU multisim NON VA

SU protetus VA

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...