Home
Indice delle lezioni
Contents
1. 6 5 4 3 2 1 5 45 Vi is 14 17 5 VDD RA zm 3 Rai 8 2X 10K m RA2 5 2 8 RA3 8 ENT SUE 4 RTCC RAdL 3 MCLR 2 c2 T SWI E 16 _ OSCI CLKIN RB S 2 1 22PF i Ex RB swe RB3 2 1 E C3 N Ama 0 ie 3 15 11 2 OSC2 CLKOUT RIM RB 22PF 5 jes e E Di R2 ZA PIC16F84 A DGI END LED 12 U 5 7553 12VCC gt nl enD OUT C4 c5 2 cs o E E a3 E bal GND i mn v D mn mn PROJECT PIC BY EXAMPLE NOTE EXAMPLE N 4 ENGINEER SERGIO TANZILLI VER 10 DATE 2NOV 1998 PAGES 1 OF 6 5 4 3 2 1 pbe example5 UTSCH YAPP SCH 6 5 4 3 2 5 Ut 5 14 17 32 VDD ol A RA1 1 9 RAI 8 RAJ Ji GND 3 1 4 cia RTCC RAd 2b T lt 3 c2 y 16 6 8 gi OSC1 CLKIN RBO a I RBI E 9 AA 5 22PF a Re 8 io 6 Ex 9 RB c3 N de apa 9 11 R2 U OSC2 CLKOUT RBI ip 12 bps ien iaraa 1K Sero 5 vss aa 19 086 14 B7 L
2. Firmware Yapp versione 2 7 completo di sorgenti in assembler FWYAPP27 ZIP Software di gestione per MS DOS versione 2 7 completo di sorgenti in C SWYAPP27 ZIP E Manuale utente del software di gestione versione 2 7 in formato Acrobat Reader UMYAPP27 PDF o Word 97 UMYAPP27 ZIP Note sulle versioni di YAPP ASM firmware Versione 2 7 Correzione del bug della versione 2 5 per cui veniva programmato anche il byte di calibrazione dell oscillatore Allineamento del firmware allo schema elettrico versione 2 7 Ampliamento della durata dei segnali di CLOCK e DATA Versione 2 6 Versione interna non rilasciata Versione 2 5 2 5a Programma anche i PIC12C508 509 Versione 2 4 Programma anche i PIC16C6X 7X 9XX Implementa due nuovi comandi WPL Write Program Location per la gestione della programmazione verifica e BC Blank Check Versione 2 3 Versione interna non rilasciata Versione 2 2 Versione di allineamento con il software di gestione Y APP EXE eliminato alcuni bugs della precedente versione 2 1 Note sulle versioni di YAPP EXE software MS DOS Versione 2 7 file C temp borrar pbe italiano hardware yapp htm 6 of 7 13 10 1999 6 32 21 PM Yet Another Pic Programmer Compatibile con le versioni firmware superiori alla 2 5 Mantiene il micro in RUN mode quando visualizza il menu principale Versione 2 5C Ampliato il numero di PIC programmabili Compatibile solo con la versione firmware 2 5 V
3. Spegnimento led TurnOffLedl bcf PORTB LED Spegne LED 1 goto MainLoop Continua a lampeggiare RU AE A doeet co ok coge vac aka RE geek paces REA ARIA uev os E coa UU ia oC UE Subroutine RN ck AAA RR S Re o e eed NA AE UR UR e TR QUATN Sd Subroutine di ritardo software Delay e Count CLEF Count 1 DelayLoop decfsz Count 1 goto DelayLoop decfsz Count 1 1 goto DelayLoop return A z 0 file C temp borrar pbe examples intrb asm 3 of 3 13 10 1999 6 50 01 PM file C temp borrar pbe examples nointrb asm RA UK E OU Baa ate Rep RAEE LIRE u E eoe du Uu mp ROCA DAS Pic by example NOINTRB ASM c 1999 Sergio Tanzilli tanzilli picpoint com http www picpoint com picbyexample index htm O RR RIA PROCESSO RADIX INCLUDE Setup of P R XT oscillator _ CONFIG LED EQU LED2 EQU LED3 EQU LED4 EQU ORG Count RES nTick RES Punto d ORG C No r2 CO OCH Reset Vector do Emi io del 16F84 DEC P16F84 INC C configuration flags Disable watch dog timer Enable power up Disable code protect timer 3FF1H Registro utilizzato per lampeggi del LED 1 00H contare il numero di programma al reset della CPU PRICK BRAK BECK ICR KR ARIK OE BIKAR KA KLAR BRK ERK ERK EK IK GR KK EK CK E RK RRR OK KARIE
4. TRI S TRI S OPTI OPTI INT B Ox7F SW B Ox7F SW B 0x7F LI I O lines definition on port A O output l input Definition of port a SA amp 0x7F I O lines definition on port TCH1 TCH2 EDI EDG bit on OPTI ON RI EG 0x7F I NT B 0 output l input Switch 1 Switch 2 Led 1 ON register lling edge of RI 50 1 NT EDG ESCAL ER to Watc ON RI EG amp Ox7F PSA h dog timer ESCAL ER to 1 128 OPTION REG Ox7F PSO OPTION REG amp Ox7F PS1 OPTION REG Ox7F PS2 STATUS RPO Swap to data bank 0 INTCON GIE Enables interrupts INTCON INTE Enables RBO INT interrupt PORTB LED1 Turn off LED RD AE RRA CON peak ARONA ERRORE oaa 7 Main loop BEDARD AAA ARA NT ORDER o A Ko x A epe IR RR aee ADU MainLoop btfss PORTB SWITCH2 If switch2 is down enter in StopLoop goto StopLoop stops CPU clrwdt Clear wtahc dog timer call Delay Software delay If LED1 in on then turn it off and viceversa btfss PORTB LED Led on goto TurnOnLed No turn it on goto TurnOffLed1 Yes turn it off Turn LED1 on TurnOnLedl bsf PORTB LED goto MainLoop Turn LED1 off file C temp borrar pbe ex
5. L esecuzione della MOVWE non influenza nessun bit di stato file C temp borrar pbe italiano istruzioni movwf htm 13 10 1999 6 59 58 PM
6. Nella tabella seguente x adis la divi i tra i valori di questi bit e gli intervalli che otterremo 2 rst PSO rh ed Le A e lla MM as A G 153 file C temp borrar pbe italiano less6 passo2 htm 1 of 2 13 10 1999 6 26 14 PM NM 3737 Po Lezione 6 Passo 2 Se ee ERR 128 2 304s Esempio pratico di uso del Watch Dog Timer Vediamo ora come sempre un esempio pratico di utilizzo del Watch Dog Timer Useremo lo stesso schema usato nell esempio predente e riportato nel file example4 pdf formato Acrobat Reader 10Kb il source riportato nel file WDT ASM In pratica questo esempio non differisce molto dall esempio gi usato per il Power Down Mode In pratica appena il programma entrer in esecuzione vedremo il LED 1 lampeggiare Durante il lampeggio viene eseguita continuamente l istruzione CLRWDT per evitare che la CPU venga resettata a tale proposito bisogna ricordarsi di programmare il PICmicro con l opzione WDTE abilitata Non appena premiamo il tasto SW2 la CPU entra in un loop infinito StopLoop senza eseguire la CLRWDT Trascorsi circa 2 3 secondi il Watch Dog Timer effettua il reset della CPU ed il led comincia nuovamente a lampeggiare Proviamo ora a riprogrammare il PIC16F84 con lo stesso programma ma senza abilitare il WDTE con il nostro programmatore Noterete che premendo il tasto SW2 il lampeggio si blocca e non si sblocca pi Maggiori informazioni sul funzio
7. 9 DB2 Data bus line 2 10 DB3 Data bus line 3 n DB4 Data bus line 4 12 DBS Data bus line 5 13 DB6 Data bus line 6 Databusline 6 14 DB7 Data bus line 7 Per ridurre al massimo i collegamenti tra il PIC ed il display LCD in questa lezione utilizzeremo la modalita di collegamento dati a 4 bit utilizzando solo le linee DB4 DBS DB6 e DB7 Le linee 12150 DB1 DB2 e DB3 non saranno utilizzate e collegate a massa Anche la linea R W non verr utilizzata e collegata direttamente a massa In questo modo verr selezionata la modalit di funzionamento in sola scrittura In pratica potremo solo inviare dati all LCD ma non riceverli Hello World file C temp borrar pbe italiano less7 passo1 htm 1 of 4 13 10 1999 6 26 16 PM Lezione 7 Passo 1 Dopo aver realizzato il circuito d esempio compilare il sorgente riportato nel file LCD1 ASM e quindi programmate il PIC con il file HEX ottenuto All accensione del circuito se tutto andato per il meglio apparir sul display la seguente schermata ovvero CIAO MONDO che diventata ormai la frase di iniziazione che tutti gli aspiranti programmatori devono aver visualizzato almeno una volta in un loro programma Non potevavo essere di certo noi ad eludere questa tradizione Il risultato non molto esaltante ma la sostanza di quello che siamo riusciti a fare notevole va studiata approfonditamente Se non riuscite a visualizzare nulla sul display nonost
8. 16C621A 16C622 16C622A 16C63 16C63A 16C64 16C64A 16C65 16C65A 16C65B 16C66 16C67 16C71 16C710 16C711 16C72 16C72A 16C73 16C73A 16C73B 16C74 16C74A 16C74B 16C76 16C77 16C84 16F83 16F84 16C923 16C924 16CE623 16CE624 16CE625 Come si usa lo Yapp Lo Yapp si connette al PC tramite la porta seriale RS232 ed al prototipo tramite un connettore a 6 pin A differenza di molti altri programmatori dello stesso livello lo Yapp non utilizza i criteri della porta seriale DTS e RTS per generare i segnali di programmazione ma solamente le linee RXD e TXD per comunicare ad alto livello con il PC Per permettere questo lo Yapp contiene a sua volta un PIC programmato che ne gestisce completamente le funzioni Questa caratteristica consente di utilizzare lo Y APP con diversi sistemi operativi e linguaggi di programmazione ma presenta lo svantaggio di dover disporre di un PIC gi programmato per poter essere realizzato Si consiglia quindi prima di cimentarsi nella realizzazione di verificare se si conosce qualcuno che possa programmare il PIC da montare a bordo Il PIC richiesto un 4 In queste pagine viene fornita la documentazione completa del protocollo di comunicazione tra Yapp e PC per favorire chi volesse sviluppare il proprio programma di gestione su PC un programmi di gestione per MS DOS completo di source in C ed il firmware da inserire nel PIC montato sullo Yapp Note sulla programmazione ICSP de
9. 4 of 4 13 10 1999 6 26 02 PM Lezione 2 passo 2 cs L ALU ed il registro W Andiamo ora ad illustrare altre due componenti fondamentali nell architettura del PIC la ALU ed il registro W o accumulatore RAD RB Rd RB EEPROM Program Memory 1K x14 RTCC REGISTER FILE EEPROM Data Mem ary 64 x 8 Generation Watch dog timer OSC IC LROLUT MELE dd OS C 1 AC LEIN Wee La ALU acronimo di Arithmetic and Logic Unit ovvero unit aritmentica e logica la componente pi complessa del PIC in quanto contiene tutta la circuiteria delegata a svolgere le funzioni di calcolo e manipolazione dei dati durante l esecuzione di un programma La ALU una componente presente in tutti i microprocessori e da essa dipende direttamente la potenza di calcolo del micro stesso La ALU del PIC16F84 in grado di operare su valori ad 8 bit ovvero valori numerici non pi grandi di 255 Esistono microprocessori con ALU a 16 32 64 bit e oltre La famiglia Intel 803860 4860 e PentiumO ad esempio dispone di una ALU a 32 bit Le potenze di calcolo raggiunte da questi micro sono notevolmente superiori a scapito della file C temp borrar pbe italiano less2 passo2 htm 1 of 2 13 10 1999 6 26 03 PM Lezione 2 passo 2 complessit della circuiteria interna ed accessoria e conseguentemente dello spazio occupato Direttamente connesso con la ALU c il registro W denominato anche accumulatore Questo registro consiste di una
10. FILE REGISTER OOOO kk kk kk kk kk kk A E kk kk kk kk Ck kk kk Ck kk kk kk I kk k kk kk kk kk K K K K kk Ck K K KOK K K ORG OCH Register used by LCD subroutines tmpLcdRegister res 2 Register used by msDelay subroutine and DELAY macro msDelayCounter res 2 TmpRegister res 1 Register used by RS232 subroutines ShiftReg res BitCount res Shift register Bit counter p po Ft Cursor location xCurPos res 1 yCurPos res 1 putTempReg res 1 Reset Vector PERE ER RRR KK RK RR KK KE OK RE KORR KK CK UK IK RR EROR SKK OK KK EB IR ARIK EK IRL OR GEOK OK EK OK RR RRR RESET VECTOR FERA RAEE AE OK RARER ABI KARR OK KREE ERE RAK RAR AEB OK SK ERR RK IKARIA CK ARR KER KK OE SR OK Ke AER ORG OOH Start bsf STATUS RPO Swap to register bank 1 moviw 00011111B Sets the whole PORTA as input movwf TRISA moviw ILLITLI LB Sets the whole PORTB as input movwf TRISB bcf PORTA TX Sets TX line as output bcf PORTB LCD DB4 Sets LCD data and control lines as output bcf PORTB LCD DB5 bcf PORTB LCD DB6 bcf PORTB LCD DB7 bcf PORTB LCD E bcf PORTB LCD RS bcf STATUS RPO Swap to register bank 0 LCD inizialization call LcdInit file C temp borrar pbe examples Icdterm asm 2 of 9 13 10 1999 6 53 12 PM file C temp borrar pbe examples Icdterm asm Put terminal
11. La linea Transmit Data TXD presente sul pin 3 del connettore DB9 maschio di cui il vostro PC dotato connessa alla linea Receive Data RXD presente sul pin 2 del secondo PC Le masse GND presenti sul pin 5 di entrambe i PC sono connesse tra loro Lezione 7 Passo 2 controllo andiamo a vedere sull oscilloscopio che tipo di segnali sono stati generati per effettuare la trasmissione Quando non c nessuna trasmissione in corso la tensione sulla linea TXD di 12 volt corrispondente alla condizione logica 1 Per indicare al PC ricevente che la trasmissione ha inizio il PC trasmittente porta a 12 volt la linea TXD per un tempo pari all inverso della frequenza di trasmissione ovvero al tempo di trasmissione di un singolo bit Nel nostro caso avendo scelto di trasmettere a 9600 bit per secondo la tensione di alimentazione rimar a 12 volt per 1 9600 0 104 mS Questo segnale viene denominato START BIT ed sempre presente all inizio di trasmissione di ogni singolo byte Dopo lo start bit vengono trasmessi in sequenza gli otto bit componenti il codice ASCII del carattere trasmesso partendo dal bit meno significativo Nel nostro caso la lettera A maiuscola corrisponde al valore binario 01000001 per cui la sequenza di trasmissione sar la seguente D 104 me AA 12 volt D a EE O volt x a o Cf 2 12 vot 1 Una volta trasmesso l ottavo bit bit 7 il PC aggiunge automaticamente un ultimo bit a 1 denominato STOP
12. kk k koc KK KK KK KK KK KK KK KKK KKK KKK KKK KK KK KK KK KK KK KK KK KK KK Sk Sk Sk ko Sk ko Sk ko de ko ko ko ko ko ko ko IT_DELAY equ 23 Bit delay a 9600 bps KKEKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK MACRO Delay subroutine with watch dog timer clearing file C temp borrar pbe examples rs232i0 asm 1 of 7 13 10 1999 6 46 58 PM file C temp borrar pbe examples rs232io asm Macro parameters VALUE GI Delay obtained VALU E 1 4 5 1 Fosc 4 PRICE RRR ARK ORE RRR RR EIR RARAS ERRE RAR E BRIER BIR ARAKI KAORI BRIBE BAKKER KR REER DELAY MACRO LOCAL movlw movwf clrwdt decfsz goto ENDM VALUE TmpRegister TmpRegister F REDO Clear watch dog timer PRICK EERE ARK KE REAR ARK RR EKER KARL KE en sa FIL E REGI ST ER PETRER ARE SKK CKOKGK ECKE PERERA BKK KR RRB ERK KERER ER SK CR CK ECKE OK RER KERERE IRR KERR KAR KK RAR ORG OCH Register used by msDelay subroutine and DELAY macro msDelayCounter res TmpRegister Register used by RS232 Shift BitCo Dummy Reg unt Reg res res res res 2 1 subroutines p po Ft Shift register Bit counter TERE RRR RK REEERE KENE IER GR BKK UK RRB KER RARE BIR BARRE BKK KERER ERE KR REAR KK KAR RES ET VECTOR PERA RR RR BR IRR RIAA
13. 12 PM Lezione 8 LIEN toro La EEPROM dati Al termine di questa lezione saprete Come scrivere un dato su una locazione memoria EEPROM Come leggere il contenuto di una locazione di memoria EEPROM Contenuti della lezione 8 1 Lettura e scrittura su EEPROM DATI file C temp borrar pbe italiano less8 intro htm 13 10 1999 6 58 57 PM Lezione 8 Passo 1 mu Lettura e scrittura su EEPROM dati Finora abbiamo trascurato una delle caratteristiche pi interessanti del 21016184 la EEPROM DATI Colmiamo ora questa lacuna andando ad analizzare il funzionamento di questo utilissimo componente dell architettura interna del PIC16F84 La EEPROM DATI una particolare area di memoria da 64 byte nella quale possiamo scrivere i valori numerici che vogliamo che non vengano persi in caso di mancanza di tensione di alimentazione Si intuisce immediatamente quanto possa essere utile questo tipo di memoria Pensate ad esempio ad un sistema anti intrusione in cui il PIC deve mantenere il codice di accesso anche quando il sistema spento in modo che non sia necessario riprogrammarlo ogni volta che si riaccende il sistema oppure ad una chiave elettronica realizzata con un PIC che riceve alimentazione solo quando l utente inserisce la chiave nel lettore In tutti questi casi la EEPROM DATI integrata nel PIC16F84 garantisce un ottimo livello di sicurezza nella conservazione dei dati unito ad una relativa facilit d uso La memoria E
14. 2 of 3 13 10 1999 6 26 04 PM Lezione 2 passo 3 di STACK Come detto l operazione appena effettuata viene denominata CHIAMATA A SUBROUTINE ovvero una interruzione momentanea del normale flusso di programma per chiamare in esecuzione una serie di istruzioni per poi ritornare al normale flusso di esecuzione La parola STACK in inglese significa catasta ed infatti su questa catasta possibile depositare uno sull altro pi indirizzi per recuperarli quando servono Questo tipo di memorizzazione viene anche denominata LIFO dall inglese Last In First Out in cui l ultimo elemento inserito last in deve necessariamente essere il primo ad uscire last out Grazie a questa caratteristica possibile effettuare pi CALL annidate ovvero l una nell altra e mantenere sempre traccia del punto in cui riprendere il flusso al momento che si incontra una istruzione RETURN Vediamo un altro esempio ORG OOH Pointl movlw 10 call Point2 goto Pointl Point2 movlw 11 calli Point3 return Point3 movlw 21 return In questo caso nella subroutine Point2 viene effettuata un ulteriore CALL alla subroutine Point3 Al ritorno da quest ultima il programma dovr rientrare nella subroutine Point2 eseguire la RETURN e quindi tornare nel flusso principale Gli indirizzi da memorizzare nello stack sono due in quanto viene incontrata una seconda CALL prima ancora di incontrare la RETURN corrispondente alla prima Il PIC16F84 dispone di uno stack a 8 liv
15. 4 of 5 13 10 1999 6 26 07 PM Lezione 3 Passo 2 D aa bus VAR Port WR TRIS set RBIF From other REB7RB4 pins file C temp borrar pbe italiano less3 passo2 htm 5 of 5 13 10 1999 6 26 07 PM Lezione 3 Passo 3 E 95 E A Input da tastiera Dopo aver realizzato nell esempio precedente le luci in sequenza sfruttando le linee da RBO a RB3 come linee di output vediamo ora come si pu realizzare un input da tastiera configurando le linee da RB4 a RB7 come linee di input Per far questo ampliamo il circuito presentato nella lezione 2 con quattro pulsanti da stampato denominati SW1 SW2 SW3 ed SWA e collegati secondo lo schema elettrico example3 pdf formato Acrobat Reader 12Kb Ognuno di questi pulsanti collega a massa una linea di ingresso normalmente mantenuta a 5 volt da una resistenza da R6 a R9 Prendendo ad esempio il pin 10 del PIC16F84 questa linea verr mantenuta a 5 volt finch non verr premuto il tasto SW1 che provveder a portare la linea ad 0 volt Realizziamo un programma d esempio che accenda ciascuno dei led D1 D2 D3 e D4 in corrispondenza della pressione di uno dei tasti SW1 SW2 SW3 e SW4 Il source dell esempio riportato nel file INPUT ASM La parte iniziale del programma esegue le stesse funzioni effettuate negli esempi precedenti ed in particolare le istruzioni movlw 11110000B movwf TRISB configurano le linee da RBO a RB3 in uscita per il collegamento con i led e
16. BIT ad indicare l avvenuta trasmissione dell intero byte La stessa sequenza viene ripetuta per ogni byte trasmesso sulla linea Aggiungendo al nostro cavo seriale una connessione tra il pin TXD pin 3 del PC ricevente con il pin RXD pin 2 del PC trasmittente potremo effettuare una trasmissione RS232 bidirezionale Il cavo che abbiamo ottenuto il pi semplice cavo NULL MODEM in grado di mettere in collegamento tra loro due DTE Come collegare il nostro circuito d esempio Come accennato prima il nostro circuito d esempio simula un dispositivo DCE Questo significa che il cavo che dovremo realizzare non dovr essere di tipo NULL MODEM o INVERTENTE ma DRITTO ovvero con i pin numerati allo stesso modo connessi tra loro Questo tipo di cavo identico a quelli che vengono usati per connettere al PC un modem esterno Dato che i dispositivi DTE sono sempre dotati di connettore DB9 maschio il nostro circuito essendo un DCE avr un connettore DB9 femmina In alcuni casi i PC sono dotati di connettori DB25 anzich DB9 per cui per le equivalenze occorre consultare la piedinatura dei connettori RS232 Il cavo di collegamento tra il PC ed il nostro circuito dovr essere intestato a sua volta con un connettore femmina da un lato per poter essere inserito nella seriale del PC ed un connettore maschio dall altro per poter essere inserito nel connettore del nostro circuito di prova I collegamenti interni al cavo da usare sono riportati nella seg
17. C etx 35 23 67 43 C 99 63 c 4 04 D eot 36 24 68 44 D 100 64d 5 05 E enq 37 25 69 45 E 101 65 e 6 06 F ack 38 26 amp 70 46 F 102 66 f 7 07 G bel og x s 71 47 6 103 67 g 8 08 H bs 40 28 72 48 H 104 68 h 9 09 I ht 41 29 73 49 I 105 69 i 10 0A J LE 42 2A 74 4A J 106 6A j 11 DB K vt 43 2B 15 4B K TOT 6B k 12 0C L ff 44 2C 76 4C L 108 6C 1 13 OD M cr 45 2D 77 4D M 109 6D m 14 OE N so 46 2E 78 4E N 110 6E n 15 OF O si 47 2F 79 4F O 111 6F O 16 10 P dle 48 30 0 80 50 P 112 70 p 17 1L O del 49 31 1 81 51 Q ls 71 g 18 12 R 2 50 32 2 82 52 R 114 72 r 19 13 S des 51 33 3 B3 53 S 115 73 s 20 14 T dal 52 34 4 84 54 T 116 74 t 21 15 U nak 53 35 Di 85 55 U IL T5 22 16 V syn 54 36 6 86 56 V 118 76 v 23 17 W etb 55 37 Ug 87 57 W 119 77 w 24 18 X can 56 38 8 88 58 X 120 78 x 25 19 Y em 57 39 9 89 59 Y 121 79 y 26 lA Z sub 58 3A 90 5A Z 122 TA z 21 1B esc 59 3B 3 91 5B I 123 TB A 28 10 N fs 60 3C lt 92 50 N 124 7C 29 ID gs 61 3D 93 5D 125 7D 30 IE 46 8 62 3E gt 94 5E 126 TE ol IF us 63 3E 7 95 5F 127 7F del file C temp borrar pbe italiano gloss ascii htm 13 10 1999 6 52 00 PM file C temp borrar pbe examples Icdterm asm RU QUA OU SA IA De IRA aa ee ey Mendes id eoe d UA pe DAS Pic by example LCDTERM ASM c 1999 Sergio Tanzilli picbyexampleGpicpoint com http www picpoint com picbyexample index htm LUNO qu EN c uo pu A at
18. Count RES 2 Queste due locazioni sono adiacenti a partire dall indirizzo referenziato dalla label Count decfsz Count 1 L istruzione significa DECREMENT FILE REGISTER SKIP IF ZERO ovvero decrementa il contenuto di un registro in questo caso Count e salta l istruzione successiva se il valore raggiunto zero Se il valore raggiunto non zero viene eseguita l istruzione successiva goto DelayLoop Che rimanda rimanda l esecuzione all inizio del ciclo di ritardo Una volta raggiunto lo zero con il contatore Count vengono eseguite le istruzioni dec sz Count i 1 goto DelayLoop file C temp borrar pbe italiano less1 passo4 htm 5 of 6 13 10 1999 6 25 59 PM Lezione 1 passo 4 Che decremetano il registro seguente fino a che anche questo raggiunge lo zero Il registro Count 1 in particolare verr decrementato di uno ogni 256 decrementi di Count Quando anche Count 1 avr raggiunto lo zero l istruzione return il cui significato RETURN FROM SUBROUTINE determiner l uscita dalla routine di ritardo ed il proseguimento dell esecuzione dall istruzione successiva la call Delay Per finire END una direttiva che indica al compilatore la fine del source assembler Nel passo successivo compileremo il source LED_1 ASM e programmeremo il PIC con il codice generato in uscita dal compilatore assembler file C temp borrar pbe italiano less1 passo4 htm 6 of 6 13 10 1999 6 25 59 PM Lezione 1 passo 5 Compiliamo un so
19. INCLUDE P16F84 INC ERRORLEVEL 302 Setup of PIC configuration flags XT oscillator Disable watch dog timer Enable power up timer Disable code protect CONFIG 3FF1H LED EQU 0 ORG OCH Count RES 2 Reset Vector Start point at CPU reset ORG OOH bsf STATUS RPO movlw 00011111B movwf TRISA movlw 11111110B movwf TRISB bcf STATUS RPO bsf PORTB LED MainLoop call Delay btfsc PORTB LED goto SetToZero bsf PORTB LED goto MainLoop SetToZero bcf PORTB LED goto MainLoop file C temp borrar pbe examples led asm 1 of 2 13 10 1999 6 32 28 PM file C temp borrar pbe examples led asm Subroutines Software delay Delay CHIEF Count Clark Count 1 DelayLoop decfsz Count 1 goto DelayLoop decfsz Count 1 1 goto DelayLoop return END file C temp borrar pbe examples led asm 2 of 2 13 10 1999 6 32 28 PM Glossario rom ram eprom eeprom flash Glossario dei termini utilizzati Sono memorie che non perdono il loro contenuto in caso di mancanza di alimentazione e per questo motivo vengono nomalmente utilizzate nei sistemi a microprocessore per contenere il programma da eseguire ed in alcuni casi i dati per memorizzare dati permanenti Vediamo la differenza tra 1 vari tipi ROM Read Only Memory memoria a sola lettura una memoria
20. Sintassi radix default radix Descrizione Definisce la radice di default per le espressioni numeriche Se non specificaro la radice di default esadecimale Il parametro default radix pu valere hex dec o oct Esempio radix dec file C temp borrar pbe italiano gloss radix htm 13 10 1999 6 33 45 PM Glossario notazione Glossario dei termini utilizzati Notazioni utilizzate in programmazione per indicare valori numerici in alternativa alla notazione decimale La notazione Binaria o notazione in base 2 rappresenta bit che possono assumere solo 2 valori 0 o 1 e rispecchia direttamente la modalit di memorizzazione dei numeri di un microprocessore La notazione Esadecimale o notazione in base 16 rappresenta i numeri tramite cifre esadecimali che possono assumere 16 valori Di seguito viene riportata una semplice tabella di corrispondenza per gli stessi valori tra le notazioni binarie decimali ed esadecimali 1100 1101 1 Ti Nel linguaggio assembler dei PICmicro la notazione esadecimale pu essere rappresentata in tre differenti forme H lt hex_digit gt 0x lt hex_digit gt e lt hex_digit gt H quindi ad esempio lo stesso numero esadecimale 1A viene riconosciuto nelle seguenti forme H 1A 0x1A oppure 1AH La notazione binaria viene riconosciuta in due forme B lt binary_digit gt e lt binary_digit gt B quindi lo stesso numero binario 01101100 viene riconosciuto nelle seguenti for
21. Tra le prime istruzioni che esegue il nostro PIC al reset troviamo le seguenti moviw 10001000B movwf INTCON dove in pratica viene messo ad uno il bit GIE bit 7 che abilita in generale la circuiteria di generazione degli interrupt e quindi il bit RBIE bit 3 che abilita in particolare l interrupt su cambiamento di stato delle linee RB4 7 In pratica avendo collegato i pulsanti PU1 PU2 PU3 e PU4 proprio sulle linee di I O RB4 RB5 RB6 ed RB7 con la pressione di uno di questi otteniamo un cambiamento di stato e quindi un interrupt Nel loop principale oltre alle operazioni di accensione e spegnimento del LED 1 viene decrementato il contatore nTick fino al raggiungimento dello zero In corrispondenza di questo viene spento il LED 2 file C temp borrar pbe italiano less5 passo2 htm 2 of 2 13 10 1999 6 26 12 PM ud Esempio pratico di gestione di pi interrupt Vediamo ora come gestire pi interrupt contemporaneamente Utilizzando sempre come base il source precedente INTRB ASM proviamo a gestire anche l interrupt sulla fine conteggio del registro TMRO Ovvero facciamo lampeggiare il LED 3 in corrispondenza di ogni fine conteggio di TMRO Il source da utilizzare DBLINT ASM Compiliamo e scarichiamo il programma DBLINT ASM nella scheda PicTech e vediamo che oltre a LED 1 che lampeggia con la solita frequenza c il LED 3 che lampeggia contemporaneamente con una frequenza pi elevata Premendo un tasto qualsias
22. ad esempio otterremo la schermata con il valore 12H otterremo file C temp borrar pbe italiano less7 passo1 htm 3 of 4 13 10 1999 6 26 16 PM Lezione 7 Passo 1 A questo punto per visualizzare ogni carattere della scritta vengono utilizzate le seguenti istruzioni movlw 1H call LcdSendData e cosi via per ogni lettere da visualizzare L incremento della posizione del cursore avviene automaticamente Subroutine di gestione del display LCD Vediamo brevemente quali funzioni effettuano le subroutine di gestione del display LCD fornite con il sorgente LCD1 ASM Subroutine Funzione LedInit Questa subroutine si occupa di inizializzare il display LCD e di pulire lo schermo Deve essere chiamata una sola volta e prima di qualsiasi altra subroutine di gestione dell LCD Non richiede alcun passaggio di parametri LcdClear Pulisce il contenuto dello schermo e riposiziona il cursore sulla prima colonna della prima riga Non richiede alcun passaggio di parametri LcdLocate Serve a posizionare arbitrariamente il cursore all interno dell area visibile del display Richiede il valore di riga e colonna per il posizionamento del cursore nel registro W I bit da DO a D3 contengono il valore di colonna asse Y mentre i bit da D4 a D7 il valore di riga asse X La numerazione delle righe parte da zero in alto La numerazione delle colonne parte da 0 a sinistra LcdSendData Serve ad inviare un carattere ASCII all LCD da visual
23. assembler Analizziamo ora linea per linea il contenuto del nostro source LED ASM Per chi dispone di una stampante utile effettuare una stampa del source per poter meglio seguire la nostra descrizione Altrimenti preferibile visualizzare il source in una finestra separata in modo da seguire simultaneamente il source e la relativa spiegazione Partiamo dalla prima linea di codice PROCESSOR 16F84 PROCESSOR una direttiva del compilatore assembler che consente di definire per quale microprocessore stato scritto il nostro source Le direttive non sono delle istruzioni mnemoniche che il compilatore traduce nel rispettivo opcode ma delle semplici indicazioni rivolte al compilatore per determinarne il funzionamento durante la compilazione In questo caso informiamo il compilatore che le istruzioni che abbiamo inserito nel nostro source sono relative ad un PIC16F84 RADIX DEC La direttiva RADIX serve ad informare il compilatore che i numeri riportati senza notazione sono da intendersi come numeri decimali Ovvero se intendiamo specificare ad esempio il numero esadecimale 10 16 decimale non possiamo scrivere solamente 10 perch verrebbe interpretato come 10 decimale ma 10h oppure 0x10 oppure H 10 INCLUDE P16F84 INC Ecco un altra direttiva Questa volta indichiamo al compilatore la nostra intenzione di includere nel source un secondo file denominato P16F84 INC Il compilatore si limitera a sostituire la linea contenente la di
24. bit di carry con l istruzione bcf STATUS C bcf STATUS C rlf Shift F Quando lo shift raggiunge il bit 4 vengono invertiti i primi quattro bit del registro Shift con i secondi quattro bit in modo da ricominciare il ciclo dal bit 0 Ecco cosa succede ai bit del registro Shift durante l esecuzione di questo loop 00000001 Valore iniziale primo led acceso 00000010 rif 00000100 rlf rlf 00001000 00010000 rlf a questo punto viene eseguita l istruzione swapf ottenendo 00000001 e cosi via btfsc Shift 4 swapf Shift F Inserisce un ritardo tra una accensione e l altra call Delay Torna ad eseguire nuovamente il loop goto MainLoop RR aa Subroutines RURSUS Oc The Inserimento di un ritardo pari ad un secondo utilizzando il registro TMRO Il ritardo viene ottenuto dalla frequenza in uscita al PRESCALER pari a 4Mhz 4 32 31 250 H jo divisa per 250 dal TMRO 32 250 250 125 Hz o e per 125 dal contatore Count 125 125 1H file C temp borrar pbe examples seqtmr0 asm 2 of 3 13 10 1999 6 49 49 PM file C temp borrar pbe examples seqtmr0 asm Delay Inizializza TMRO per ottenere 250 conteggi prima di arrivare a zero Il registro TMRO e un registro ad 8 bit quindi se viene incrementato nuovamentre quando arriva a 255 ricomincia a contare
25. bus contatori ecc La presenza di tutti questi dispositivi in uno spazio estremamente contenuto consente al progettista di avvalersi degli enormi vantaggi derivanti dall uso di un sistema a microprocessore anche in quei circuiti che fino a poco tempo fa erano destinati ad essere realizzati con circuiterie tradizionali I PIC sono disponibili in un ampia gamma di modelli per meglio adattarsi alle esigenze di progetto specifiche differenziandosi per numero di linee di I O e per dotazione di dispositivi Si parte dai modelli pi piccoli identificati dalla sigla PIC12C5xx dotati di soli 8 pin fino ad arrivare ai modelli pi grandi con sigla PIC17Cxx dotati di 40 pin Una descrizione dettagliata delle tipologie di PIC disponibile presso il sito web della Microchip raggiungibile via internet che consigliamo senz altro di esplorare per la grande quantit di informazioni tecniche software di supporto esempi di applicazioni e aggiornamenti disponibili Per il nostro corso abbiamo scelto un modello intermedio di PIC il PIC16F84 Esso dotato di 18 pin di cui ben 13 disponibili per l I O ovvero per i collegamenti al resto del nostro circuito e di alcune caratteristiche che lo rendono maggiormente adatto alle esigenze del nostro corso In particolare il PIC16F84 dispone di una memoria per contenere il programma di tipo EEPROM ovvero Electrical Erasable Programmable Read Only Memory che pu essere riscritta quante volte vogliamo e quindi idea
26. c7 WWW PICPOINT COM 5 m 5 PROJECT PIC BY EXAMPLE 3 a 3 3 Sa E NOTE EXAMPLE N 6 m 3 3 ENGINEER SERGIO TANZILLI VER 1 0 DATE 13 MAY 1999 PAGES 1 OF 7 6 5 4 3 2 1 pbe example7 UTSCH YAPP SCH 7 6 5 4 3 2 1 5 C8 100KPF C9 10UF 45 0 10UF 19 ua 1 fa voc 2 11 C13 3 V oe S pts oUF A e 6 C10 OF g MAX232 V I te 10UF 12 11 1 14 10 7 GND T2 y 2 12 13 2 Ri 1 5 9 8 4 3 Bo T Sn RS232C 1 FROM PC COMX 5 DB9 FEMALE DCE Vi 4 1 VDD RA m 523 ra E 9 8 RA3 2 Ji GND 3 1 34 4 MOR RTCC RAd 3 LED C2 7 P8 3 Il 16 OSCU CLKIN RB x DE c D 5 22PF si Rel a 8 Ex Bd 9 LED2 C3 n RBA4 1 D2 3 eye OSC2 CLKOUT RBS ZG 12 Di 470 22PF 5 Re 13 T 3 vss RB7 LED3 D3 PIC16F84 R8 en DZ gt 470 LED4 D4 R9 A pe a 470 5 O E 5 12 14 VCC m t TIT 4x toK 1 7805 3 y 4 x p Iz 1 inL_GND_JOUT P SWITCH 1 C4 C5 cs o ale 2 il SWITCH 2 al S a 5 mc mel cw
27. di stati d uscita per le linee di I O Esistono quindi dei gruppi di pin il cui comportamento leggermente differenziato da altri gruppi Conoscendo meglio il funzionamento dei diversi stadi d uscita potremo sfruttare al meglio le loro caratteristiche ed ottimizzare il loro uso nei nostri progetti Stadio d uscita delle linee RA0 RA1 RA2 e RA3 Iniziamo dal gruppo di linee RAO RA1 RA2 ed RA3 per le quali riproduciamo nella figura seguente lo schema dello stadio d uscita estratto dal data sheet della Microchip Data bus Port TRIS TIL input buffer RD PORT Come accennato al passo precedente la configurazione di una linea come ingresso o uscita dipende dallo stato dei bit nel registro TRIS TRISA per la porta A e TRISB per la porta B file C temp borrar pbe italiano less3 passo2 htm 1 of 5 13 10 1999 6 26 07 PM Lezione 3 Passo 2 Prendiamo come esempio la linea RAO ed analizziamo il funzionamento dello stadio d uscita sia quando la linea funziona in ingresso che quando funziona in uscita Funzionamento in ingresso Per configurare la linea RAO in ingresso dobbiamo mettere a 1 il bit 0 del registro TRISA con l istruzione Det TRISA 0 Questo determina una commutazione ad 1 dello stato logico del flip flop di tipo D latch indicato nel blocco con il nome TRIS latch Per ogni linea di I O esiste uno di questi flip flop e lo stato logico in cui si trova dipende strettamente dallo stato logico del relativ
28. gi programmata che non pu pi essere modificata o cancellata PROM Programmable Read Only Memory memoria a sola lettura programmabile una memoria ROM non ancora programmata La programmazione 2110 essere effettuata tramite un apparecchiatura specializzata denominata programmatore di PROM EPROM Erasable Programmable Read Only Memory memoria a sola lettura programmabile cancellabile una memoria PROM che pu essere cancellata se esposta alla luce di una lampada ad ultravioletti Per questo motivo 1 dispositivi dotati di EPROM hanno una finestra trasparente da cui possibile far raggiungere il chip di interno al dispositivo dai raggi UV EEPROM Electrical Erasable Programmable Read Only Memory memoria a sola lettura programmabile cancellabile elettricamente una memoria EPROM che pu essere cancellata elettricamente senza l ausilio di lampade UV FLASH Somiglia in tutto e per tutto alla EEPROM ovvero una memoria che pu essere cancellabile e modificabile elettricamente senza l ausilio di lampade UV file C temp borrar pbe italiano gloss rom htm 13 10 1999 6 33 24 PM Glossario processor Direttive dell assembler MPASM Sintassi processor processor type Descrizione Definisce il tipo di processore che si intende utilizzare Esempio processor 16F84 file C temp borrar pbe italiano gloss processor htm 13 10 1999 6 33 33 PM Glossario radix Direttive dell assembler MPASM
29. goto _KeyCheck bsf PORTB LED2 movlw 3 movwf nTick _KeyCheck call Delay Ritardo software btfss PORTB LED Led acceso goto TurnOnLedl No lo accende goto TurnOffLedl Si lo spegne Accensione led decremento del contatore di lampeggi TurnOnLedl bsf PORTB LED Controlla se LED 2 di segnalazione dell interrupt e gia acceso Se e acceso decrementa il contatore nTick ad ogni lampeggio di LED1 Quando nTick vale 0 spegne LED 2 btfss PORTB LED2 LED2 acceso goto MainLoop No continua a lampeggiare decf nTick 1 Si decrementa nTick btfss STATUS Z inTick 0 goto MainLoop No continua a lampeggiare bcf PORTB LED2 7Si spegne LED2 goto MainLoop Continua a lampeggiare Spegnimento led TurnOffLedl file C temp borrar pbe examples nointrb asm 2 of 3 13 10 1999 6 50 41 PM file C temp borrar pbe examples nointrb asm bcf PORTB LED Spegne LED 1 goto MainLoop Continua a lampeggiare BRIER RRR KR KIRK KR UR KE OK KO RPK KRHA KL RR BRK RKB EK IK GR KK KK CK ERRE EERE KARI EK OK EORR Subroutine EEE ORE ERRE BAKA RAI OR UK SE KARR BRAK ERR E E ERR EAR IK AK EEE RARER UK OK GR CK OK BK KBAR Subroutine di ritardo software Delay ede Count clrf Count 1 DelayLoop decfsz Count 1 goto DelayLoop decfsz Count 1 1 goto DelayLoop return END file C temp borrar pbe examples nointrb asm 3
30. in genere dall uso delle informazioni presentate su queste pagine Tutto il materiale viene fornito cosi come senza nessuna forma di garanzia sulla sua validit Si sconsiglia vivamente la realizzazione dello Yapp ha tutte quelle persone che intendono usarlo per la duplicazione di chip per il crack di dispositivi hardware di qualsiasi genere L autore non fornisce alcuna informazione a riguardo o supporto di alcun genere La versione attuale dello Yapp inoltre non compatibile con i chip 12C508A e 12C509A ed in generale con tutti i chip la cui sigla termina con la lettara A o B Modelli di PIC programmabili Dalla versione 2 5 lo Yapp in grado di programmare altri modelli di PICmicro oltre 1 16F84 Essendo un progetto aperto e messo a disposizione gratuitamente dall autore non per tutti i modelli di PICmicro stato effettuato un collaudo completo Nella seguente tabella vengono riportati i tipi di PICmicro che lo Yapp in grado di programmare teoricamente Nota I modelli riportati in grassetto sono quelli su cui sono state fatte effettivamente delle prove Gli altri dovrebbero essere compatibili sulla carta Sono graditi eventuali riscontri a riguardo ELENCO DEI PIC PROGRAMMABILI CON LO YAPP VERSIONE 2 7 file C temp borrar pbe italiano hardware yapp htm 1 of 7 13 10 1999 6 32 21 PM Yet Another Pic Programmer 12C508 12C509 16C554 16C556 16C558 16C61 16C62 16C62A 16C62B 16C620 16C620A 16C621
31. le linee da RB4 a RB7 in ingresso per il collegamento con i quattro pulsanti Il resto del programma L istruzione DET STATUS RPO Effettua uno swap sul banco di registri 0 in modo che possiamo accedere direttamente allo stato delle linee di I O MainLoop clrf PORTB Questa istruzione spegne tutti 1 led collegati sulla PORTA B and ogni ciclo di loop in modo che possano poi essere accesi sulla base dello stato dei pulsanti btfss PORIB SWI bsf PORIB LEDI Queste due istruzioni vengono eseguite per ogni linea collegata ad un pulsante per verificare se il pulsante premuto e per accendere il led corrispondente in pratica la btfss PORIB SWI salta la successiva bsf PORTB LED1 file C temp borrar pbe italiano less3 passo3 htm 1 of 2 13 10 1999 6 26 08 PM Lezione 3 Passo 3 solo se il pulsante SWI rilasciato In caso contrario la esegue accendendo il led Questa coppia di istruzioni viene eseguita per ogni tasto Il tutto viene eseguito all interno di un singolo loop tramite l istruzione goto MainLoop file C temp borrar pbe italiano less3 passo3 htm 2 of 2 13 10 1999 6 26 08 PM Lezione 4 bum oo mmi XN Il contatore TMRO ed il PRESCALER AI termine di questa lezione saprete Quale l utilizzo del registro contatore TMRO Acosaserve e come si programma il PRESCALER Contenuti della lezione 4 1 11 registro contatore TMRO 2 Il Prescaler file C temp borrar pbe itali
32. msDelay Send lower four bits file C temp borrar pbe examples Icd1 asm 5 of 6 13 10 1999 6 51 29 PM file C temp borrar pbe examples Icd1 asm bef PORTB LCD_DB4 bef PORTB LCD DB5 bcf PORTB LCD DB6 bcf PORTB LCD DB7 btfsc tmpLcdRegister 0 bsf PORTB LCD DB4 btfsc tmpLcdRegister 1 bsf PORTB LCD DB5 btfsc tmpLcdRegister 2 bsf PORTB LCD DB6 btfsc tmpLcdRegister 3 bsf PORTB LCD DB7 bsf PORTB LCD E Enables LCD movlw 1 Wait ims call msDelay bcf PORTB LCD E Disabled LCD movlw 1 Wait ims call msDelay return END file C temp borrar pbe examples Icd1 asm 6 of 6 13 10 1999 6 51 29 PM Glossario codifica ascii Glossario dei termini utilizzati La codifica ASCII consiste in una tabella di corrispondenze utilizzata comunemente per rappresentare nella memoria dei computer caratteri alfanumerici segni di interpunzione e codici di controllo Nella tabella seguente viene riportata la tabella ASCII standard a 7 bit utilizzata nella stragrande maggioranza dei casi Per ogni valore numerico riportato in notazione decimale e esadecimale viene riportato il corrispondente carattere o codice di controllo corrispondente dec hex char dec hex char dec hex char dec hex char 0 00 null 32 20 space 64 40 96 60 101 A soh 33 21 A 65 41 A 97 6l a 2 02 B stx 34 22 T 66 42 B 98 62 Db 3 03
33. nel source LED ASM presentato nella prima lezione era stata inserita la direttiva ORG 00H per segnare l inizio del programma Questa direttiva tiene conto del fatto che l esecuzione del programma al reset parte dall indirizzo 0000H dell area programma L istruzione che segue immediatamente la direttiva ORG 00H BSE STATUS RPO sara quindi la prima istruzione ad essere eseguita Il REGISTER FILE un insieme di locazioni di memoria RAM denominate REGISTRI Contrariamente alla memoria EEPROM destinata a contenere il programma l area di memoria RAM direttamente visibile dal programma stesso Quindi potremo scrivere leggere e modificare tranquillamente ogni locazione del REGISTER FILE nel nostro programma ogni volta che se ne presenti la necessit L unica limitazione consiste nel fatto che alcuni di questi registri svolgono una funzione speciale per il PIC e non possono essere utilizzati per scopi diversi da quelli per cui sono stati riservati Questi registri speciali si trovano nelle locazioni pi basse dell area di memoria RAM secondo quanto illustrato di seguito Le locazioni di memoria presenti nel REGISTER FILE sono indirizzabili direttamente in uno spazio di memoria che va da 00H a 2FH per un totale di 48 byte denominato pagina 0 Un secondo spazio di indirizzamento denominato pagina 1 va da 80H a AFH Per accedere a questo secondo spazio necessario ricorrere ai due bit ausiliari RPO e RP1 secondo le modalit che andremo
34. of 2 13 10 1999 6 29 43 PM Descrizione dei pin del PIC1F84 Descrizione dei pin del PIC16F84 RA2 E una linea di I O programmabile in ingresso o in uscita dall utente Corrisponde al BIT 2 della PORTA A RA3 E una linea di I O programmabile in ingresso o in uscita dall utente Corrisponde al BIT 3 della PORTA A RA4 RTCC E un pin multifunzione che pu essere programmato come normale linea di I O oppure come linea di clock in ingresso verso il contatore RTCC Se programmato come linea di I O corrisponde al BIT 4 della PORTA A diversamente dalle altre linee di I O quando questa linea funziona come uscita lavora a collettore aperto MCLR VPP In condizioni di normale funzionamento svolge le funzioni di Master CLeaR ovvero di Reset ed attivo a livello 0 Pu essere collegato ad un circuito esterno di reset o pi semplicemente collegato fisso al positivo Quando il PIC viene posto in Program Mode viene utilizzato come ingresso per la tensione di programmazione Vpp VSS E il pin a cui va connesso il negativo della tensione di alimentazione RBO E una linea di I O programmabile in ingresso o in uscita dall utente Corrisponde al BIT 0 della PORTA B e pu essere programmata per generare interrupt RB1 E una linea di I O programmabile in ingresso o in uscita dall utente Corrisponde al BIT 1 della PORTA B RB2 E una linea di I O programmabile in ingresso o in uscita dall utente Corrispon
35. per ora solo di ricevere caratteri Queste due costanti vengono utilizzate rispettivamente dalle subroutine di trasmissione e ricezione di caratteri via RS232 TxChar vedi linea 421 ed RxChar vedi linea 483 Queste due subroutine consentono in pratica di trasmette e ricevere byte in modalit seriale asincrona a 9600 bps 8 bit dati 1 stop bit e nessuna parit Per trasmettere un carattere sulla linea TX basta inserire nel registro W il valore da trasmettere ed effettuare una chiamata alla subroutine TxChar Ipotizzando di voler trasmettere il carattere A al PC dovremo inserire il seguente codice movlw LA call TxChar Per ricevere caratteri l operazione leggermente pi complessa Prendiamo in esame il nostro esempio a partire dalla linea 129 MainLoop btfsc PORIA RX goto MainLoop call RxChar In pratica il nostro programma esegue un loop infinito finch non rileva uno stato logico 0 sulla linea RX Quando questo avviene significa che molto probabilmente arrivato lo START BIT dal PC e che secondo quanto detto sopra arriveranno in sequenza i bit apparteneti al dato trasmesso dal PC In questo caso viene chiamata la RxChar che si occuper di leggere ogni singolo bit ricevuto compattarli in un unico byte e restituire 1l valore del byte cosi ricevuto nel registro ShiftReg Una volta lanciata la RxChar azzera il registro ShiftReg in cui verranno memorizzati i bit man mano che vengono ricevuti file C temp borrar pbe it
36. registro EEDATA il valore contenuto nella locazione di memoria richiesta Anche in questo caso dobbiamo per prima di tutto ricordarci di passare al banco registri giusto bcf STATUS RPO Swap to bank 0 movf EEDATA W Nel registro accumulatore W ora c e il dato letto dalla EEPROM file C temp borrar pbe italiano less8 passo1 htm 3 of 3 13 10 1999 6 58 58 PM Registro EECON1 Rif pagina 33 datasheet MicrochipO PIC16F8X Il registro EECONI un registro di controllo usato nelle operazioni di lettura e scrittura sulla memoria EEPROM DATI Esso contiene una serie di flag con cui possibile controllare ogni singola operazione effettuata sulla EEPROM dati La disposizione dei flag la seguente L U H W D RAW x H W 0 R 8 0 R S x p ESF WRERA wren WR RD bit bito La funzione svolta da ogni singolo flag descritta nella seguente tabella Posizione Flag Funzione Bit 7 5 Non utilizzati Bit4 EEIF EEPROM Write Operation Interrypt Flag bit Questo flag indica se la scrittura su EEPROM stata completata dall hardware del PIC e se l interrupt stato generato per questo motivo 1 Operazione completata 0 Operazione di scrittura non completata oppure non iniziata Una volta generato l interrupt questo flag deve essere resettato via software altrimenti la circuiteria interna del PIC non sar pi in grado di generare interrupt al termine delle successive scritture WRERR EEPROM Error F
37. res 2 Di seguito viene allocato spazio per due registri tmpLcdRegister usato dalle routine di gestione dell LCD e msDelayCounter usato dalla subroutine msDelay che genera dei ritardi software da 1 ms per il contenuto del registro W Questa subroutine viene utilizzata sempre dalle subroutine di gestione dell LCD per generare le temporizzazioni richieste durante la trasmissione di dati e comandi all LCD Segue una parte di definizione delle linee di connessione tra il PIC ed il display e quindi arriva la prima chiamata a subroutine che ci interessa Ball LcdInit LcdInit una subroutine che deve essere chiamata solo una volta all inizio del programma e prima di qualsiasi altra subroutine di gestione del LCD Essa si occupa di effettuare tutte le operazioni necessarie per inizializzare correttamente l LCD e consentire alle funzioni successive di poter operare correttamente Con le istruzioni seguenti moviw 00H Carl LcdLocate si posiziona il cursore del display sulla prima riga e prima colonna dello schermo I caratteri inviati successivamente verranno visualizzati a partire da questa posizione I quattro bit pi significativi del valore caricato nel registro W con l istruzione moviw 00H contengono il numero della riga dove si vuole posizionare il cursore i quattro bit meno significativi contegono il numero della colonna Provando a cambiare il valore nel registro W possiamo otterere posizionamenti diversi Con il valore 10H
38. s OSC2 CLKOUT RB3 315 p 3 22PF 5 RBg 13 vss RB LED PIC16C84 i RA 470 END LED D4 R5 p 470 A LED GND 12 5 02 6 12VCC gt A 7905 13 C4 a C5 4 u 66 c s s e 2 B 2 Y GND PROJECT _ PIC BY EXAMPLE NOTE EXAMPLE N 2 ENGINEER SERGIO TANZILLI VER 10 DATE 2NOV 1998 PAGES 1 OF 6 5 4 2 1 6 5 4 3 2 1 45 ut LL s dL STE s RAJ 2 END 4 RTCC RA4 3 A MCLR a 5 ce 16 6 Diga R2 amp 3 Il T OSC1 CLKIN RB x DIGO 5 T 22PF N a gt 6 LED 6 xi RB 9 BIN 6 C3 Red 10 D LIT s OSC2 CLKOUT RB3 317 p 3 22PF 5 RBg A 3 vss RB LED D3 PIC16C84 R4 a p 71470 A LED 04 85 A p c L470 LED 5 12 5 Len i ile 8 4X 10K 12V007 GND GUT i Cee I 2 swt C4 u C5 uw C6 C7 l 2 1 u s e 2 B 2 Y sw2 2 1 GND gt A 7 sw3 2 1 sw4 2 i a GND PROJECT _ PIC BY EXAMPLE NOTE EXAMPLE N 3 ENGINEER SERGIO TANZILLI VER 10 DATE 2NOV 1998 PAGES 1 OF 6 5 4 3 2 1
39. 1 S E 3 E SWITCH 3 2 ig WWW PICPOINT COM SWITCH 4 PROJECT PIC BY EXAMPLE 2 gt 14 NOTE EXAMPLE N 7 ENGINEER SERGIO TANZILLI am VER 10 DATE 26 MAY 1999 PAGES 1 OF 7 6 5 4 3 2 1 file C temp borrar pbe examples rs232io asm Ck k k lt CC Ck lt k k lt kk x k kk kk lt k x ko x ko ko x lt x x ko Pic by example RS232IO ASM c 1999 Sergio Tanzilli picbyexample picpoint com http www picpoint com picbyexample index htm http www tanzilli com PRI RRA EB RR CK KK SK OK OK SK KE ARAB SK DK GRO OK KEE KERER ER RRR RRB PROCESSOR 16F84 RADIX DEC INCLUDE P16F84 INC Suppress the following MPASM warning message 4 302 Register in operand not in bank 0 Ensure that bank bits are correct ERRORLEVEL 302 Flag configuration CONFIG 3FF1H RS232 lines TX equ 0 Tx data RX equ 1 Rx data I O lines on PORTB LED1 equ 0 LED2 equ 1 LED3 equ 2 LED4 equ 3 SWITCH1 equ 4 SWITCH2 equ 5 SWITCH3 equ 6 SWITCH4 equ 7 Command code from PC LED1_ON equ 00n LED2 ON equ 01h LED3 ON equ 02h LEDA4 ON equ 03h LED1 OFF equ 10h LED2 OFF equ 11h LED3 OFF equ 12h LED4_OFF equ 13h GET_SWITCH equ 20h KKEKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK Clock frequency related constant 4 MHz
40. 3 Enable equ 4 LCD data line DB4 equ 5 LCD data line 5 equ 6 LCD data line 6 equ 7 LCD data line DB7 ORG OCH res 2 res 2 Reset Vector ORG 00H bsf STATUS RPO Swap to register bank 1 movlw 00011111B Set PORTA lines movwf TRISA movlw 11111111B Set PORTB lines movwf TRISB bcf PORTB LCD DB4 Set as output just the LCD s lines bcf PORTB LCD DB5 bcf PORTB LCD DB6 bcf PORTB LCD DB7 bcf PORTB LCD E bcf PORTB LCD RS bcf STATUS RPO Swap to register bank 0 LCD inizialization call LcdInit Locate LCD cursor on row 0 col 0 file C temp borrar pbe examples Icd1 asm 1 of 6 13 10 1999 6 51 29 PM file C temp borrar pbe examples Icd1 asm movlw 10H call LcdLocate Shows HELLO WORLD string on LCD movlw UH call LcdSendData movlw E Call LcdSendData movlw L call LcdSendData movlw qs call LcdSendData movlw UO call LcdSendData movlw LA call LcdSendData movlw W call LcdSendData movlw VO call LcdSendData movlw R call LcdSendData movlw Uu call LcdSendData movlw pt call LcdSendData movlw por Call LcdSendData movlw UT call LcdSendData foreverLoop goto foreverLoop Min I E E E IA ig REC E EE Rc M E C CK ISE 2 2 2 d A e Delay subroutine W Requested delay time in ms clock 4MHz d Ck BREAK IA RR E Uno vo RIE INS ARR A wS NAR
41. 4 16 PIC16F84 en 5 5 gt kw b LCD 16X2 12 14 VCC u2 5 GND 1 l 1 7805 3 il GND OUT 2 ca C5 C6 c LIE RI El H LSA al a 3 et mn n v 20 mn mn PROJECT PIC BY EXAMPLE NOTE EXAMPLE N 5 ENGINEER SERGIO TANZILLI VER 10 DATE 12 MAY 1999 PAGES 6 5 4 3 2 pbe example6 UTSCH YAPP SCH 7 6 5 4 3 2 1 45 C8 100KPF C9 10UF 5 o 10UF 19 us 1 VCC m 11 A v lett 9 Li 0UF ka C10 OUF 5 MAX232 V I Epe 10UF 12 11 1 14 10 ko 4 7 END Q0 12 13 2 Ri F 5 ope 5 RS232C 1 H FROM PC COMX 9 DB9 FEMALE DCE 5 Ut 5 14 17 o 32 VDD RA n al A RA1 1 z 8 RA3 J1 GND 2 3 1 4 MCLR RICCIRAS ppo voo 2 4 3 c2 y 16 6 pai OSC1 CLKIN RBOI E o nr AB Hp RB 10 t 4 p EU RB i TRE R2 3 C3 55 RB 1 DB4 2 OSC2 CLKOUT RB 5 12 Das Lcpl 3 1K 22PF 5 ee RB T3 18 Dae 14 pp L 16 PIC16F84 am 4 bs LIS hw f eNp a LCD 16X2 8 5 GND 12 14 VCC u S 1 7805 3 iNL_GND_ OUT ui 2 c4 c5 c6
42. 8 PM file C temp borrar pbe examples rs232io asm bcf o o Derbi op op op op op op op DELAY PORTA TX Send start bit DELAY Tx loop TxLoop bt fss goto no bs go TxLo be go CTX no P f to f to 5 rrt DE E de go no no no no bs DE LAY cfsz to p p p p f LAY DE LAY no bs D P LAY D al LAY return ShiftReg 0 TxLo PORTA GTX PORTA CTX TX EX ShiftReg F _DELAY BitCo ant TxLoop PORTA TX Stop bit B IT DELAY 2 PORTA TX B IT DELAY 2 muta T eed dc dva NORD UR S INE AA KE ket sea kp SGS an 2 2 a uka E Receive a character from RS232 9600 baud 8 data bit Return code 1 stop bit No parity E ShiftReg Received character Piace dev RAK ERA ERK RIK K BKK KR RBI K OK OK RAR AREA KR ROGER OK BKK RARE OK Ok SE ARR KARA A EER RARER RE RxChar eX mo rf viw ShiftReg 8 Data lenght file C temp borrar pbe examples rs232i0 asm 6 of 7 13 10 1999 6 46 58 PM file C temp borrar pbe examples rs232io asm movwf BitCount DELAY BIT_DELAY BIT_DELAY 2 Wait 1 5 bit Loop di lettura dei bit dati wDB btfss PORTA RX goto RxBitL RxBitH nop bsf STATUS C goto RxShift RxBitL bcf STAT
43. 84 che ci aluter a seguire meglio quanto verr spiegato Le parti evidenziate in giallo sono le componenti che di volta in volta andremo ad analizzare Iniziamo dalla memoria EEPROM e dal REGISTER FILE EEPROM Data Mem ory 64 x 9 Generation Watchdog timer OSC2ICLKOLIT MCLR dd OS C 1 AC LEIN Vas La EEPROM una memoria speciale non cancellabile elettricamente utilizzata nel PIC per memorizzare il programma da eseguire file C temp borrar pbe italiano less2 passo1 htm 1 of 4 13 10 1999 6 26 02 PM Lezione 2 passo 1 La sua capacit di memorizzazione di 1024 locazioni ognuna in grado di contenere un opcode a 14 bit ovvero una istruzione base del PIC Il programma pi complesso che potremo realizzare non potr essere quindi pi lungo di 1024 istruzioni Gli indirizzi riservati alla EEPROM vanno da 0000H a 03FFH Il PIC pu solamente eseguire le istruzioni memorizzate in queste locazioni Non pu in alcun modo leggere scrivere o cancellare quanto in esse contenuto Per scrivere leggere e cancellare queste locazioni necessario un dispositivo esterno denominato programmatore Un esempio di programmatore il nostro YAPP o il PICSTART 16 prodotto dalla Microchip o molti altri ancora disponibili in commercio La prima locazione di memoria all indirizzo 0000H deve contenere la prima istruzione che il PIC dovr eseguire al reset e per questo viene nominata Reset Vector Come ricorderete
44. AM COUNTER ed il di conseguente salto ad una locazione qualsiasi dell area programma del PIC Un altra istruzione molto utile che influenza il valore del PROGRAM COUNTER la CALL dall inglese chiamata con la quale possibile effettuare delle CHIAMATE A SUBROUTINE Questa istruzione funziona in maniera molto simile alla GOTO Come la GOTO infatti permette di scrivere nel PROGRAM COUNTER un nuovo indirizzo di esecuzione del programma La differenza sostanziale consiste per nel fatto che prima di eseguire il salto il PIC memorizza in un altro registro speciale denominato STACK l indirizzo di quella che sarebbe dovuta essere la successiva istruzione da eseguire se non si fosse incontrata la CALL Vediamo meglio con un esempio ORG 00H Pointl movlw 10 call Point2 goto POlHEI Point movlw 13 return In questo caso il PIC dopo aver eseguito la MOVLW 10 passa ad eseguire listruzione CALL Point2 Prima di saltare per memorizza nello STACK l indirizzo 0002H ovvero l indirizzo della locazione successiva alla CALL L esecuzione passa quindi all istruzione MOVLW 11 e quindi alla istruzione RETURN dall inglese ritorno Questa istruzione come dice il suo nome consente di ritornare ovvero di riprendere l esecuzione a partire dall istruzione successiva alla CALL che aveva determinato l abbandono del flusso principale del programma utilizzando il valore memorizzato nel registro file C temp borrar pbe italiano less2 passo3 htm
45. BR BRK KBR HR OK UK OK RRB KARR BIR ACR AK EROR IRL KR KK REOR BIKAR RK K ER Start ORG OOH bsf STATUS RPO movlw 00011111B movwf TRISA movlw 11111111B movwf TRISB bcf PORTA TX bcf TRISB 1 bcf TRISB LED2 bet TRISB LED3 bcf TRISB LED4 bcf STATUS RPO Swap to register bank 1 Sets the whole PORTA as input Sets the whole PORTB as input Sets TX line as output Set output line on PORTB Swap to register bank 0 file C temp borrar pbe examples rs232i0 asm 2 of 7 13 10 1999 6 46 58 PM file C temp borrar pbe examples rs232io asm MainLoop LedlOn _LedlOn Led20n Led20n Led3On _Led30n bcf PORTB LED bcf PORTB LED2 bcf PORTB LED3 bcf PORTB LED4 Turn off each leds Wait until receives a start bit from RS232 line btfsc PORTA RX goto MainLoop call RxChar PRR RR RR KAR KORR CK KAA KERR Check for PC commands FERA RARARRK EAR RARER KR KERK BAIR RRA AB KAR KAA RK BAK LED1 ON SERE ERRE UK RAK RARE KAR RA movlw LED1 ON xorwf ShiftReg W btfss STATUS Z goto Led1On bsf PORTB LED goto MainLoop E RK KORSKGKOKOKEOK E KERK LED2_ON TERE KER AA BRA RAK AKER RAK movlw LED2 ON xorwf ShiftReg W btfss STATUS Z goto _Led20n bsf PORTB LED2 goto MainLoop PEAR EERE ERE KE BAEK KR KERK LED3_ON ERER RE
46. Count Le prime due memorizzano in TMRO il valore 6 in modo che il registro TMRO raggiunga lo zero dopo 250 conteggi 256 6 250 ottenendo cos una frequenza di passaggi per lo zero di TMRO pari a 31 250 250 125 Hz Le istruzioni seguenti memorizzano in un registro a 8 bit Count il valore 125 in modo tale che decrementando questo registro di uno per ogni passaggio per lo zero di TMRO si ottenga una frequenza di passaggi per lo zero del registro Count pari a 125 125 1Hz Le istruzioni inserite nel loop DelayLoop si occupano quindi di controllare se TMRO ha raggiunto lo zero quindi di reinizializzarlo a 6 e decrementare il valore contenuto in Count Quando Count raggiunger anch esso lo zero allora sar trascorso un secondo e la subroutine potr fare ritorno al programma chiamante file C temp borrar pbe italiano less4 passo2 htm 2 of 2 13 10 1999 6 26 10 PM Lezione 5 bum mmis XN Gli interrupt Al termine di questa lezione saprete Cosa sono e come vengono gestiti nel PIC gli interrupt Come deve essere scritto un interrupt handler Quali sono i tipi di eventi gestibili dal PICF84 Come gestire pi interrupt contemporaneamente Contenuti della lezione 5 1 Interrupt 2 Esempio pratico di gestione di un interrupt 3 Esempio pratico di gestione di pi interrupt file C temp borrar pbe italiano less5 intro htm 13 10 1999 6 26 11 PM Lezione 5 Passo 1 E ps Interrupt L interr
47. E che nel source inizia con la direttiva ORG 0CH oltre ai due byte referenziati dalla label Count riserviamo un ulteriore byte con label Shift che utilizzeremo per determinare la sequenza di accensione dei led La direttiva da inserire 5hirt RES L Prima di eseguire il ciclo principale label MainLoop inizializiamo il nuovo registro Shift a 00000001B con le seguenti istruzioni istruzioni movlw 00000001B movwf Shift A questo punto nel ciclo principale del nostro programma ci occuperemo di trasferire il valore memorizzato nel registro Shift sulla Porta B ottenendo quindi l accensione del primo led con le seguenti istruzioni movf Shift W movwf PORTB quindi di effettuare lo shift a sinistra del valore contenuto in Shift di un bit con le seguenti istruzioni bcf STATUS rit Shitty E la prima istruzione serve ad azzerare il bit CARRY del registro di stato STATUS che verra analizzato nelle lezioni successive L istruzione RLF Rotate Left F through Carry ruota a sinistra attraverso il bit di carry sposta di un bit verso sinistra il valore memorizzato nel registro Shift inserendo nella posizione occupata dal bit 0 il valore del bit di Carry che come gia detto andremo a vedere in seguito Per far si che il bit inserito sia sempre zero viene eseguita prima della RLF l istruzione BCF STATUS C per azzerare questo bit A questo punto il registro Shift varr 00000010B quindi al ciclo successivo una volta trasferito tale valore sulla po
48. EE RE EER EEA movlw LED3 ON xorwf ShiftReg W btfss STATUS Z goto _Led30n bsf PORTB LED3 goto MainLoop ONE de RARA UK RAK TREE RE AER LEDA4 ON Received a start bit No Yes wait read the byte on receiving file C temp borrar pbe examples rs232io asm 3 of 7 13 10 1999 6 46 58 PM file C temp borrar pbe examples rs232io asm Led40n Led4On LedlOff LedlOff Led20ff _Led20ff Led3Off Led3Of f Led4Off TRARRE RO ope s e Kee movlw LEDA4 ON xorwf ShiftReg W btfss STATUS Z goto Led4On bsf PORTB LED4 goto MainLoop uh NN RO RARI EE C Uses LED1 OFF REOR NOU 11 movlw LED1 OFF xorwf ShiftReg W btfss STATUS Z goto _LedlOff bcf PORTB LED goto MainLoop IATA DUK SK RGN AAA LED2 OFF PR fo IE AAT Ces movlw LED2 OFF xorwf ShiftReg W btfss STATUS Z goto _Led20ff bcf PORTB LED2 goto MainLoop PIT ADR PAIA NUS EUR ER LED3 OFF SEAR RR AA o RIB AR aS movlw LED3 OFF xorwf ShiftReg W btfss STATUS Z goto _Led30ff bcf PORTB LED3 goto MainLoop PARK TIN BROIL A RAI ACR afe LED4_ OFF PATI IRE ARIA ARRAN eue movlw LEDA OFF xorwf ShiftReg W btfss STATUS Z file C temp borrar pbe examples rs232i0 asm 4 of 7 13 10 1999 6 46 58 PM file C temp borrar pbe examples rs232io asm Read the switch sta
49. EPROM scrivibile e leggibile in condizioni di normale alimentazione e senza dover ricorrere ad alcun programmatore esterno Le modalit di accesso sono notevolmente diverse dalla memoria RAM dei REGISTER FILE e devono seguire una serie di procedure particolari atte ad evitare eventuali perdite di dati in condizioni di funzionamento anomale Registri speciali per l accesso alla EEPROM dati Per accedere alla EEPROM DATI vengono utilizzati 1 seguenti registri speciali EEADR il registro utilizzato per indirizzare una delle 64 locazioni di memoria EEPROM in cui si desidera effettuare una lettura o scrittura di un dato EEDATA il registro che viene usato per inviare un byte alla EEPROM in scrittura oppure per ricevere un byte dalla EEPROM in lettura EECONI ed EECON2 sono due registri ci controllo utilizzati nelle operazioni di lettura e scrittura come descritto di seguito Scrittura di un dato su EEPROM Vediamo ora come si pu scrivere un dato su una locazione EEPROM Ipotizziamo di voler scrivere il valore decimale 10 nella locazione 0 della EEPROM dati La prima operazione da compiere scrivere nel registro EEADR l indirizzo della locazione di memoria che intendiamo scrivere Possiamo usare per far questo le seguenti istruzioni moviw 0 movwf EEADR Nel registro EEDATA dobbiamo ora scrivere il valore che intendiamo inviare alla locazione EEPROM indirizzata con il registro EEADR moviw 10 movwf EEDATA file C temp bor
50. Enable bit posto sul bit 7 del registro INTCON Interrupt vector ed Interrupt handler file C temp borrar pbe italiano less5 passo1 htm 1 of 2 13 10 1999 6 26 12 PM Lezione 5 Passo 1 Qualunque sia l evento abilitato al suo manifestarsi il PIC interrompe l esecuzione del programma in corso memorizza automaticamente nello STACK il valore corrente del PROGRAM COUNTER e salta all istruzione presente nella locazione di memoria 0004H denominata Interrupt vector vettore di interrupt E da questo punto che dobbiamo inserire la nostra subroutine di gestione dell interrupt denominata Interrupt Handler gestore di interrupt Potendo abilitare pi interrupt tra i primi compiti dell interrupt handler la verifica di quale tra gli eventi abilitati ha generato l interrupt e l esecuzione della parte di programma relativo Questo controllo pu essere effettuato utilizzando gli Interrupt flag Interrupt flag Dato che qualunque interrupt genera una chiamata alla locazione 04H nel registro INTCON sono presenti dei flag che indicano quale l evento che ha generato l interrupt vediamoli INTF bit 1 Se vale 1 l interrupt stato generato dal cambiamento di stato sulla linea RBO TOIF bit 2 Se vale 1 l interrupt stato generato al termine del conteggio del timer TMRO e RBIF bit 0 Se vale 1 l interrupt stato generato dal cambiamento di stato di una delle linee da RB4 a RB7 Come si vede per l interrupt sul fine scr
51. IG 3FF1H ORG OCH Count RES Shift RES Reset Vector Punto di inizio del programma al reset della CPU ORG 00H Commuta sul secondo banco dei registri bsf STATUS RPO Definizione delle lin di I O 0 Uscita 1 Ingresso movlw 00011111B movwf TRISA amp 7FH movlw 11110000B movwf TRISB amp 7FH Assegna il PRESCALER a TMRO e lo configura a 1 32 Vedi subroutine Delay per maggiori chiarimenti movlw 00000100B movwf OPTION_REG amp 0x7F Commuta sul primo banco dei registri bcf STATUS RPO Il registro Shift viene utilizzato per rappresentare internament lo stato delle linee di uscita della porta B dove sono collegati i led 11 bit 0 del registro Shift viene settato ad uno per iniziare il ciclo dal primo led movlw 000000011 movwf Shift UJ file C temp borrar pbe examples seqtmr0 asm 1 of 3 13 10 1999 6 49 49 PM file C temp borrar pbe examples seqtmr0 asm Loop di scorrimento MainLoop invia sulla porta B il registro Shift cosi che ogni bit settato ad uno in Shift fara accendere il led relativo movf Shift W movwf PORTB Per ruotare le luci usa l istruzione rlf che effettua lo shift a sinistra dei bit contenuti nel registro ed inserisce nel bit 0 lo stato del bit di carry Per questo motivo prima di effettuare l istruzione rlf azzera il
52. Indice delle lezioni Indice delle lezioni amp Introduzione ai PIC 1 Che cosa sono i PIC Realizziamo un semplice lampeggiatore a led Scrittura e compilazione di un programma in assembler Analizziamo un source assembler Compiliamo un source assembler 6 Programmiamo il PIC EC p P Architettura interna dei PIC 1 L area programma ed il Register File 2 L ALU edil registro W 3 Il Program Counter e lo Stack 4 Realizziamo le Luci in sequenza amp Introduzione alle periferiche 1 Le porte A e B 2 Stadi d uscita delle linee di I O 3 Input da tastiera II contatore TMRO ed il PRESCALER 1 Il registro contatore TMRO 2 Il Prescaler amp Gli interrupt 1 Interrupt 2 Esempio pratico di gestione di un interrupt 3 Esempio pratico di gestione di pi interrupt gl Power Down Mode Sleep ed il Watch Dog Timer 1 Funzionamento del Power Down Mode 2 Funzionamento del Watch Dog Timer gb Interfacciamento con il mondo esterno 1 Gestione di un display LCD 2 L interfaccia RS232 3 Un altro esempio con l interfaccia RS232 file C temp borrar pbe italiano lezioni htm 1 of 2 13 10 1999 6 25 46 PM Indice delle lezioni La EEPROM dati 1 Scrittura e lettura dalla EEPROM DATI file C temp borrar pbe italiano lezioni htm 2 of 2 13 10 1999 6 25 46 PM Lezione 1 rm EE 33 Introduzione ai PIC Al termine di questa lezione saprete Cosa sono i PIC Come realizzare un semplice
53. LCD movlw 1 Wait ims call msDelay bsf PORTB LCD E Enables E movlw 1 Wait ims call msDelay bcf PORTB LCD E Disables E movlw 1 Wait ims call msDelay bcf PORTB LCD DBA bsf PORTB LCD DB5 bcf PORTB LCD DB6 bcf PORTB LCD DB7 bsf PORTB LCD E Enables LCD movlw 1 Wait ims call msDelay bcf PORTB LCD E Disabled LCD movlw 1 Wait ims call msDelay Set 4 bit data bus length movlw 28H call LcdSendCommand Entry mode set increment no shift movlw 06H call LcdSendCommand Display ON Curson ON Blink OFF movlw OEH call LcdSendCommand Clear display call LcdClear return E ERICA BIR RRR RB IK KCKOK E KORR ARIK ERR BLK OR KK KE OE BRAK A Se Clear LCD i RIERA di KR RARE IRR KARE BRK GR KR RR RAK RRR ABBE OK SK ERR RK IKK OK ESK GR CK eoe oe BER ERE SE ARR AER LcdClear Clear display movlw 01H Call LcdSendCommand movlw 2 Wait 2 ms call msDelay file C temp borrar pbe examples Icdterm asm 5 of 9 13 10 1999 6 53 12 PM file C temp borrar pbe examples Icdterm asm DD RAM address set lst digit movlw 80H call LcdSendCommand return KKEKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK W D7 D4 row D3 DO col Locate cursor on LCD RERRAEAAERA ART EAR RARER EKA KR ERE BRAK RRA EAR TR KR Kok BKK RIK ARERR KR RRA BAK REE LcdLocate movwf tmpLcdRegister 0 mov
54. LED1 Quando nTick vale 0 spegne LI btfss PORTB LED2 goto MainLoop decf nTick 1 btfss STATUS Z goto MainLoop bcf PORTB LED2 goto MainLoop TurnOffLedl Spegnimento led bcf PORTB LED goto MainLoop LED2 acceso No iSi inTick 0 No 51 ED 2 Ed continua a lampeggiare decrementa nTick continua a lampeggiare spegne LED2 Continua a lampeggiare Spegne LED Continua a 1 lampeggiare file C temp borrar pbe examples dblint asm 3 of 4 13 10 1999 6 51 02 PM file C temp borrar pbe examples dblint asm POSATO E aS eatin Mid e de M C EEA IE ea as C UK Mae v d Subroutine REOR UN Ke uo A A 1 1 1 EUN INI 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 D UD E Cg OUS EUCH A TS Subroutine di ritardo software Delay Chef Count celat Count 1 DelayLoop decfsz Count 1 goto DelayLoop decfsz Count 1 1 goto DelayLoop F C ULU ET Cd zZ UO file C temp borrar pbe examples dblint asm 4 of 4 13 10 1999 6 51 02 PM file C temp borrar pbe examples wdt asm RU QUK Cd AIA IRE A AAA RA DAS Pic by example WDT ASM Watch Dog Timer example c 1999 Sergio Tanzilli tanzilli picpoint com http www picpoint com picbyexample index htm PRIOR RRA EAA KAR RAR EREE EREEREER KERR EKA OK ERK AAA RK KKK RON PROCESSOR 16F84 RADIX DEC INCLUDE P16F84 INC Set
55. Le linee da RB4 a quattro pulsanti movlw 11110000B movwf TRISB amp 7FH O Uscita file C temp borrar pbe examples dblint asm 2 of 4 13 10 1999 6 51 02 PM 1 te in ingresso per TRISA e TRISB registri Ingresso te in uscita per essere collegate ai ssere collegate ai Assegna il file C temp borrar pbe examples dblint asm PRESCALER a TMRO e lo configura a 1 256 movlw 0000 movwf 0111B Commuta sul bcf STAT Spegne tutti i led collegati OPTION R EG amp 7FH primo banco dei registri US RPO bcf PORTB LED bcf PORTB LED2 bcf PORTB LED3 bcf PORTB LED4 Abilita l interrupt sul TMRO e sul cambiamento di stato delle linee RI movlw 1010 1000B movwf INTCON sulla porta B B4 5 6 7 CIRIACO e RURAL SSS A De RU RUE ee NAY CREDA OUS Loop principale LIRA IRA ESRI psc goku o Ue Ko tS KK o eme oo spot oo E coa Ray a ev Ke e MainLoop call Delay btfss PORTB LED goto TurnOnLedl goto TurnOffLedl Accensione led Led No Si TurnOnLedl bsf PORTI E DI Controlla se B I Lr LED 2 di Ritardo software acceso lo accende lo spegne decremento del contatore di lampeggi segnalazione dell interrupt e gia acceso Se e acceso decrementa il contatore nTick ad ogni lampeggio di
56. NUN CU oO WO ONG ae sue ponat goi ago e PROCESSOR 16F84 RADIX DEC INCLUDE P16F84 INC Suppress the following MPASM warning message 302 Register in operand not in bank 0 Ensure that bank bits are correct ERRORLEVEL 302 Flag configuration CONFIG 3FF1H RS232 lines TX equ 0 Tx data RX equ 1 Rx data LCD Control lines LCD_RS equ 2 Register Select LCD_E equ 3 Enable LCD data line bus LCD_DB4 equ 4 LCD data line DB4 LCD DB5 equ 5 LCD data line DB5 LCD DB6 equ 6 LCD data line DB6 LCD DB7 equ 7 LCD data line DB7 PRIORA cubo as RT vean ROIS quoe aep De Do C Vd IU ARIE ceto SSS dep UC ORO Ponte a Clock frequency related constant 4 MHz E soo Ke oes Rep qu vA NR doce A Nats ug 077 BIT DELAY equ 23 Bit delay a 9600 bps PAT RUN RIS II ERA kaw AA EUER AE eae Gas AS O MACRO Delay subroutine with watch dog timer clearing Macro parameters VALUE Delay obtained VALUE 1 4 5 1 Fosc 4 Sd abd qii petu EOE EEEE ET ax ta Dd TO DELAY MACRO VAL LOCAL REDO Er movlw VALUE movwf TmpRegister clrwdt Clear watch dog timer file C temp borrar pbe examples Icdterm asm 1 of 9 13 10 1999 6 53 12 PM file C temp borrar pbe examples Icdterm asm decfsz TmpRegister F goto REDO NDM PARE E CU ERN
57. PM file C temp borrar pbe examples seq asm Delay 25 Count clrf Count 1 DelayLoop decfsz Count 1 goto DelayLoop decfsz Count 1 1 goto DelayLoop return Ld zZ UO file C temp borrar pbe examples seq asm 2 of 2 13 10 1999 6 49 31 PM file C temp borrar pbe examples input asm SERRE AIA IRA AR eden Andes eds ese du RA DAS Pic by example INPUT ASM c 1999 Sergio Tanzilli tanzilli picpoint com http www picpoint com picbyexample index htm O RR RIA PROCESSOR RADIX INCLUDE Setup of P 16F84 DEC Pl6F84 INC C configuration flags XT oscillator Disable watch dog timer Enable power up timer Disable code protect Commuta sul secondo banco dei registri per accedere ai registri TRISA e TRISB 1 in in Ingresso uscita per essere collegate ai ingresso per essere collegate ai _ CONFIG 3FF1H LED EQU 0 LED2 EQU i LED3 EQU 2 LED4 EQU 3 sw1 EQU 4 SW2 EQU 5 SW3 EQU 6 SW4 EQU 7 ORG OCH Reset Vector Punto di inizio del programma al reset della CPU ORG 00H bsf STATUS RPO Definizione delle lin di I O 0 Uscita Definizione della porta A movlw 00011111B movwf TRISA 7FH Definizione della porta B Le linee da RBO a RB3 vengono programmate
58. Per avere una connessione tra due computer quindi necessario disporre di quattro dispositivi come visibile in figura un computer DTE collegato al suo modem DCE ed un altro modem DCE collegato al suo computer DTE In questo modo qualsiasi dato generato dal primo computer e trasmesso tramite RS232 al relativo modem verr trasmesso da questo al modem remoto che a sua volta provveder ad inviarlo al suo computer tramite RS232 Lo stesso vale per il percorso a ritroso Wide Area Network Terminal Data Cireuit Per usare la RS232 per collegare tra loro due computer vicini senza interporre tra loro alcun modem dobbiamo simulare in qualche modo le connessioni intermedie realizzando un cavo NULL MODEM o cavo invertente ovvero un cavo in grado di far scambiare direttamente tra loro i segnali dai due DTE come se tra loro ci fossero effettivamente 1 DCE file C temp borrar pbe italiano less7 passo2 htm 1 of 8 13 10 1999 6 26 19 PM Per connettere il PC al nostro circuito simuleremo invece direttamente un DCE facendo credere al PC di essere collegato ad un modem Prima di fare questo diamo uno sguardo in dettaglio al principio di funzionamento di una comunicazione seriale La comunicazione seriale asincrona Per consentire la trasmissione di dati tra il PC ed il modem lo standard RS232 definisce una serie di specifiche elettriche e meccaniche Una di queste riguarda il tipo di comunicazione seriale che si vuole implementare che pu es
59. RA EUR msDelay movwf msDelayCounter 1 eTrE msDelayCounter 0 1 ms about internal loop msDelayLoop nop file C temp borrar pbe examples Icd1 asm 2 of 6 13 10 1999 6 51 29 PM file C temp borrar pbe examples Icd1 asm decfsz goto nop decfsz goto return msDelayCounter 0 F msDelayLoop msDelayCounter 1 F msDelayLoop EREE RAAB AIRE RA BR RARER RRR OK EK BRK BRAKE BIR ARIA AK A RK AB RRR BIER ARB KKK LER Init LCD This subroutine must be called before each other lcd subroutine DERRATE RA Ro v eg AU E IA RIA Ao RR OK IN the OS ANA LcdInit movlw call 30 msDelay LGS RIONE O Reset sequenc PRECARIA AA bcf PORTB LCD RS Send a reset sequenc bsf bsf bcf bcf bsf movlw call bcf movlw PORTI DB4 B5 PORTI B PORTB B PORTB D DI D DI DB6 DB7 PORTB LCD A msDelay PORTB LCD call bsf movlw PORTB LCD Ex Call bcf movlw msDelay A PORTB LCD call bsf movlw msDelay A PORTB LCD call bcf movlw msDelay PORTB LCD call bcf bsf bcf bcf bsf movlw call bcf PORTI E B4 B5 PORTI B PORTB B PORTB UUUOUJg B6 B7 PORTB LCD A msDelay PORTB LCD E Wait 30 ms Set LCD
60. REGISTER ovvero AZZERA IL REGISTRO W che nella forma abbreviata diventa CLRW Altre sigle mnemoniche consentono di definire tutte le istruzioni che il PIC in grado di eseguire ma anche variabili costanti ed etichette label L insieme di queste sigle e le regole per ordinarle per formare un programma completo viene chiamato LINGUAGGIO ASSEMBLER Per scrivere un programma in linguaggio assembler occorre conoscere le istruzioni disponibili sul micro che si intende usare in questo caso il PIC le regole sintattiche per definire variabili parametri ecc e disporre di un editor di testo con cui digitare il nostro programma Il file di testo cos ottenuto viene denominato source o sorgente assembler Il passo successivo consiste nel tradurre il nostro sorgente assembler nella giusta sequenza di istruzioni in formato binario che il PIC in grado di capire Questo tipo di programma si chiama compilatore assembler o assemblatore Nella figura seguente viene schematizzato il flusso di operazioni ed i file generati necessari per ottenere un PIC programmato file C temp borrar pbe italiano less1 passo3 htm 1 of 3 13 10 1999 6 25 58 PM Lezione 1 passo 3 ASM ANG I Compilal ore assembler Programmatore L C E C C C C C C PIC 16084 LILILILILILILILILI Come gi detto la prima operazione da effettuare la scrittura del source assembler e la sua memorizzazione in un file di testo L est
61. RRE KAR RR Programma principale DERRER ERRE RAK LEAR KK OK KERR EE RAK CARRERE KR ERED BRR KARI ER EEE KERRE KARIERRE KK AR Start Commuta sul secondo banco dei registri per accedere ai registri TRISA e TRISB bsf movlw movwf quattro led quattro pulsanti movlw STATUS RPO Definizion Definizione del 00011111 Is TR 11 d a porta A B Definizione del Le linee da Le linee da A amp 7FH la porta B RBO RB4 B a RB3 vengono programmat a RB7 vengono programmat movwf Commuta sul TRI S 0000 B pri 7FH mo banco dei registri lin di I O 0 Uscita 1 Ingresso te in uscita per essere collegate ai te in ingresso per essere collegate ai file C temp borrar pbe examples nointrb asm 1 of 3 13 10 1999 6 50 41 PM file C temp borrar pbe examples nointrb asm bcf STATUS RPO Spegne tutti i led collegati sulla porta B bcf PORTB LED bcf PORTB LED2 bcf PORTB LED3 bcf PORTB LED4 BOR TOR OK S OK GR KOK UK OK KK OK E RARER KK CK OR KORR EI Loop principale ROEOCK KK KRE S ok oko KK KEBAB RAR EERE REER R ERRE BIKAR AEB KK BER KARE RAK A IRAE BKK MainLoop KeyCheck btfsc PORTB LED2 goto _KeyCheck comf PORTB W andlw OFOH btfsc STATUS Z
62. RTA A RA1 E una linea di I O programmabile in ingresso o in uscita dall utente Corrisponde al BIT 1 della PORTA A 3 5 i amp os alo el s a file C temp borrar pbe italiano gloss pin htm 2 of 2 13 10 1999 6 32 10 PM Yet Another Pic Programmer Yapp versione 2 7 Yet A Pic P Introduzione allo Yapp Lo Yapp un programmatore in circuit seriale compatibile con gran parte dei PICmicro che supportano la programmazione ICSPO In Circuit Serial Programming di Microchip Lo Yapp nato come tool di supporto e come esempio stesso di applicazione basata su PICmicro per il corso Pic By Example Per tale motivo viene fornito in queste pagine tutta la documentazione necessaria per la sua realizzazione schemi elettrici source manuali ecc Per facilitare quanti trovassero difficolta nel reperimento del materiale necessario alla realizzazione dello Yapp la societ ELETTROSHOP di Andrea Galizia http www elettroshop it pu fornire lo Yapp gia montato e completo di PICmicro gi programmato AVVERTENZE Note dell autore da leggere prima di realizzare o acquistare lo Yapp Per le modalit di programmazione adottate lo Yapp viene classificato secondo le specifiche Microchip come programmatore di tipo prototype o development non adatto ad un uso professionale L autore non si assume alcuna responsabilit su eventuali malfunzionamenti o danni causati dall uso dello Yapp o
63. SA TOSE Le parti in rosso evidenziano il percorso che effettua il segnale prima di arrivare al contatore TMRO Come abbiamo gi detto in precedenza la frequenza Fosc 4 pari ad un quarto della frequenza di clock Utilizzando un quarzo da 4Mhz avremo una Fosc 4 pari ad 1 MHz Tale frequenza viene inviata direttamente al registro TMRO senza subire nessun cambiamento La cadenza di conteggio che se ne ottiene quindi pari ad 1 milione di incrementi al secondo del valore presente in TMRO Ipotizziamo ora di cambiare lo stato del bit TOCS da 0 a 1 la configurazione che otteniamo la seguente TOCS core pk N TMRO register PRESCALER A LL TOSE iaia Questa volta sar il segnale applicato al pin TOCKI del PIC ad essere inviato direttamente al contatore TMRO determinandone la frequenza di conteggio Applicando ad esempio a questo pin una frequenza pari ad 100Hz otterremo una frequenza di conteggio pari a cento incrementi al secondo La presenza della porta logica XOR exclusive OR all ingresso TOCKI del PIC consente di determinare tramite il bit TOSE del registro OPTION se il contatore TMRO deve essere incrementato in corrispondenza del fronte di discesa TOSE 1 o del fronte di salita TOSE 0 del segnale applicato dall esterno Nella figura seguente viene rappresentata la corrispondenza tra l andamento del segnale esterno ed il valore assunto dal contatore TMRO in entrambe 1 casi file C temp borrar pbe ital
64. US C goto RxShift RxShift nop DI ShiftReg F DELAY BIT DELAY decfsz BitCount F goto wDB return Ei ND file C temp borrar pbe examples rs232i0 asm 7 of 7 13 10 1999 6 46 58 PM file C temp borrar pbe examples seq asm RU QUK eee EIA RE IRE A mue dese d Man DR DAS Pic by example SEQ ASM c 199 http UU EUNTEM Count Shift 9 Sergio Tanzilli tanzilli picpoint com www picpoint com picbyexample index htm k k lt lt k K k k lt lt k lt lt lt lt lt k k lt lt x lt lt lt lt lt k k lt lt x lt lt lt lt lt x x x lt PROCESSOR 16F84 RADIX DEC INCLUDE P16F84 INC No no Setup of PIC configuration flags XT oscillator Disable watch dog timer Enable power up timer Disable code protect _ CONFIG 3FF1H RG OCH ES 2 ES 1 0 b movlw 00011111B Reset Vector Program start point at CPU reset RG 00H sf STATUS RPO movwf TRISA amp 7FH movlw 11110000B m b m m MainLoop m movwf PORTB b r ovwf TRISB amp 7FH cf STATUS RPO ovlw 00000001B ovwt Shift ovf Shift W cf STATUS C Tf Shift F btfsc Shift 4 swapf Shift F call Delay goto MainLoop Subroutines file C temp borrar pbe examples seq asm 1 of 2 13 10 1999 6 49 31
65. Una di queste istruzioni la GOTO dall inglese GO TO vai a che ci permette di cambiare la sequenza di esecuzione e di saltare direttamente ad un qualsiasi punto all interno della memoria programma e di continuare quindi l esecuzione a partire da quel punto Facciamo un esempio ORG 00H Pointl movlw 10 goto Pointl Al reset il PIC eseguira l istruzione MOVLW 10 memorizzata alla locazione OOOOH la quale inserir nell accumulatore il valore decimale 10 quindi passer ad eseguire l istruzione successiva GOTO Pointl Questa istruzione determiner un salto incondizionato alla locazione di memoria puntata dalla label Point ovvero di nuovo alla locazione OOOOH Nel suo insieme quindi questo programma non far altro che eseguire continuamente le due istruzioni elencate Durante questo ciclo o loop per determinare quale sar l istruzione successiva da eseguire il PIC utilizza uno speciale registro denominato PROGRAM COUNTER dall inglese contatore di programma la cui funzione proprio quella di mantenere traccia dell indirizzo che contiene la prossima istruzione da eseguire Questo registro viene incrementato automaticamente ad ogni istruzione eseguita per determinare il passaggio all istruzione successiva Al momento del RESET del PIC il PROGRAM COUNTER viene azzerato determinando cos l inizio dell esecuzione a partire dall indirizzo 0000H L istruzione GOTO consente l inserimento a programma di un nuovo valore nel PROGR
66. a movlw 00011111B Questa istruzione sta a significare MOVE LITERAL TO W REGISTER ovvero muovi un valore costante nell accumulatore Come avremo modo di vedere pi avanti l accumulatore un particolare registro utilizzato dalla CPU in tutte quelle situazioni in cui vengono effettuate operazioni tra due valori oppure in operazioni di spostamento tra locazioni di memoria In pratica un registro di appoggio utilizzato dalla CPU per memorizzare temporaneamente un byte ogni volta che se ne presenta la necessit Il valore costante da memorizzare nell accumulatore 00011111B ovvero un valore binario a 8 bit dove il bit pi a destra rappresenta il bit 0 o bit meno significativo Nell istruzione successiva movwf TRISA il valore 00011111 viene memorizzato nel registro TRISA come per il registro STATUS anche TRISA definito tramite una direttiva EQU la cui funzione quella di definire il funzionamento di ogni linea di I O della porta A In particolare ogni bit ad uno del registro TRISA determina un ingresso sulla rispettiva linea della porta A mentre ogni 0 file C temp borrar pbe italiano less1 passo4 htm 2 of 6 13 10 1999 6 25 59 PM Lezione 1 passo 4 determina un uscita Nella seguente tabella viene riportata la configurazione che assumeranno i pin del PIC dopo l esecuzione di questa istruzione 0 RAO 17 Ingresso 1 RAI Ingresso 2 A2 Ingresso Ingresso Ingresso Come possibi
67. a spiegare pi avanti Le prime 12 locazioni della pagina 0 da 00H a 0BH e della pagina 1 da 80H a 8BH sono quelle riservate alle funzioni speciali per il funzionamento del PIC e come gi detto non possono essere utilizzate per altri scopi Le 36 locazioni in pagina 0 indirizzate da OCH a 2FH possono essere utilizzate liberamente dai nostri programmi per memorizzare variabili contatori ecc Nel nostro esempio LED ASM la direttiva ORG OCH indica proprio l indirizzo di inizio dell area dati utilizzabile dal nostro programma La direttiva che segue file C temp borrar pbe italiano less2 passo1 htm 2 of 4 13 10 1999 6 26 02 PM Lezione 2 passo 1 Count RES 2 File Address File Address s mM E N 00h Indirect addr Indirect addr 80h riserva uno spazio di due locazioni che il programma utilizzer per memorizzare i ih DEN m contatori di ritardo della subroutine Delay 02h PCL PCL 82h 03h STATUS STATUS 83h 04h FSR FSR 84h 05h PORTA TRISA 85h 06h PORTB TRISB 86h 07h 87h 08h EEDATA EECONI 88h 09h EEADR EECON2 89h OAh PCLATH PCLATH 8Ah OBh INTCON INTCON 8Bh OCh 8Ch 68 General Mapped Purpose accesses registers in Bank 0 SRAM 4Fh CFh 50h Doh 7Fh FFh Bank 0 Bank 1 I registri specializzati del PIC vengono utilizzati molto di frequente nei programmi Ad esempio si ricorre alla coppia di registri specializzati TRISA e TRISB per definire quali linee di I O sono in ingres
68. aliano less7 passo2 htm 5 of 8 13 10 1999 6 26 19 PM Lezione 7 Passo 2 RxChar celti Shittkeg quindi mette a 8 il registro BitCount usato per il conteggio del numero di bit in arrivo moviw 8 movwf BitCount a questo punto attende un periodo pari a circa 1 bit e mezzo in modo da far scorrere il tempo necessario alla trasmissione dello start bit e campionare il valore del BIT 0 circa a met del tempo di durata DELAY BIT_DELAY BIT_DELAY 2 Wait 1 5 bit a questo punto legge lo stato della linea RX ed inserisce il valore letto nel flag di CARRY C del registro STATUS e quindi effettua una istruzione di ROTATE RIGHT F TROUGHT CARRY RRF con il registro ShiftReg in modo da spostare verso destra tutti 1 bit del registro ShiftReg ed inserire nel bit pi significativo il valore appena letto dalla linea RX come riportato nella seguente figura E c questa lettura avviene per otto volte ad intervalli di tempo pari alla durata di un bit in modo da campionare il valore della linea RX sempre al centro del bit in ricezione D6 b5 D4 Ds p2 p1 bo Registro f wDB btfss PORTA RX goto BxBitL RXBICtH nop bar STATUS goto Rx5hift RxBitL ber SIATUS G quoto RShirft Rxohitt nop rrt ShiftReg F attende per un periodo di tempo pari ad 1 bit DELAY BIT DELAY continua a campionare se non ha ancora letto tutti ed otto i bit dectsz BitCount F goto wDB esce da RxChar dopo aver letto l ultimo bit file C temp
69. amples wdt asm 2 of 3 13 10 1999 6 51 18 PM file C temp borrar pbe examples wdt asm TurnOffLedl bcf PORTB LED goto MainLoop BRICK KK RAK IORI RR OK E BRK ERK ERA EK IK GR KK KK CK BRK EERE GKORKUKGOK BK KIER AR Software delay DEE EERE RARA RARA RA FARETE CK CK OK RRA RK OK KK KUKOK GE BRR ARIK AK EEE RAB AE KAR CK OK BK KK AR Delay cuf Count CLET Count 1 DelayLoop decfsz Count 1 goto DelayLoop decfsz Count 1 1 goto DelayLoop return END file C temp borrar pbe examples wdt asm 3 of 3 13 10 1999 6 51 18 PM file C temp borrar pbe examples Icd1 asm RU QUA ee I RO a Ds ee IRR aa E rue nds eoe du UR pO DA IG Pic by example LCD1 ASM c 1999 Sergio Tanzilli http www picpoint com picbyexample index htm LUNO qu EN c uo pu A at NUN CU oO WO ONG ae sue ponat goi ago e PROCESSOR 16F84 RADIX DEC INCLUDE P16F84 INC Suppress MPASM warning message 302 picbyexample picpoint com Register in operand not in bank 0 Ensure that bank bits are correct ERRORLEVEL 302 __CONFIG 3FF1H LCD Control lines LCD_RS LCD_E LCD data line bus LCD DB4 LCD DB5 LCD DB6 LCD DB7 tmpLcdRegister msDelayCounter Start equ 2 Register Select equ
70. ano le istruzioni di salto del PIC file C temp borrar pbe italiano less2 passo2 htm 2 of 2 13 10 1999 6 26 03 PM Lezione 2 passo 3 E 7 PI Il Program Counter e lo Stack In questo passo analizzeremo il funzionamento del Program Counter e dello Stack due componenti importanti per la comprensione delle istruzioni di salto e chiamata a subroutine RAD RAO Rd RB EEPROM Program Memory 1K x14 RTCC REGISTER FILE EEPROM Data Mem ary B46 OSC2ICLKOLIT MELE dd OS CA LEKIN Wee Come abbiamo gia visto nei passi precedenti 11 PIC16F84 inizia l esecuzione del programma a partire dal vettore di reset Reset Vector ovvero dall istruzione memorizzata nella prima locazione di memoria indirizzo OOOOH Dopo aver eseguito questa prima istruzione passa quindi all istruzione successiva memorizzata nella locazione 0001H e cosi via Se non esistesse nessuna istruzione in grado di influenzare in qualche modo l esecuzione del programma il PIC arriverebbe presto ad eseguire tutte le istruzione presenti nella sua memoria fino all ultima locazione disponibile Sappiamo ovviamente che non cosi e che qualsiasi microprocessore o linguaggio di programmazione dispone di istruzioni di salto ovvero di istruzioni in grado di modificare il flusso di esecuzione del programma in base alle esigenze del programmatore file C temp borrar pbe italiano less2 passo3 htm 1 of 3 13 10 1999 6 26 04 PM Lezione 2 passo 3
71. ano less4 intro htm 13 10 1999 6 26 08 PM Lezione 4 Passo 1 rw PI Il registro contatore TMRO Vediamo ora cosa e come funziona il registro TMRO EEPROM Program Memory lk x14 TOCKI REGISTER Pd FILE EEPROM Data Mem ary 64 x 68 OSC2ICLKROLIT MELE dd OS 51 LIN We Il registro TMRO un contatore ovvero un particolare tipo di registro il cui contenuto viene incrementato con cadenza regolare e programmabile direttamente dall hardware del PIC In pratica a differenza di altri registri il TMRO non mantiene inalterato il valore che gli viene memorizzato ma lo incrementa continuamente se ad esempio scriviamo in esso il valore 10 con le seguenti istruzioni movlw T0 movwf TMRO dopo un tempo pari a quattro cicli macchina il contenuto del registro comincia ad essere incrementato a 11 12 13 e cos via con cadenza costante e del tutto indipendente dall esecuzione del resto del programma file C temp borrar pbe italiano less4 passo1 htm 1 of 4 13 10 1999 6 26 09 PM Lezione 4 Passo 1 Se ad esempio dopo aver inserito un valore nel registro TMRO eseguiamo un loop infinito movlw 10 movwf TMRO loop goto loop il registro TMRO viene comunque incrementato dall hardware interno al PIC contemporaneamente all esecuzione del loop Una volta raggiunto il valore 255 il registro TMRO viene azzerato automaticamente riprendendo quindi il conteggio non dal valore originariamente impostato ma da ze
72. ante siate pi che sicuri che il circuito sia stato realizzato correttamente e che il PIC sia stato ben programmato ricordatevi a proposito di programmare l oscillatore in modalit XT e di disabilitare il Watch Dog Timer sar forse necessario regolare il contrasto del display LCD agendo sul trimmer R2 connesso al pin 3 del display Le linee Enable E e Register Select RS dell LCD Per poter visualizzare una scritta sul display il PIC deve inviare tutta una serie di comandi tramite le linee del bus dati linee da DB4 a DB7 Per far questo utilizza due linee di controllo con cui comunica al display l operazione di trasferimento che cerca di compiere sul bus Le due linee di controllo sono la linea Enable pin 6 dell LCD e Register Select pin 4 dell LCD Con la linea Register Select RS il PIC segnala al display che il dato presente sul bus un comando RS 0 o un dato da visualizzare RS 1 Tramite 1 comandi il PIC pu segnalare al display il tipo di operazione da compiere come ad esempio spostare il cursore o pulire lo schermo Con i dati il PIC pu inviare al display direttamente i caratteri ASCII da visualizzare La linea Enable abilita il display a leggere il comando o il dato inviato sul bus dal PIC 11 PIC deve preoccuparsi di aver gi inviato sul bus dati il comando o il dato giusto prima di mettere a 1 il segnale di enable Multiplex sul bus dati Sia i comandi che i dati sono rappresentati da numeri a 8 bit come pos
73. anti basta inviare un unico comando 20h Lettura stato pulsanti Quando il PIC riceve questo comando dalla RS232 legge lo stato dei bit RB4 RB5 RB6 ed RB7 ed invia un unico codice al PC che riflette lo stato dei quattro pulsanti Di questo codice solo i bit 0 1 2 3 indicano lo stato dei pulsanti file C temp borrar pbe italiano less7 passo3 htm 1 of 3 13 10 1999 6 26 20 PM MC EN Funzionamento del Power Down Mode Il Power Down Mode o Sleep Mode un particolare stato di funzionamento del PICmicro utilizzato per ridurre il consumo di corrente nei momenti in cui il PICmicro non utilizzato perch in attesa di un evento esterno Se prendiamo come esempio un telecomando per apricancello o per TV vediamo che per la maggior parte del tempo il PICmicro rimane in attesa che qualcuno prema un tasto Appena premuto il PICmicro effettua una breve trasmissione e si rimette di nuovo in attesa della pressione del prossimo tasto Il tempo di utilizzo effettivo della CPU del PICmicro quindi limitato ai pochi millisecondi necessari per effettuare la trasmissione mentre per diverse ore non richiesta nessuna elaborazione particolare Per evitare di consumare inutilmente la limitata energia dalla batteria possibile spegnere buona parte dei circuiti di funzionamento del PICmicro e riaccenderli solo in corrispondenza di un qualche evento esterno Vediamo come L istruzione SLEEP L istruzione SLEEP viene utilizzate per mettere il PIC in P
74. arsi dell evento con il programma principale Gran parte degli aspetti legati alla gestione dell interrupt vengono inoltre trattati direttamente dall hardware interno del PIC per cui il tempo di risposta all evento praticamente immediato Tipi di evento e bit di abilitazione Il PIC16F84 in grado di gestire in interrupt quattro eventi diversi vediamo quali sono 1 Il cambiamento di stato sulla linea RBO External interrupt RBO INT pin 2 La fine del conteggio del registro TMRO TMRO overflow interrupt 3 Il cambiamento di stato su una delle linee da RB4 ad RB7 PORTB change interrupts 4 La fine della scrittura su una locazione EEPROM EEPROM write complete interrupt L interrupt su ognuno di questi eventi pu essere abilitato o disabilitato indipendentemente dagli altri agendo sui seguenti bit del registro INTCON INTE bit 4 se questo bit viene messo a 1 viene abilitato l interrupt sul cambiamento di stato sulla linea RBO TOIE bit 5 se questo bit viene messo a 1 viene abilitato l interrupt sulla fine del conteggio del registro TMRO e RBIE bit 3 se questo bit viene messo a 1 viene abilitato l interrupt sul cambiamento di stato su una delle linee da RB4 ad RB7 e EEIE bit 6 se questo bit viene messo a 1 viene abilitato l interrupt sulla fine della scrittura su una locazione EEPROM Esiste inoltre un bit di abilitazione generale degli interrupt che deve essere settato anch esso ad uno ovvero il bit GIE Global Interrupt
75. ato dal PC sulla porta RS232 In pratica lo Yapp si occupa di tradurre i comandi dal formato seriale asincrono a 9600 baud 8 1 N nel formato Microchip e viceversa Tutte le temporizzazioni interne necessarie alla corretta programmazione vengono gestite dal micro anch esso un PIC presente sullo Y APP liberando il programma di gestione su PC dalle problematiche di gestione delle temporizzazione Questa caratteristica ci consente di scrivere il programma di gestione con linguaggi ad alto livello tramite i quali risulta ifficile gestire temporizzazioni precise Il collegamento tra lo Yapp e la scheda da programmare avviene tramite un connettore a sei contatti sul quale sono presenti 1 seguenti segnali ES Funzione MCLR Da collegare al pin MCLR del PIC da programmare 2 DATA Da collegare al pin RB7 del PIC da programmare file C temp borrar pbe italiano hardware yapp htm 4 of 7 13 10 1999 6 32 21 PM Yet Another Pic Programmer 3 CLOCK Da collegare al pin RB6 del PIC da programmare 4 GND Massa 5 N C Questo pin non viene collegato e serve come chiave per evitare inserzioni errate 6 VCC Tensione di alimentazione proveniente dalla scheda prototipo viene utilizzata per alimentare lo YAPP e deve essere compresa tra 12 6 e 14 6 volt Schema elettrico Come possiamo vedere dallo schema elettrico il funzionamento dello Yapp basato a sua volta su un PIC in particolare un 16F84 U1 di cui viene fornito il sorgente in ass
76. avverte azzerando nuovamente il flag WR del registri EECONI Se nel nostro programma decidiamo di aspettare che la cella sia stata programmata prima di proseguire dovremo inserire il seguente loop di attesa WriteDoneLoop btfsc EECON1 WR Writing done qoto WriteDoneLoop No wait Yes continue Per evitare questa attesa possibile richiedere all hardware del PIC di generare un interrupt di avvenuta programmazione Per scrivere un nuovo valore nella stessa cella EEPROM non necessario effettuare operazioni di cancellazioni della cella ma semplicemente ripetere le stesse operazioni di scrittura Lettura di un dato da EEPROM Vediamo ora come si rilegge quello che abbiamo appena scritto sulla locazione di memoria EEPROM Assicuriamoci anzitutto di essere tornati sul banco registri 0 azzerando nuovamente il flag RPO del regsitri STATUS ber STATUS RPO Swap to bank 0 Quindi scriviamo in EEADR l indirizzo di memoria che vogliamo leggere moviw O file C temp borrar pbe italiano less8 passo1 htm 2 of 3 13 10 1999 6 58 58 PM Lezione 8 Passo 1 movwf EEADR Comunichiamo all hardware del PIC che intendiamo leggere la locazione di memoria indirizzata da EEADR settando il flag RD ReaD del registro di controllo EECON1 Ricordiamoci pero di passare prima al banco registri 1 dove si trova appunto il registro EECONI bsf STATUS RPO Swap Lo bank 1 st EECONI RD A questo punto possiamo immediatamente leggere dal
77. borrar pbe italiano less7 passo2 htm 6 of 8 13 10 1999 6 26 19 PM Lezione 7 Passo 2 return a questo punto nel registri ShiftReg dovrebbe esserci il byte trasmesso dal PC Una volta letto il byte proveniente dal PC il nostro programma d esempio controlla se il byte ricevuto un carattere di controllo oppure un normale carattere da visualizzare su LCD L unico carattere di controllo implementato dal nostro miniterminale il Form Feed FF corrispondente al codice ASCII decimale 12 La trasmissione di questo carattere verso una stampante determina l avanzamento di un foglio di carta Nel nostro caso pulisce il contenuto dell LCD Il form feed pu essere trasmesso dal nostro simulatore di terminale su PC premendo il tasto CTRL seguito dalla lettera L Questa la parte di codice che gestisce la ricezione di un Form Feed CheckFormFeed movlw 12 xorwf ShiftReg W bttss STATUS 2 goto _CheckFormFeed plrti xLurPos Glrr yCurPos call Lodclear goto MainLoop CheckFormFeed in pratica viene controllato se il valore ricevuto dalla subroutine RxChar pari a 12 In caso affermativo vengono azzerati i registri xCurPos e yCurPos che mantengono il valore X Y del cursore carattere su display Quindi viene chiamata la subroutine LedClear che si occupa di inviare i comandi corretti al display LCD per azzerarne il contenuto Nel caso non sia stato trasmetto un FF dal PC il carattere ricevuto viene inviato nudo e crudo al display con
78. call incf movlw xorwf btfss goto clrf incf movlw xorwf btfss goto clrf swapf iorwf call return putTempReg yCurPos W xCurPos W LcdLocate putTempReg W LcdSendData xCurPos F 16 xCurPos W STATUS Z moveLcdCursor xCurPos yCurPos F 2 yCurPos W STATUS Z moveLcdCursor yCurPos yCurPos W xCurPos W LcdLocate RUECK OK RR RAAB PERE PERRERA BR RAR ERIE KBR E OK kta i IR ARK EK IRL ERIK HE BBR RRR OK RRR Init LCD This subroutine must be called before each other lcd subroutine mu RR ERU ee KE wok IA ec I AI TRO nu A TAG AS A LcdInit movlw call 30 msDelay Saa AE RA Reset sequenc SORA ARA bcf Send a bsf bsf bcf bcf bsf movlw call bcf movlw call PORTB LCD RS reset sequenc PORTB LCD DB4 PORTB LCD DB5 PORTB LCD DB6 PORTB LCD DB7 PORTB LCD E 5 msDelay PORTB LCD E 1 msDelay Wait 30 ms Set LCD command mode to LCD Wait 1 Disabl Enables LCD Wait 5 ms les LCD ms file C temp borrar pbe examples Icdterm asm 4 of 9 13 10 1999 6 53 12 PM file C temp borrar pbe examples Icdterm asm bsf PORTB LCD_E Enables LCD movlw 1 Wait ims call msDelay bcf PORTB LCD E Disables
79. cipale Il source d esempio che andremo ad analizzare disponibile nel file INTRB ASM Proviamo a compilarlo ed a eseguirlo utilizzando lo stesso schema elettrico realizzato nella lezione 3 file example3 pdf in formato Acrobat Reader 12Kb Una volta scaricato il programma INTRB ASM nella scheda PicTech noteremo che il LED 1 lampeggia esattamente come avveniva con il programma LED ASM Proviamo ora a premere uno qualsiasi dei tasti da SW1 a SW4 e vedremo che il LED 2 si accende immediatamente e rimane acceso per un tempo pari a 3 lampeggi del LED 1 In pratica mentre il loop principale derivato dal vecchio LED ASM continua a far lampeggiare il LED 1 utilizzando un ritardo software introdotto dalla subroutine Delay il PIC in grado di accorgersi della pressione di un tasto e di segnalarlo immediatamente sul LED 2 senza influenzare in maniera evidente la frequenza di lampeggio di LEDI Prima di analizzare il source INTRB ASM vediamo la differenza di comportamento con un altro source che effettua le stesse operazioni ma senza ricorrere agli interrupt A questo proposito compiliamo ed inseriamo nella scheda PicTech il programma NOINTRB ASM Noteremo che l accensione del LED 2 in corrispondenza alla pressione di un tasto leggermente ritardata in quanto la lettura dello stato delle linee RB4 7 non viene effettuata dall hardware di gestione dell interrupt ma direttamente dal programma principale ad ogni ciclo di loop Il leggero ritardo qu
80. circuito di prova Come scrivere e compilare un semplice programma in assembler Come programmare un PIC Contenuti della lezione 1 1 Che cosa sono i PIC 2 Realizziamo un semplice lampeggiatore a led Scrittura e compilazione di un programma in assembler Analizziamo un source assembler Compiliamo un source assembler Programmiamo il PIC QN o apo sh dps file C temp borrar pbe italiano less1 intro htm 13 10 1999 6 25 56 PM Lezione 1 passo 1 KE Ge gie Che cosa sono i PIC I PIC sono dei circuiti integrati prodotti dalla Microchip Technology Inc che appartengono alla categoria dei microcontroller ovvero quei componenti che integrano in un unico dispositivo tutti i circuiti necessari a realizzare un completo sistema digitale programmabile Come si pu vedere in figura Una CPU Central Processor Unit ovvero unit centrale di elaborazione il cui scopo interpretare le istruzioni di programma Una memoria PROM Programmable Read Only Memory ovvero memoria programmabile a sola lettura in cui sono memorizzare in maniera permanente le istruzioni del programma da eseguire Una memoria RAM Random Access Memory ovvero memoria ad accesso casuale utilizzata per memorizzare le variabili utilizzate dal programma Una serie di LINEE DI I O per pilotare dispositivi esterni o ricevere impulsi da sensori pulsanti ecc Una serie di dispositivi ausiliari al funzionamento quali generatori di clock
81. co dei registri bcf STATUS RPO Spegne tutti i led collegati sulla porta B bcf PORTB LED bcf PORTB LED2 bcf PORTB LED3 bcf PORTB LED4 e linee da RBO a RB3 vengono programmate in uscita per essere collegate ai Le linee da RB4 a RB7 vengono programmate in ingresso per essere collegate ai Abilita l interrupt sul cambiamento di stato delle linee RB4 5 6 7 movlw 10001000B movwf INTCON Wo RO Ke OU up KE OS Adeo ue ERA AR RE USUS ORENSE Loop principale BRUM Be A Ka TR PR AUR My KU A KU people un tue v Eo RE UR QURE CU MainLoop call Delay Ritardo software btfss PORTB LED Led acceso goto TurnOnLedl1 No lo accende goto TurnOffLedl Si lo spegne Accensione led decremento del contatore di lampeggi TurnOnLedl bsf PORTB LI eal DI Controlla se LED 2 di segnalazione dell interrupt e gia acceso Se e acceso decrementa il contatore nTick ad ogni lampeggio di file C temp borrar pbe examples intrb asm 2 of 3 13 10 1999 6 50 01 PM file C temp borrar pbe examples intrb asm LED1 Quando nTick vale 0 spegne LED 2 btfss PORTB LED2 LED2 acceso goto MainLoop No continua a lampeggiare decf nTick 1 Si decrementa nTick btfss STATUS Z inTick 0 goto MainLoop No continua a lampeggiare bcf PORTB 2 Si spegne LED2 goto MainLoop Continua a lampeggiare
82. command mode to LCD Wait Disabl Wait 1 Disabl Wait 1 Wait 1 Enables E Enables LCD Wait 5 ms les LCD ms Enables LCD ms les LCD ms Disab Wait 1 ms es E Disabl lms Enables LCD Wait 1 ms led LCD file C temp borrar pbe examples Icd1 asm 3 of 6 13 10 1999 6 51 29 PM file C temp borrar pbe examples Icd1 asm movlw 1 Wait ims call msDelay Set 4 bit data bus length movlw 28H call LcdSendCommand Entry mode set increment no shift movlw 06H call LcdSendCommand Display ON Curson ON Blink OFF movlw OEH call LcdSendCommand Clear display call LcdClear return aaa ui L E RER IR OK CK OK EK EROR KBR IRR BIR EE TR AK ARLE ABBR BPR ACL RK OK K ER Clear LCD RIK EE RR RER REEERE EERE RARA REE RRB AK RRR ABBA SK RRR RK BKK RIK ABBR KR KERE BKK RRR LcdClear Clear display movlw 01H Call LcdSendCommand movlw 2 Wait 2 ms call msDelay DD RAM address set 1st digit movlw 80H call LcdSendCommand return PRICE KOKRGKCK RAK LRA RAR EK KBE KK LK RARER E KERRE KK OE EAR AK IK AOR RK ABBE LPR ARK OK KORR Locate cursor on LCD W D7 D4 row D3 DO col DORATA RIA eg UU KDE A E NOE RU A I A E RAI tu E TREN u NN LcdLocate movwf tmpLcdRegister 0 movlw 80H movwf tmpLcdReg
83. cursor on 0 0 position ETEE xCurPos CITE yCurPos Wait until receives a start bit from RS232 line MainLoop btfsc PORTA RX Received a start bit goto MainLoop No wait call RxChar Yes read the byte on receiving CheckFormFeed movlw 12 xorwf ShiftReg W btfss STATUS Z goto _CheckFormF eed CITE xCurPos CITE yCurPos call LcdClear goto MainLoop _CheckFormFeed movf ShiftReg W call putchar goto MainLoop PRICK EAR RARA BRK Sau S RE RIKER BIR EAR AK IK KK RK RRR BLK AR RAR RRR Delay subroutine W Requested delay time in ms clock 4MHz PERA RRR RR RK BRR EREE EERE s E ARIK EK IRL RBI HE BRA RRA OK RRR msDelay movwf msDelayCounter 1 GIFE msDelayCounter 0 1 ms about internal loop msDelayLoop nop decfsz msDelayCounter 0 F goto msDelayLoop nop decfsz msDelayCounter 1 YF goto msDelayLoop return RER YKUN TORRE REE RAR LRA ER KK REOR AK RB BRK COR UK KK BAR RRR RK IKK RIERA RAR KER KEE ICE ER Put a char to xCurPos yCurPos position on LCD W Char to show xCurPos x position yCurPos y position xCurPos and yCurPos will be increase automaticaly RUKUKUE RICE SKOKOK KOKORCKOKGR RI KERR E KE REL ERE KAR RAITRE KORG SE SR KE EK OK OK ERE COR SK RI HR BR KERE RAK RR file C temp borrar pbe examples Icdterm asm 3 of 9 13 10 1999 6 53 12 PM file C temp borrar pbe examples Icdterm asm putchar moveLcdCursor movwf swapf iorwf call movf
84. da zero Se lo si iniziali a a 6 dovra essere incrementato 256 6 250 volte prima passare per lo zero movlw 6 movwf TMRO registro Count viene inizializzato a 125 in quanto il suo scopo e far uScire il loop movlw 125 movwf Count Loop di conteggio DelayLoop IMRO vale 0 mo bt go vf fss to movlw movwf de go e zZ cfsz to turn TMR0 W STATUS Z DelayLoop No aspetta 6 Si reimposta TMRO e controlla se TMRO e passato per 125 volte per lo zero Count 1 DelayLoop file C temp borrar pbe examples seqtmr0 asm 3 of 3 13 10 1999 6 49 49 PM file C temp borrar pbe examples intrb asm SERIA IA RRC IRE IA a ins desde DAS Pic by example INTRB ASM c 1999 Sergio Tanzilli tanzilli picpoint com http www picpoint com picbyexample index htm O RR RIA PROCESSOR 16F84 RADIX DEC INCLUDE P16F84 INC Setup of PIC configuration flags XT oscillator Disable watch dog timer Enable power up timer Disable code protect __CONFIG 3FF1H LED EQU 0 LED2 EQU I LED3 EQU 2 LED4 EQU 5 ORG OCH Count RES 2 nTick RES 1 Registro utilizzato per contare il numero di lampeggi del LED 1 Reset Vector Punto di inizio del programma al reset della CPU ORG 00H Salta al corpo principale del programma Questo jump necessario per evitare tutta la parte
85. data pi avanti in questo corso BSL PORIB LED Con questa istruzione viene effettuata la prima operazione che ha qualche riscontro all esterno del PIC In particolare viene acceso il led collegato alla linea RBO PORTB una costante definita in P16F84 INC e consente di referenziare il file register corrispondente alle linee di I O della porta B mentre LED il numero della linea da mettere a 1 Se ben ricordate all inizio del source la costante LED stata definita pari a 0 quindi la linea interessata sar RBO MainLoop Questa linea contiene una label ovvero un riferimento simbolico ad un indirizzo di memoria Il valore della label come detto in precedenza viene calcolato in fase di compilazione in base al numero di istruzioni alle direttive ORG e alle altre istruzione che in qualche modo allocano spazio nella memoria del PIC In questo caso se contiamo le istruzioni inserite a partire dall ultima direttiva ORG possiamo calcolare il valore che verr assegnato a MainLoop ovvero 07H In realt il valore che assumono le label non ha molta importanza in quanto il loro scopo proprio quello di evitare di dover conoscere la posizione precisa degli opcode nella memoria del PIC permettendo comunque di referenziare una determinata locazione di memoria In questo caso la label MainLoop viene utilizzata come punto di ingresso di un ciclo dall inglese Loop di accensione e spegnimento del led ovvero una parte di codice che verr ripetuta cic
86. de al BIT 2 della PORTA B RB3 E una linea di I O programmabile in ingresso o in uscita dall utente Corrisponde al BIT 3 della PORTA B REED el el file C temp borrar pbe italiano gloss pin htm 1 of 2 13 10 1999 6 32 10 PM Descrizione dei pin del PIC1F84 RB4 E una linea di I O programmabile in ingresso o in uscita dall utente Corrisponde al BIT 4 della PORTA B RB5 E una linea di I O programmabile in ingresso o in uscita dall utente Corrisponde al BIT 5 della PORTA B RB6 E una linea di I O programmabile in ingresso o in uscita dall utente Corrisponde al BIT 6 della PORTA B RB7 E una linea di I O programmabile in ingresso o in uscita dall utente Corrisponde al BIT 7 della PORTA B VDD E il terminale positivo di alimentazione del PIC In tutte e tre le versioni disponibili del PIC16F84 commercial industrial e automotive la tensione pu assumere un valore che va da un minimo di 2 0 volt ad un massimo di 6 0 volt OSC2 CLKOUT E un pin di connesione nel caso venga utilizzato un quarzo per generale il clock E l uscita del clock nel caso venga applicato un oscillatore RC o un oscillatore esterno OSCI CLKIN E un pin di connesione nel caso venga utilizzato un quarzo o un circuito RC per generare il clock E l ingresso del clock nel caso venga utilizzato un oscillatore esterno RAO E una linea di I O programmabile in ingresso o in uscita dall utente Corrisponde al BIT 0 della PO
87. di codice per la gestione degli interrupt goto Start interrupt vector Punto di inizio per tutte le subroutine di gestione degli interrupt ORG 04H PORRI AR eO u S kukaa 202 1212 ERESIA ARA RES AUS Interrupt handler moe RR puce go E E UC 212 2 gt 2 2 2 2 2 2 2 2 2 2 2 a a E Accende il led 2 per segnalare che c e stato un interrupt bsf PORTB LED2 Inizializza il contatore di lampeggi del LED movlw 3 movwf nTick Azzera nuovamente il flag RBIF per consentire all interrupt di ripetersi file C temp borrar pbe examples intrb asm 1 of 3 13 10 1999 6 50 01 PM file C temp borrar pbe examples intrb asm bcf INTCON RBIF Ritorna al programma principale retfie EERE ERRE EK ICR KR ARIK RK BIKAR RRE KL RR BRK ERK ERK EK IK GR RIK BRK RRR OK REKER BRA LER Programma principale DERRER EKRE RAK REAR REAR KEE OK OK OK RAR Sik S s BERR ARIK IK KIER RARER UK KE KIER CK OK BKK A Start Commuta sul secondo banco dei registri per accedere ai registri TRISA e TRISB bsf STATUS RPO Definizione delle lin di I O 0 Uscita 1 Ingresso Definizione della porta A movlw 00011111B movwf TRISA amp 7FH Definizione della porta B quattro led quattro pulsanti movlw 11110000B movwf TRISB amp 7FH Commuta sul primo ban
88. e il valore letto Increment Address 000110 Incrementa il puntatore alla locazione corrente nella memoria dati configurazione programma Begin Programming 001000 Programma la locazione corrente Load Data for Data Memory 000011 Invia al PIC il prossimo valore da scrivere in memoria dati Al codice comando segue immediatamente il dato da memorizzare file C temp borrar pbe italiano hardware yapp htm 3 of 7 13 10 1999 6 32 21 PM Yet Another Pic Programmer Read Data from Data Memory 000101 Legge dal PIC la locazione corrente dalla memoria dati Appena riceve questo comando il PIC trasmette al programmatore il valore letto Bulk Erase Program Memory 001001 Cancella l intera memoria programma Bulk Erase Data Memory 001011 Cancella l intera memoria dati Il PIC16F84 dispone internamente di tre aree di memoria distinte programmabili dall esterno l area programma pari ad kbyte l area dati pari a 64 byte e l area configurazione pari a 8 byte Tutte le aree di memoria sono implementate su FLASH Le sole aree di programma e dati possono essere lette dall esterno Per poter scrivere in una qualsiasi locazione il programmatore deve inviare al PIC uno dei comandi LOAD seguito da 14 bit contenenti il dato da memorizzare Volendo ad esempio scrivere nella locazione 0 della memoria programma baster inviare al PIC la sequenza Load Data for Program Memory valore a 14 bit Begin Programming Il comando Load Data trasferisce semplicemente i
89. e tutti i cicli di funzionamento interni al chip Da questa frequenza dipende la quasi totalit delle operazioni interne ed in particolare la velocit con cui il PIC esegue le istruzioni del programma Nel caso del PIC16F84 04 P tale frequenza pu raggiungere un massimo di 4Mhz da cui si ottiene una velocit di esecuzione delle istruzioni pari a 1 milione di istruzioni al secondo Nel nostro caso per la generazione del clock viene utilizzato un quarzo esterno da 4 MHz e due condensatori da 22pF Il pin RBO pin 6 una delle linee di I O disponibili sul PIC per i nostri scopi In questo caso questa linea e stata collegata ad un led tramite una resistenza di limitazione Il connettore J1 uno strip di pin da stampato serve solo nel casi si desideri programmare il PIC usando il programmatore Yapp Se si usa un programmatore diverso non necessario montare questo connettore Per maggiori informazioni sullo Yapp cliccare qui Una volta terminato il cablaggio del circuito andiamo al passo successivo per apprendere come scrivere il programma che il PIC dovr eseguire file C temp borrar pbe italiano less1 passo2 htm 13 10 1999 6 25 57 PM Lezione 1 passo 3 Scrittura e compilazione di un programma in assembler Come per qualsiasi sistema a microprocessore anche per il PIC necessario preparare un programma per farlo funzionare Un programma costituito da una sequenza di instruzioni ognuna delle quali identifica univocamente una
90. effettua questa istruzione prima del termine del conteggio allora si assume che il programma si bloccato per qualche motivo e si effettua il Reset della CPU Il periodo minimo raggiunto il quale la CPU viene resettata di circa 18ms dipende dalla temperatura e dalla tensione di alimentazione E possibile per assegnare il PRESCALER al Watch Dog Timer per ottenere ritardi pi lunghi fino a 2 3 secondi Per abilitare il Watch Dog Timer occorre abilitare in fase di programmazione il flag WDTE della word di configurazione La modalit di attivazione di questo flag dipende dal programmatore in uso Nel caso dello Y APP versione 2 5 possibile abilitare il Watch Dog Timer con il comando 2 Watch Dog Timer Assegnazione del PRESCALER al WDT Agendo sul bit PSA del registro OPTION REG 6 possibile assegnare il prescaler al Watch Dog Timer per ottenere dei tempi di ritardo di intervento maggiori Il bit PSA v settao ad uno con l istruzione BSF OPTION REG PSA In caso contrario il prescaler verra assegnato al TIMER 0 Ovviamente assegnado il prescaler al WDT non sara possibile assegnarlo completamente al TIMER 0 e viceversa Intervenendo sui valori dei bit PS0 PS1 e PS2 dello stesso registro OPTION REG potremmo ottenere diversi intervalli di ritardo La scelta corretta dovr essere fatta tenedo conto del massimo ritardo che riusciamo ad ottenere all interno del nostro p rogramma tra l esecuzione di due istruzioni CLRWDT successive
91. elli ovvero uno stack che consente fino ad 8 chiamate annidate E importante assicurasi durante la stesura di un programma che ci sia sempre una istruzione RETURN per ogni CALL per evitare pericolosi disallineamenti dello stack che in esecuzione possono dar adito a errori difficilmente rilevabili Nel passo successivo modificheremo il nostro source LED ASM per fissare meglio quanto finora appreso file C temp borrar pbe italiano less2 passo3 htm 3 of 3 13 10 1999 6 26 04 PM Lezione 2 passo 4 Realizziamo le Luci in sequenza Proviamo ora a fissare i concetti finora appresi rielaborando il source LED ASM presentato nella prima lezione per realizzare un lampeggiatore sequenziale a quattro led Il nuovo source modificato si chiamer SEQ ASM Nella file example2 pdf formato Acrobat Reader 10Kb viene riportato lo schema elettrico del nuovo circuito sostanzialmente equivalente al circuito presentato nella prima lezione con l unica variante che ora i led collegati sono quattro anzich uno Le linee di I O utilizzate sono RBO per primo led RB1 per il secondo RB2 per il terzo ed RB3 per il quarto Esse vanno quindi configurate tutte in uscita all inizio del programma cambianto le istruzioni movlw 11111110B movwf TRISB in movlw 11110000B movwf TRISB in cui i quattro bit meno significativi corrispondenti alle linee RB0 1 2 3 vengono messi a zero per definire tali linee in uscita Nell area di memoria del REGISTER FIL
92. embler In alternativa possibile utilizzare anche un 16C84 cambiando semplicemente la direttiva PROCESSOR all interno del file sorgente YAPP ASM Il PIC a bordo dello Yapp si occupa di interpretare i comandi ricevuti dal PC tramite la porta RS232 e di inviare i segnali di programmazione corretti al PIC da programmare Il circuito integrato U2 un MAX232 si occupa di convertire i segnali RS232 la cui tensione varia da 12 volt a 12 volt nei rispettivi segnali TTL da 0 a 5 gestibili dal PIC16F84 UI In particolare sul pin 12 RB6 del PIC viene inviato il TxD proveniente dal PC e dal pin 11 RB5 viene generato il segnale da inviare all RxD del PC Lo Y APP si comporta come un dispositivo DCE Data Comunication Equipment e per collegarlo al PC occorre utilizzare un cavo dritto ovvero un cavo in cui i connettori alle estremit siano collegati pin a pin Un cavo modem pu andare benissimo mentre assolutamente da evitare l uso di un cavo null modem nel quale vengono scambiati i collegamenti tra i pin dei connettori Chi volesse realizzare in proprio il cavo di collegamento pu seguire lo schema riportato nella seguente figura Canon 9 pin male Canon Y pin temale to YAPP to PC Il diodo led verde D1 ed il diodo led rosso D2 servono rispettivamente ad indicare quando lo Yapp pronto a ricevere comandi dal PC stato di READY o quando lo Yapp entrato in PROGRAMMAZIONE Quando il led verde acceso la linea MCLR viene me
93. ene messo a zero la linea RAO verr configurata come linea in uscita quindi il valore a cui verr messo il bit 0 del registro PORTA determiner lo stato logico di tale linea 0 0 volt 1 5 volt Se il bit 0 del registro TRISA viene messo a uno la linea RAO verr configurata come linea in ingresso quindi lo stato logico in cui verr posta dalla circuiteria esterna la linea RAO si rifletter sullo stato del bit 0 del registro PORTA Facciamo un esempio pratico ipotizziamo di voler collegare un led sulla linea RBO ed uno switch sulla linea RB4 il codice da scrivere sar il seguente movlw 00010000B LIIS B in cui viene messo a 0 il bit 0 linea RBO in uscita e a 1 il bit 4 linea RB4 in ingresso Si ricorda a tale proposito che nella notazione binaria dell assembler il bit pi a destra corrisponde con il bit meno significativo quindi il bit 0 Per accendere il led dovremo scrivere il seguente codice bet PORTB U Per spegnerlo bor PORTB 0 Per leggere lo stato dello switch collegato alla linea RB4 il codice sara bDtros PORTB 4 goto SwitchAMassa goto SwitchAlPositivo Nel passo successivo analizzeremo gli stadi d uscita che gestiscono le linee di I O file C temp borrar pbe italiano less3 passo1 htm 2 of 2 13 10 1999 6 26 05 PM Lezione 3 Passo 2 lt s Stadi d uscita delle linee di I O Per rendere pi adattabili i PIC alle diverse esigenze di utilizzo la Microchip ha implementato diverse tipologie
94. ensione di questo file deve essere ASM Possiamo usare allo scopo un editor ASCII quale ad esempio NOTEPAD EXE di Windows 3 1 95 98 o EDIT EXE di MS DOS E possibile generare questo file anche con programmi di elaborazione testi pi sofisticati quali WordO o Wordperfect avendo pero l accortezza di memorizzare sempre il file prodotto in formato testo e non in formato nativo 1 DOC tanto per indenterci Questo per evitare che vengano memorizzati anche i caratteri di controllo della formattazione del testo che il compilatore assembler non in grado di trattare Nel nostro primo esperimento pratico utilizzeremo il file LED ASM file C temp borrar pbe italiano less1 passo3 htm 2 of 3 13 10 1999 6 25 58 PM Lezione 1 passo 3 Il passo successivo la compilazione del source ovvero la trasformazione in opcode dei codici mnemonici o istruzioni assembler in esso contenute Il compilatore assembler che utilizzeremo l MPASM EXE prodotto dalla Microchip e disponibile gratuitamente vedi pagina dei downloads Come possibile vedere nella figura precedente oltre al nostro source con estensione ASM necessario fornire al compilatore un secondo file prodotto dalla Microchip con estensione INC differente a seconda del tipo di PIC che stiamo utilizzando Nel nostro caso il file il P16F84 INC Questo source contiene alcune definizioni dipendenti dal chip utilizzato che vedremo pi avanti Durante la compilazione l assemb
95. ersione 2 5 Gestisce la programmazione dei PIC12C508 509 Nuova interfaccia interattiva in modalit carattere Programmazione ottimizzata Scrittura dei file INSHEX Lettura e scrittura dei flag di configurazione da file INSHEX Verifica Blank check Compatibile solo con la versione firmware 2 5 Versione 2 4 Gestisce la programmazione dei PIC16C6X 7X 9XX Compatibile con la versione 2 4 del firmware Y APP Help in linea migliorato Versione 2 3 Versione interna non rilasciata Versione 2 2 Versione di allineamento con il firmware Eliminati alcuni bugs della precedente versione 1 4 le versioni dall 1 5 alla 2 1 non sono mai esistite Ringraziamenti Un ringraziamento speciale a quanti hanno collaborato e continuano a collaborare alla buona riuscita del progetto Yapp con particolare riferimento a Adriano Venturini Tiziano Galizia Fabrizio Sciarra Tito Dal Canton Alessandro Ballerini Antonio Casini Feedback Per eventuali commenti e o richieste di chiarimenti scrivete a yapp picpoint com file C temp borrar pbe italiano hardware yapp htm 7 of 7 13 10 1999 6 32 21 PM file C temp borrar pbe examples led asm RU QM A AAA RE IRE A RR AA A RDUM Pic by example LED ASM c 1999 Sergio Tanzilli picbyexampleGpicpoint com http www picpoint com FER RRA EAR KERR RARER KARR KEK KEER KEKEE KERER EE RARR RE BK PROCESSOR 16F84 RADIX DEC
96. essere solo settato dal nostro programma ma non resettato 0 Non inizia la lettura su EEPROM Esempi di utilizzo di questo registro sono riportati nel corso nella lezione 8 passo 1 file C temp borrar pbe italiano register eecon1 htm 2 of 2 13 10 1999 6 59 40 PM Istruzione MOVLW m Assegna a W un valore costante Sintassi movlw k Operazione equivalente W k Descrizione Assegna all accumulatore W il valore costante k Esempio org OOH start movlw 20 Dopo aver eseguito questo programma l accumulatore W varr 20 Note Questa istruzione non influenza nessun bit di stato file C temp borrar pbe italiano istruzioni movlw htm 13 10 1999 6 59 52 PM Istruzione MOVWF Muove il contenuto del registro W nel registro F Sintassi movwf E Operazione equivalente f W Descrizione Questa istruzione copia il contenuto del registro W nel registro indirizzato dal parametro f Esempio Ipotizziamo di voler scrivere il valore 10H esadecimale nel registro TMRO Le istruzioni da eseguire sono le seguenti movlw 10H Scrive nel registro W il valore 10H movwf 01H e lo memorizza nel registro TMRO Per 1 registri utilizzati dal PIC per funzioni specifiche solitamente non viene inserito direttamente l indirizzo ma il relativo nome simbolico definito nel file P16F84 INC Il codice diventa quindi il seguente movlw 10H Scrive nel registro W il valore 10H movwf TMRO e lo memorizza nel registro TMRO Note
97. f 9 13 10 1999 6 53 12 PM file C temp borrar pbe examples Icdterm asm op op op op op op op o a o D a CES DELAY BIT_DELAY Tx loop TxLoop btfss ShiftReg 0 goto TxLo nop bsf PORTA TX goto CIX TxLo bcf PORTA TX goto cTx cTx nop Ere ShiftReg F DELAY BIT_DELAY decfsz BitCount F goto TxLoop nop nop nop nop bsf PORTA TX Stop bit DELAY BIT_DELAY DELAY 2 nop bsf PORTA TX DELAY BIT_DELAY DELAY 2 return PERA SERE ATA RENEE S S SSS SSS 0 Receive a character from RS232 9600 baud 8 data bit 1 stop bit No parity Return code A ShiftReg Received character ERRE BARRIER ECKE OK KAKA RRR RR KR EREKE KERRE E ALIKE ERRE ERRE KEER KR RIB OR REE KERE E KK KORR KR RxChar clrf ShiftReg movlw 8 Data lenght movwf BitCount file C temp borrar pbe examples Icdterm asm 8 of 9 13 10 1999 6 53 12 PM file C temp borrar pbe examples Icdterm asm DELAY BIT _DELAY BIT_DELAY 2 Wait 1 5 bit Loop di lettura dei bit dati wDB btfss PORTA RX goto RxBitL RxBitH nop bsf STATUS C goto RxShift RxBitL bcf STATUS C goto RxShift RxShift nop rrf ShiftReg F DELAY BIT DELAY decfsz BitCount F goto wDB return El ND file C temp borrar pbe examples Icdterm asm 9 of 9 13 10 1999 6 53
98. funzione che il PIC deve svolgere Ogni istruzione rappresentata da un codice operativo in inglese operation code o pi brevemente opcode composto da 14 bit ed memorizzata in una locazione di memoria dell area programma Tale memoria nel PIC16F84 di tipo EEPROM e dispone di 1024 locazioni ognuna delle quali in grado di contenere una sola istruzione oppure una coppia istruzione dato Un esempio di opcode in notazione binaria viene riportato di seguito 00 0001 0000 0000B ma pi probabile che un opcode venga rappresentato in notazione esadecimale ovvero 0100H che rappresenta esattamente lo stesso valore ma in forma pi breve La lettera H riportata alla fine del valore valore 0100 indica il tipo di notazione Hexadecimal Lo stesso valore pu essere rappresentato in assembler con la notazione 0x100 derivante dal linguaggio C o H 0100 Questi codici completamente privi di senso per un essere umano sono gli unici che il PIC in grado di capire Per fortuna esistono alcuni strumenti che consentono di facilitare il compito al programmatore rendendo le istruzioni pi comprensibili Per convenzione si associa ad ogni opcode una breve sigla detta mnemonica ovvero una sigla che aiuti a ricordare la funzione svolta da ogni istruzione L opcode 0100H dell esempio precedente effettua l azzeramento del registro W vedremo meglio di seguito che cosa significa che in inglese viene indicato con la frase CLEAR W
99. i inoltre otteniamo la solita accensione per tre cicli del LED 2 L effetto finale che otteniamo l esecuzione di tre compiti ad una velocit tale da sembrare in esecuzione parallela Lezione 6 Mid Il Power Down Mode ed il Watch Dog Timer Al termine di questa lezione saprete e Come mettere il PICmicro in Power Down Mode e come risvegliarlo Come funziona il Watch Dog Timer Contenuti della lezione 6 1 Funzionamento del Power Down Mode 2 Funzionamento del Watch dog timer file C temp borrar pbe italiano less6 intro htm 13 10 1999 6 26 13 PM Lezione 6 Passo 2 Lec ZE TE Il watch dog timer WDT In questa lezione analizzeremo il funzionamento del Watch Dog Timer che tradotto in italiano potrebbe significare Temporizzatore Cane da Guardia il cui scopo quello di migliorare l affidabilit dei nostri circuiti basati su PICmicro Il Watch Dog Timer in pratica un oscillatore interno al PICmicro ma completamente indipendente dal resto della circuiteria il cui scopo quello di rilevare eventuali blocchi della CPU del micro e resettare il PICmicro per riprendere la normale esecuzione del programma Per poter rilevare un eventuale blocco della CPU durante l esecuzione del programma principale viene inserita all interno di questo una istruzione speciale la CLRWDT CLeaR Watch Dog Timer la quale azzera ad intervalli regolari il Watch Dog Timer non consentendogli di terminare il suo conteggio Se la CPU non
100. i 13 linee di I O organizzate in due porte denominate PORTA A e PORTA B La PORTA A dispone di 5 linee configurabili sia in ingresso che in uscita identificate dalle sigle RAO RAI RA2 RA3 ed RA4 La PORTA B dispone di 8 linee anch esse configurabili sia in ingresso che in uscita identificate dalle sigle RBO RB1 RB2 RB3 RB4 RBS RB6 ed RB7 RAD RAO Rd RB EEPROM Program Mem ary 1K x14 TOCKI REGISTER XK FILE EEPROM Data Mem ary B4 x8 Generation Watchdog timer OSC2ICLROLIT MELE qd OS 51 LIN Wee La suddivisione delle linee in due porte distinte dettata dai vincoli dell architettura interna del PIC16F84 che prevede la gestione di dati di lunghezza massima pari a 8 bit Per la gestione delle linee di I O da programma il PIC dispone di due registri interni per ogni porta denominati TRISA e PORTA per la porta A e TRISB e PORTB per la porta B I registri TRIS A e B determinano il funzionamento in ingresso o in uscita di ogni singola linea i registi PORTAeB file C temp borrar pbe italiano less3 passo1 htm 1 of 2 13 10 1999 6 26 05 PM Lezione 3 Passo 1 determinano lo stato delle linee in uscita o riportano lo lo stato delle linee in ingresso Ognuno dei bit contenuti nei registri menzionati corrisponde univocamente ad una linea di I O Ad esempio il bit 0 del registro PORTA e del registro TRIS A corrispondono alla linea RAO il bit 1 alla linea RA1 e cosi via Se il bit 0 del registro TRISA vi
101. i PICmicroCome si usa lo Yapp La programmazione ICSP In Circuit Serial Programming implementata dalla Microchip per la programmazione di alcune famiglie di PIC consente di programmare i chip direttamente sulla scheda destinazione abbreviando i tempi di sviluppo produzione di schede basate sui PIC In queste pagine viene data una breve introduzione alla programmazione ICSP per i PIC16F84 Tutta la documentazione necessaria per programmare altre famiglie di PIC disponibile gratuitamente sul sito Microchip http www microchip com o sul CD distribuito sempre da Microchip La programmazione ICSP viene effettuata tramite tre soli collegamenti massa tra il programmatore ed il PIC da programmare ovvero file C temp borrar pbe italiano hardware yapp htm 2 of 7 13 10 1999 6 32 21 PM Yet Another Pic Programmer MCLR Piedino di master clear pin 4 su PIC16F84 utilizzato per applicare la tensione di programmazione VPP al chip RB6 Linea 6 della porta B pin 12 su PIC16F84 utilizzata come linea CLOCK RB7 Linea 7 della porta B pin 13 su PIC16F84 utilizzata come linea DATA La modalit di comunicazione con il PIC di tipo seriale sincrono in cui i bit trasmessi sulla linea DATA pin RB7 vengono scanditi dal segnale generato sulla linea di CLOCK pin RB6 Quest ultimo viene generato dal programmatore mentre il DATA bidirezionale a seconda dell operazione in corso Nella seguente figura viene riportato un esempio di trasmi
102. i di scrittura su EEPROM Nei casi 1 e 2 il PICmicro viene resettato e l esecuzione ripresa dalla locazione 0 Nel caso 3 il PICmicro si comporta come nella normale gestione di un interrupt eseguendo per primo l interrupt handler e quindi riprendendo l esecuzione dopo l istruzione SLEEP Perch il PICmicro venga risvegliato da un interrupt devono essere abilitati opportunamento i flag del registro INTCON Lezione 6 Passo 1 Esempio di Power Down mode Vediamo ora un primo semplice esempio di utilizzo del Power Down Mode e di modalit di risveglio del PICmicro La modalit utilizzata l interrupt sul fronte di discesa applicato al pin RBO INT utilizzando un pulsante Il source utilizzato PDM ASM Lo schema da realizzare disponibile nel seguente file example4 pdf formato Acrobat Reader 10Kb In pratica il LED D1 collegato alla linea RB2 lampeggera ad indicare l esecuzione del programma in corso Premendo il tasto SW2 il programma eseguir l istruzione SLEEP mettendo il PICmicro in Power Down Mode Il LED D1 rimarr acceso o spento in base al momento scelto per premere SW2 Per causare l uscita dal Power Down Mode del PICmicro baster premere SWI per generare un interrupt e far riprendere l esecuzione del programma Maggiori informazioni sul funziomento del Power Down Mode possono essere trovati sul datasheet Microchip del PIC16F84 documento DS30430C a pagina 51 file C temp borrar pbe italiano less6 passo1 htm 2
103. iano less4 passo1 htm 3 of 4 13 10 1999 6 26 09 PM Lezione 4 Passo 1 1011 12 13 1011 12 13 didi JUUL TOSE 0 TOSE 1 Nel passo successivo vedremo come possibile dividere ulteriormente la frequenza di conteggio interna o esterna attivando il PRESCALER file C temp borrar pbe italiano less4 passo1 htm 4 of 4 13 10 1999 6 26 09 PM Lezione 4 Passo 2 n ps Il PRESCALER L ultimo blocco rimasto da analizzare per poter utilizzare completamente il registro TMRO il PRESCALER Se configuriamo il bit PSA del registro OPTION a 0 inviamo al registro TMRO il segnale in uscita dal PRESCALER come visibile nella seguente figura TOCS TOSE TMRO register Paz PSI Psd Il PRESCALER consiste in pratica in un divisore programmabile a 8 bit da utilizzare nel caso la frequenza di conteggio inviata al contatore TMRO sia troppo elevata per i nostri scopi Nell esempio riportato al passo precedente abbiamo visto che utilizzando un quarzo da 4Mhz otteniamo una frequenza di conteggio pari ad 1Mhz che per molte applicazioni potrebbe risultare troppo elevata Con l uso del PRESCALER possiamo dividere ulteriormente la frequenza Fosc 4 configurando opportunamente i bit PSO PS1 e PS2 del registro OPTION secondo la seguente tabella Frequenza in uscita al prescaler Hz 500 000 0 0 1 4 250 000 0 1 0 8 125 000 0 1 1 16 62 500 1 0 0 32 31 250 1 0 1 64 15 625 1 1 0 128 7 813 1 1 1 256 3 906 Provia
104. il seguente codice movf ShiftReg W call putehar e quindi si ritorna ad attendere lo START BIT del prossimo carattere con la seguente istruzione goto MainLoop La subroutine putchar in pratica invia il valore contenuto nel registro W al display LCD nella posizione in cui si trova il cursore carattere xCurPos e yCurPos quindi si occupa di mandare a capo il cursore se si raggiunto il fine riga o di riportarlo alla prima riga se si raggiunto il fine display In tutti i casi 1 registri xCurPos ed yCurPos vengono aggiornati alla prossima posizione in cui poter scrivere il successivo carattere ricevuto dal PC LCDPRINT un programma d esempio per l utilizzo del nostro miniterminale Dalla sezione download potrere scaricare un semplice programma d esempio per l uso del nostro miniterminale RS232 Il programma di chiama LCDPRINT e funziona in ambiente MS DOS o prompt MS DOS sotto Windows 95 98 LCDPRINT permette di visualizzare messaggi sul nostro miniterminali nel modo pi semplice Basta digitare dal prompt di MS DOS il comando LCDPRINT seguito dal numero di porta seriale a cui connesso il nostro miniterminale e la stringa da visualizzare tra doppi apici file C temp borrar pbe italiano less7 passo2 htm 7 of 8 13 10 1999 6 26 19 PM Lezione 7 Passo 2 Se vogliamo visualizzare ad esempio la scritta Ciao a tutti sul miniterminale connesso alla porta COM2 dovremo digitare LCDPRINT COM2 Ciao a tutti Le applicazioni p
105. in termini pratici che quando la linea RA4 viene programmata in uscita e messa a 1 in realt non viene connessa al positivo ma rimane scollegata Tale tipo di circuiteria d uscita viene denominata a collettore aperto ed utile per applicazioni in cui sia necessario condividere uno stesso collegamento con pi pin d uscita e ci sia quindi la necessit di mettere in alta impedenza una linea d uscita senza doverla riprogrammare come linea d ingresso Se vogliamo essere sicuri che la linea RA4 vada a 1 dovremo collegare esternamente una resistenza di pull up ovvero una resistenza collegata al positivo di alimentazione Vedremo in seguito l utilizzo della linea indicata sullo schema TMRO clock input Stadio d uscita delle linee RBO RB1 RB2 ed RB3 Anche per questo gruppo di linee rimane sostanzialmente invariata la logica di commutazione Esse dispongono in aggiunta una circuiteria di weak pull up attivabile quando le linee sono programmate in ingresso In ingresso infatti come spiegato precedentemente le linee vengono completamente scollegate dal PIC in quanto sia il transitor P che il transistor N sono aperti Lo stato delle linee dipende quindi esclusivamente dalla circuiteria esterna Se tale circuiteria di tipo a collettore aperto o pi semplicemente costituita da un semplice pulsante che quando premuto collega a massa la linea di I O necessario inserire una resistenza di pull up verso il positivo per essere sicuri che quando il
106. indi dovuto alla presenza della subroutine Delay all interno del loop principale Analizziamo ora il source INTRB ASM Partiamo dalla direttiva ORG 00H che come sappiamo serve a posizionare il nostro programma a partire dalla locazione di reset ovvero dalla locazione con indirizzo 0 Notiamo subito che la prima istruzione che incontra il PIC un salto incondizionato alla label Start ORG 00H Golo Lart seguito da un altra direttiva ORG 04H e quindi dal codice della subroutine di gestione dell interrupt bsf PORTB LED2 moviw 3 movwf nTick file C temp borrar pbe italiano less5 passo2 htm 1 of 2 13 10 1999 6 26 12 PM Lezione 5 Passo 2 bet INTCON RBIFE retfie Come abbiamo detto nella lezione precedente l interrupt handler deve necessariamente essere allocato a partire dall indirizzo 04H quindi per evitare che venga eseguito al reset dobbiamo necessariamente saltarlo con una istruzione di salto incondizionato Il codice dell interrupt handler in questo caso molto semplice e si limita ad accendere il LED 2 quindi inserire nel registro utente nTick il numero di lampeggi raggiunto il quale il LED 2 deve spegnersi e quindi azzerare il flag RBIF per consentire alla circuiteria di generazione dell interrupt di continuare a funzionare L istruzione RETFIE consente al PIC di tornare ad eseguire il programma interrotto dall interrupt Ma perch viene generato un interrupt quando premiamo un tasto qualsiasi
107. ione Diamo subito un occhiata allo schema elettrico del circuito che andremo a realizzare per capire meglio le spiegazioni che seguiranno Lo schema elettrico del circuito riportato nel file EXAMPLES PDF in formato Acrobat Reader mentre nella tabella seguente vengono descritte le funzioni di ogni singola linea disponibile per interfacciare il display Le descrizioni riportate in grassetto indicano le linee effettivamente utilizzate dalla nostra applicazione d esempio Pin 1 GND Ground Questo pin deve essere collegato con il negativo di alimentazione 2 VDD Power supply Questo pin deve essere colleato con i 5 volt di alimentazione 3 LCD Liquid crystal driving voltage A questo pin deve essere applicata una tensione variabile da 0 a 5 volt tramite un trimmer per regolare il contrasto del display 4 RS Register select Questo pin una linea di controllo con cui si comunica al display se si sta inviando sul bus dati linee da DBO a DB7 un comando RS 0 oppure un dato RS 1 5 R W Read Write Questo pin un altra linea di controllo con cui si comunica al display se si intende inviare un dato al display R W 0 oppure leggere un dato dal display R W 1 6 E Enable Questo pin un altra linea di controllo con cui si pu abilitare il display ad accettare dati ed istruzioni dal bus dati E 1 7 DBO Data bus line 0 Su queste linee viaggiano i dati tra il micro ed il display LCD 0 8 DBI pausini TT
108. ister 1 movf tmpLcdRegister 0 W andlw OFH iorwf tmpLcdRegister 1 F btfsc tmpLcdRegister 0 4 file C temp borrar pbe examples Icd1 asm 4 of 6 13 10 1999 6 51 29 PM file C temp borrar pbe examples Icd1 asm bsf tmpLcdRegister 1 6 movf tmpLcdRegister 1 W call LcdSendCommand return DAC ORE GC A EUM e pe UR M IN Op NR KU o OA Send a data to LCD 0 21 LcdSendData bsf PORTB LCD RS call LcdSendByte return PERIOD IA E eK ER ITER E RAG KU ATA S pe ede tia Ae OUS Send a command to LCD cu UE RR Ro UE o kot e ue KO RIEN REA Ae NAR A LcdSendCommand bcf PORTB LCD RS call LcdSendByte return ONCE ROS CKOKCK OK KR ERE OR OX E RCKGK OK BKK EUR OK OR BRAK RAKE BEAR CR KR Kok BKK KAKA RRR BR KERE BKK RRR Send a byte to LCD by 4 bit data bus REOR OK ERROR RA EA KOR SE IRR RAR KR KR LER RARER KRACKER BIR ERIK OR KE OR RK ARAB BLK KR RAR RRR LcdSendByte Save value to send movwf tmpLcdRegister Send highter four bits bcf PORTB LCD DB4 bcf PORTB LCD DB5 bcf PORTB LCD DB6 bcf PORTB LCD DB7 btfsc tmpLcdRegister 4 bsf PORTB LCD DB4 btfsc tmpLcdRegister 5 bsf PORTB LCD_DB5 btfsc tmpLcdRegister 6 bsf PORTB LCD_DB6 btfsc tmpLcdRegister 7 bsf PORTB LCD DB7 bsf PORTB LCD E Enables LCD movlw 1 Wait ims call msDelay bcf PORTB LCD E Disabled LCD movlw 1 Wait ims call
109. ittura in EEPROM non previsto alcun flag di segnalazione per cui l interrupt handler dovr considerare che l interrupt stato generato da questo evento quando tutti e tre i flag sopra citati valgono 0 Importante Una volta rilevato quale flag attivo l interrupt handler deve azzerarlo altrimenti non verr pi generato l interrupt corrispondente Ritorno da un interrupt handler Quando viene generato un interrupt il PIC disabilita automaticamente il bit GIE Global Interrupt Enable del registro INTCON in modo da disabilitare tutti gli interrupt mentre gi in esecuzione un interrupt handler Per poter ritornare al programma principale e reinizializzare a 1 questo bit occorre utilizzare l istruzione REIFIE Nel passo successivo vedremo un esempio pratico di uso degli interrupt file C temp borrar pbe italiano less5 passo1 htm 2 of 2 13 10 1999 6 26 12 PM Lezione 5 Passo 2 MI DI Esempio pratico di gestione di un interrupt Vediamo ora un esempio pratico di gestione degli interrupt Prendiamo come base di partenza il source LED ASM usato nella lezione 1 per realizzare il lampeggiatore a led Come ricorderete questo programma fa semplicemente lampeggiare il LEDI presente sulla scheda PicTech a ciclo continuo utilizzando un ritardo software introdotto dalla subroutine Delay Vediamo ora come possibile fargli rilevare la pressione di un tasto ed accendere il LED 2 contemporaneamente all esecuzione del programma prin
110. iw 80H movwf tmpLcdRegistertl movf tmpLcdRegister 0 W andlw OFH iorwf tmpLcdRegister 1 F btfsc tmpLcdRegister 0 4 bsf tmpLcdRegister 1 6 movf tmpLcdRegister 1 W call LcdSendCommand return Ck k k Ck lt k lt k k lt lt k KC lt lt lt lt k CI lt lt CK k lt lt k k lt lt Ck CI k lt lt k lt SCC lt k Ck AAA Send a data to LCD p di di k lt k k k k k k dir di di amp k k k k k k k amp k k k k k amp k k k amp amp k di di k amp k KK amp k k k X X X x lt So x ne LcdSendData bsf PORTB LCD_RS call LcdSendByte return k k lt lt lt lt k k lt lt k x lt lt lt lt k k lt lt lt K lt k lt lt k k lt lt lt lt k k lt lt k lt lt lt k lt k k amp lt k k amp k amp k k lt k k k k AAA Send a command to LCD utu ege E E NR UR NERO bua bsk uk as Aca kakuta aaa kakak ORO UR LcdSendCommand bcf PORTB LCD RS call LcdSendByte return KKEKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK Send a byte to LCD by 4 bit data bus KKEKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK No x ne LcdSendByte Save value to send movwf tmpLcdRegister Send highter four bits file C temp borrar pbe examples Icdterm asm 6 of 9 13 10 1999 6 53 12 PM file C
111. izzare nella posizione corrente del cursore Richiede nel registro W il valore ASCII del carattere da visualizzare LcdSendCommand Serve ad inviare un comando all LCD I comandi riconosciuto dall LCD sono riportati sul datasheet dello stesso Richiede nel registro W il valore ad 8 bit del comando da inviare LcdSendByte Questa funzione viene utilizzata internamente dalle altre funzioni di gestione dell LCD e di occupa effettuare lo slip di dati e comandi ad 8 bit sul bus dati a 4 bit Maggiori informazioni sull uso dei display LCD possono essere ricavate direttamente dai datasheet che il fornitore dovrebbe poter essere in grado di fornirvi Nel prossimo passo vedremo come sia possibile interfacciare un PIC16F84 alla porta seriale RS232 del nostro PC file C temp borrar pbe italiano less7 passo1 htm 4 of 4 13 10 1999 6 26 16 PM Lezione 7 Passo 2 ET ses OS TM L interfaccia RS232 Proseguiamo con lo studio dell interfacciamento del PIC al mondo esterno analizzando ora come sia possibile dotare il PIC16F84 di una interfaccia RS232 per collegarlo alla porta seriale del nostro PC L applicazione d esempio che andremo a realizzare utilizza il circuito per la gestione di un display LCD presentato nel passo precedente a cui aggiungeremo la sezione RS232 per realizzare una sorta di miniterminale RS232 In pratica con il nostro circuito d esempio potremo visualizzare su display LCD i caratteri ASCII trasmessi dal nostro PC su una q
112. l dato a 14 bit in un buffer provvisorio all interno del PIC il comando Begin Programming effettua la scrittura vera e propria del dato nella memoria programma L indirizzo della locazione di memoria che viene scritta contenuto in un puntatore di scrittura azzerato automaticamente non appena il PIC viene messo in programmazione MCLR 12 volt ed incrementato tramite il comando Increment Address A questo punto per programmare la locazione successiva baster trasmettere nuovamente i seguenti comandi Load Data for Program Memory valore locazione 1 Begin Programming Increment Address e cosi via fino alla scrittura completa del programma Per poter scrivere in una locazione di memoria non necessario effettuare operazioni di cancellazione L area dati e l area configurazione si programmano con le stesse modalit utilizzando il comando LOAD relativo L area dati un area FLASH visibile anche dal programma in esecuzione sul PIC la sua programmazione pu essere utile per assegnare dei valori iniziali alle variabili utilizzate dal nostro programma L area configurazione contiene dati invisibili al programma su PIC ma utili per determinare la modalit di funzionamento di alcuni dispositivi interni al PIC quali l oscillatore di clock il watchdog timer ecc che vedremo successivamente durante il nostro corso Come funziona lo Yapp Lo Y APP si occupa di generare tutti i segnali necessari per programmare il PIC a partire dai comandi invi
113. lag bit Questo flag indica se l operazione di scrittura stata interrotta prematuramente a causa ad esempio di un reset del PIC o un reset dal Watch Dog Timer Bit 3 1 Operazione di scrittura interrotta prematuramente 0 Operazione di scrittura completata correttamente WREN EEPROM Write Enable bit Questo flag abilita le successive operazioni di scrittura su una cella EEPROM Deve essere messo a uno prima di iniziare qualsiasi operazione di scrittura su EEPROM Se messo a zero la EEPROM si comporta come una memoria a sola lettura Bit 2 Scrittura su EEPROM abilitata 0 Scrittura su EEPROM disabilitata Bit 1 WR Write Control bit Questo flag serve ad attivare il ciclo di scrittura su EEPROM Per attivare la scrittura occorre mettere a 1 questo flag Lo stesso flag verr messo automaticamente a zero dall hardware del PIC una volta completata la scrittura sulla cella BEBE 1 Comanda l inizio della scrittura su EEPROM Viene rimesso a 0 a fine ciclo di scrittura Pu essere solo settato dal nostro programma ma non resettato 0 Ciclo di scrittura completato file C temp borrar pbe italiano register eecon1 htm 1 of 2 13 10 1999 6 59 40 PM Registro EECON1 Bit 0 RD Read Control bit Questo flag serve ad attivare il ciclo di lettura da EEPROM Per attivare la lettura occorre mettere a 1 questo flag 1 Comanda l inizio della lettura da EEPROM Viene rimesso a 0 a fine ciclo di lettura Pu
114. latch anche il Data Latch dipende dallo stato di un bit in un registro in particolare del registro PORTA La sua uscita negata viene inviata all ingresso delle due porte logiche OR e AND e quindi direttamente sulla base dei transistor P ed N Se mettiamo a 0 il bit 0 del registro PORTA con l istruzione ber PORTA 0 otterremo la conduzione del transistor N con conseguente messa a 0 della linea RAO Se invece mettiamo a il bit 0 con l istruzione bsf PORTA 0 otterremo la conduzione del transistor P con conseguenza messa a 5 volt della linea RAO In questa condizione sempre possibile rileggere il valore inviato sulla linea tramite la circuiteria d ingresso Stadio d uscita della linea RA4 Analizziamo ora il funzionamento dello stadio d uscita della linea RA4 che si differenzia da tutte le altre linee di I O in quanto condivide lo stesso pin del PIC16F84 con il TOCKI che andremo ad analizzare al passo successivo Nella figura seguente viene riprodotto lo schema a blocchi dello stadio d uscita estratto dal data sheet Microchip file C temp borrar pbe italiano less3 passo2 htm 2 of 5 13 10 1999 6 26 07 PM Lezione 3 Passo 2 Schmitt Trigger input buffer RD PORT TMRO clock input La logica di commutazione sostanzialmente identica al gruppo di linee RAO 3 ad eccezione dell assenza della porta OR e del transistor P ovvero di tutta la catena che consente di collegare al positivo la linea RA4 Questo significa
115. latore genera una serie di file con il nome identico al source da cui derivano ma con estensione diversa Vediamo quali sono e cosa contengono e HEX il file contenete gli opcode da inserire nella memoria programma del PIC e LST un file di testo in cui viene riportato l intero source assembler e la corrispondente traduzione in opcode Non utilizzabile per la programmazione del PIC ma estremamente utile per verificare 1 processi di compilazione che ha eseguito l assemblatore e ERR contiene la lista degli errori di compilazione riscontrati ed il numero di linea all interno del source assembler in cui sono stati rilevati I file LST e ERR vengono utilizzati per il controllo di quanto effettuato in compilazione Solo il file HEX viene utilizzato realmente per programmare il PIC Il file HEX non un file in formato binario ma un file codificato in un formato inventato dalla Intel per la descrizione dei file binari in formato ASCII Senza entrare troppo nei dettagli utile sapere che tale formato direttamente riconoscibile da qualsiasi programmatore di PIC il quale provveder a leggere da questo formato gli opcode ed a trasferirli nella memoria del PIC Nel passo successivo analizzeremo il nostro primo source assembler e vedremo buona parte della sintassi utilizzata nel linguaggio assembler file C temp borrar pbe italiano less1 passo3 htm 3 of 3 13 10 1999 6 25 58 PM Lezione 1 passo 4 Analizziamo un source
116. le per i nostri esperimenti e di connessioni per la programmazione on board ovvero per aggiornare il programma interno al chip senza dover togliere il chip stesso dal circuito di prova file C temp borrar pbe italiano less1 passo1 htm 1 of 2 13 10 1999 6 25 57 PM Lezione 1 passo 1 Tale caratteristica viene pienamente sfruttata dal nostro programmatore Y APP descritto in questo corso ma in alternativa possibile utilizzare uno qualsiasi degli ottimi programmatori prodotti dalla Microchip o da terze parti E ora giunto il momento di dare un occhiata al PIC16F84 Vediamo la riproduzione riportata nella seguente figura ipe L MCLE pp E VER 1500 Q SC 2 CLKQUT 14 que vaa oo 4 Cn n LIO ORI REB RBG RB2 RBS RB3 RB4 Come possibile vedere il PIC16F84 dotato di un totale di 18 pin disposti su due file parallele da 9 pin ciascuna I pin contrassegnati in BLU rappresentano le linee di I O disponibili per le nostre applicazioni i pin in ROSSO e NERO sono i pin di alimentazione i pin in VERDE sono riservati al funzionamento del PIC MCLR per il reset e OSCI 2 per il clock Cliccando sui singoli pin disegnati in figura possibile visualizzare una breve descrizione del loro funzionamento Nel passo successivo di questa lezione andremo subito a collegare questi pin al nostro primo circuito sperimentale per verificarne immediatamente il loro funzionamento file C temp borrar pbe ita
117. le vedere i bit 5 6 e 7 non corrispondono a nessuna linea di I O e quindi il loro valore non ha alcuna influenza Le due istruzioni successive svolgono le stesse funzioni per la porta B del PIC moviw B IIIIIIIO movwf TRISB in questo caso la definizione delle linee sar la seguente N bit registro TRISB Linea porta B N Pin 0 RBO 6 0 RBI 7 1 8 1 RB2 Uscita Ingresso Ingresso Ingresso Ingresso Ingresso Ingresso Ingresso Notate come il valore 0 nel bit 0 del registro TRISB determini la configurazione in uscita della rispettiva linea del PIC Nella nostra applicazione infatti questa linea viene utilizzata per pilotare il LED da far lampeggiare Abbiamo visto che l istruzione movwf TRISB trasferisce il valore contenuto nell accumulatore inizializzato opportunamente con l istruzione movlw 11111110B nel registro TRISB Il significato di movwf infatti MOVE W TO FILE REGISTER bot STATUS RPO file C temp borrar pbe italiano less1 passo4 htm 3 of 6 13 10 1999 6 25 59 PM Lezione 1 passo 4 Questa istruzione simile alla bsf vista in precedenza con la sola differenza che azzera il bit anzich metterlo a uno La sigla un questo caso BIT CLEAR FILE REGISTER Dal punto di vista funzionale questa istruzione stata inserita per consentire l accesso ai registri interni del banco 0 anzich ai registri interni del banco 1 di cui fanno parte TRISA e TRISB Una descrizione pi dettagliata verr
118. les dblint asm bcf bcf Go back to the main program retfie INTCON TOIF INTCON RBIF RERUM cu adco Ro egeo desi cocoa cds a a UE E si RR REITERATE RO RN AE RR RAR IAA 2 2 ukur 2 2 121212 2121212 212 2 12 2 12 2 2 2 2 2 12 2 2 2 Y 2 2 2 2 2 2 2 a e k CI k k lt Ck lt lt Ck CC lt x CK k lt lt k k lt lt CI k lt lt lt lt CK lt lt k k lt lt k k k k k k lt k Ck k lt k lt lt lt lt x lt RR E Re a x s du UU 2 1 e d NEUE OK S 1 QUATN Sd RM KK Sas ihr A cock apa adios do dea ope ARIE GAN ade RICO USAR RO NS OA ICD RO RU KU Rok o AI RANK d x ok ua ORO e RR AAA RUE UM Commuta sul secondo banco dei registri per accedere ai RB3 vengono programma RB7 vengono programma TMRO Interrupt handler IntTOIF Turn on LED3 if it s off btfsc PORTB LED3 goto LED3 off bsf PORTB LED3 goto End ih LED3 off bcf PORTB LED3 goto End ih RBA RB7 interrupt handler IntRBIF Turn on LED 2 bsf PORTB LED2 Starts the LED1 blink counter movlw 3 movwf nTick goto End ih Main body Start bsf STATUS RPO Definizione d lin di I O Definizione della porta A movlw 00011111B movwf TRISA 7FH Definizione della porta B Le linee da RBO a quattro led
119. liano less1 passo1 htm 2 of 2 13 10 1999 6 25 57 PM Lezione 1 passo 2 p Realizziamo un semplice lampeggiatore a LED Dopo aver visto brevemente cos e com fatto un PIC passiamo immediatamente ad una semplice applicazione pratica Realizziamo un circuito molto semplice il cui scopo quello di far lampeggiare un diodo led Vedremo come si scrive un programma in assembler come si compila e come si trasferisce all interno della EEPROM del PIC per lanciarlo in esecuzione Il circuito da realizzare riportato nel seguente file in formato Acrobat Reader 9Kb examplel pdf Per alimentare il circuito necessario fornire una tensione stabilizzata compresa tra i 12 ed i 14 volt Da questa tensione vengono ricavati i 5 volt necessari al PIC tramite l integrato U2 un comunissimo uA7805 La tensione di alimentazione di 5 volt viene inviata ai pin Vdd pin 14 e Vss pin 5 collegati rispettivamente al positivo ed alla massa Il pin MCLR pin 4 serve per poter effettuare il reset del PIC Normalmente viene mantenuto a 5 volt tramite la resistenza di pull up R1 e messo a zero quando si desidera resettare il PIC Grazie alla circuiteria interna di reset di cui il PIC dotato non necessario collegare al pin MCLR pulsanti o circuiti RC per ottenere il reset all accensione I pin OSCI CLKIN pin 16 e OSC2 CLKOUT pin 15 sono collegati internamente al circuito per la generazione della frequenza di clock utilizzata per temporizzar
120. licamente all infinito Incontreremo pi avanti un riferimento a questa label call Delay Questa istruzione dermina una chiamata dall inglese call ad una subroutine che inizia in corrispondenza della label Delay Le subroutine sono delle parti di programma specializzare ad effettuare una funzione specifica Ogni qualvolta necessaria quella funzione sufficiente richiamarla con una sola istruzione anzich ripetere ogni volta tutte le istruzioni necessarie ad effettuarla In questo caso la subroutine inserisce un ritardo pari al tempo di accensione e spegnimento del led Le istruzioni che compongono la subroutine Delay sono inserite pi avanti in questo stesso source btisc PORIB LED Il significato di questa istruzione BIT TEST FLAG SKIP IF CLEAR ovvero controlla lo stato di un bit all interno di un registro e salta l istruzione successiva se il valore di tale bit zero Il bit da controllare corrisponde alla linea di uscita cui collegato il diodo led tramite questo test potremo determinare quindi se il led acceso o spento e quindi agire di conseguenza ovvero se il led gia acceso lo spegneremo se il led spento lo accenderemo goto setTosero Questa istruzione un salto incondizionato dall inglese GO TO vai a alla label SetToZero dove troveremo le istruzioni per spegnere il led Questa istruzione verr saltata dall istruzione successiva se il led gia spento bst PORTS LED goto MainLoop Queste due ist
121. me B 01101100 e 01101100B file C temp borrar pbe italiano gloss notaz htm 1 of 2 13 10 1999 6 37 41 PM 6 5 4 2 1 45 ut LL s dL STE s Rat 2 END 4 RTCC RA4 2 4 MCLR a 3 ce 16 6 Dm Re amp 3 1 OSCA CLKIN 470 5 T 22PF N oS 6 LED 6 xi RB 9 Lele 3 10 098 15 Req 1 1 OSC2 CLKOUT RB3 312 RB 22PF 5 ves A E 18 PIC16C84 GND 12 5 70513 7 12VCO IL GND j OUT 1 C4 a C5 4 u 66 c u s e 2 Sac NE GND PROJECT _ PIC BY EXAMPLE NOTE EXAMPLE N 1 ENGINEER SERGIO TANZILLI VER 10 DATE 2NOV 1998 PAGES 1 OF 6 5 4 2 1 6 5 4 2 1 45 ut LL s dL SE RAZ 31 Rat 2 di GND i 4 RTCC RA4 E c2 DI R2 E 3 Il I 16 OSC1 CLKIN RB SZ o 5 T 22PF N a 8 LED 6 xi RB 9 BIN 6 C3 D LIT
122. mento del Watch Dog Timer possono essere trovati sul datasheet Microchip del PIC16F84 documento DS30430C a pagina 50 file C temp borrar pbe italiano less6 passo2 htm 2 of 2 13 10 1999 6 26 14 PM Lezione 7 Interfacciamento con il mondo esterno AI termine di questa lezione saprete Come collegare un display LCD 16x2 al PIC e come gestirlo Come collegate il PIC al nostro PC tramite RS232 Realizzare in miniterminale LCD e Pilotare da PC una serie di led o leggere lo stato di una serie di pulsanti Contenuti della lezione 7 1 Gestione di un display LCD 2 L interfaccia RS232 3 Un altro esempio con l interfaccia RS232 file C temp borrar pbe italiano less7 intro htm 13 10 1999 6 26 14 PM Lezione 7 Passo 1 DI Gestione di un display LCD Dopo aver realizzato nelle lezioni precedenti dei semplici esperimenti con diodi led e pulsanti iniziamo da questa lezione ad interfacciare il nostro PIC16F84 con qualcosa di pi complesso Inizieremo con un display a cristalli liquidi o LCD dall inglese Liquid Crystal Display dotato di 2 linee di 16 caratteri ciascuna I display LCD pi comuni reperibili in commercio dispongono di una un interfaccia ideata da Hitachi che nel tempo diventata uno standard industriale utilizzato anche da altre case produttrici Questo tipo di interfaccia prevede che il display sia collegato al micro tramite un bus dati da 4 o 8 linee pi 3 linee di controllo e le linee di alimentaz
123. mo ora ad effettuare un esperimento sul campo per verificare quanto finora appreso Nella lezione 2 avevamo realizzato un lampeggiatore a quattro led la cui sequenza di lampeggio era determinata da una subroutine che introduceva un ritardo software ovvero un ritardo basato sul tempo di esecuzione di un ciclo continuo di istruzioni file C temp borrar pbe italiano less4 passo2 htm 1 of 2 13 10 1999 6 26 10 PM Lezione 4 Passo 2 Proviamo ora a riscrivere la stessa subroutine per introdurre un ritardo pari ad un secondo utilizzando il registro TMRO Le modifiche sono state riportate nel file SEQTMRO ASM Dobbiamo anzitutto programmare il PRESCALER per ottenere una frequenza di conteggio conveniente inserendo le seguenti istruzioni all inizio del programma movlw 00000100B movwf OPIION REG In pratica dobbiamo programmare bit TOCS a 0 per selezionare come sorgente del conteggio il clock del PIC il bit PSA a 0 per assegnare il PRESCALER al registro TRMO anzich al Watch Dog Timer di cui tratteremo in seguito e 1 bit di configurazione del PRESCALER a 100 per ottenere una frequenza di divisione pari a 1 32 La frequenza di conteggio che otterremo sul TRMO sar pari a Fosc 1Mhz 32 31 250 Hz La subrountine Delay dovr utilizzare opportunamento il registro TMRO per ottenere un ritardo pari ad un secondo Vediamo come Le prime istruzioni che vengono eseguite nella Delay sono movlw 6 movw f TMRO e movlw 125 movwf
124. o bit nel registro TRIS anzi per meglio dire ogni bit del registro TRIS fisicamente implementato con un TRIS latch L uscita Q del TRIS latch collegata all ingresso di una porta logica di tipo OR Questo significa che indipendentemente dal valore presente all altro ingresso l uscita della porta OR varr sempre 1 in quanto uno dei suoi ingressi vale 1 vedi tavola della verit In questa condizione il transistor P non conduce e mantiene la linea RAO scollegata dal positivo d alimentazione Allo stesso modo l uscita negata del TRIS latch collegata all ingresso di una porta AND quindi l uscita di questa varr sempre 0 in quanto uno dei suoi ingressi vale 0 vedi tavola In questa condizione anche il transistor N non conduce mantenendo la linea RAO scollegata anche dalla massa Lo stato logico della linea RAO dipender esclusivamente dalla circuiteria esterna a cui la collegheremo Applicando 0 o 5 volt al pin RAO sar possibile leggerne lo stato sfruttando la circuiteria d ingresso del blocco rappresentata dal TTL input buffer e dal latch d ingresso Funzionamento in uscita Per configurare la linea RAO in uscita dobbiamo mettere a 0 il bit 0 del registro TRISA con l istruzione bcf TRISA 0 Questo determina la commutazione a 0 dell uscita Q del TRIS latch ed a 1 dell uscita Q negata In questo stato il valore in uscita dalle porte OR e AND dipende esclusivamente dallo stato dell uscita Q negata del Data Latch Come per il TRIS
125. of 3 13 10 1999 6 50 41 PM file C temp borrar pbe examples dblint asm BG QUK EUN AAA ARE IRE AR RA AA A A Ay Aa Pic by example DBLINT ASM c 1999 Sergio Tanzilli picbyexampleGpicpoint com http www picpoint com FER RRA EAR KERR RARER KARR KEK KEER KEKEE KERER EE RARR RE BK PROCESSOR 16F84 RADIX DEC INCLUDE P16F84 INC ERRORLEVEL 302 Setup of PIC configuration flags XT oscillator Disable watch dog timer Enable power up timer Disable code protect _ CONF IG 3FF1H LED1 EQU 0 LED2 EQU 1 LED3 EQU 2 LED4 EQU 3 ORG OCH Count RES 2 nTick RES 1 Reset Vector Starting point at CPU reset ORG 00H Jump to the main body of program to avoid the interrupt handler code goto Start interrupt vector Starting point at CPU interrupts ORG 04H PRIORA te oec p 121 12121212121212 1212 1212121212 21212 2 2 2 v 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ERE Interrupt handler Epl De Su a Sa o aS 1212 2 21 212121212121212 2121212 12 2 2 2 2 2 2 2 2 2 2 2 SGS Ous Maa CM ERI Check the interrupt event btfsc INTCON TOIF goto IntTOIF btfsc INTCON RBIF goto IntRBIF Reset the TOIF and RBIF flags to r nable the interrupts End ih file C temp borrar pbe examples dblint asm 1 of 4 13 10 1999 6 51 02 PM file C temp borrar pbe examp
126. onda direttiva ORG f riferimento ad un indirizzo in area programma nella EEPROM anzich in area dati Da questo punto in poi andremo infatti ad inserire le istruzioni mnemoniche che il compilatore dovr convertire negli opportuni opcode per il PIC Il primo opcode eseguito dal PIC dopo il reset quello memorizzato nella locazione 0 da qui il valore OOH inserito nella ORG bsf STATUS RPO Ecco finalmente la prima istruzione mnemonica completa di parametri I PIC hanno una CPU interna di tipo RISC per cui ogni istruzione occupa una sola locazione di memoria opcode e parametri inclusi In questo caso l istruzione mnemonica bsf sta per BIT SET FILE REGISTER ovvero metti a uno condizione logica alta uno dei bit contenuti nella locazione di ram specificata Il parametro STATUS viene definito nel file P16F84 INC tramite una direttiva EQU Il valore assegnato in questo file 03H e corrisponde ad un file register ovvero una locazione ram nell area dati riservato Anche il parametro RPO viene definito nel file P16F84 INC con valore 05H e corrisponde al numero del bit che si vuole mettere a uno Ogni file register lungo 8 bit e la numerazione di ciascuno parte da 0 bit meno significativo fino ad arrivare a 7 bit pi significativo Questa istruzione in pratica mette a 1 il quinto bit del file register STATUS Questa operazione necessaria come vedremo nelle lezioni successive per accedere ai file register TRISA e TRISB come vedremo or
127. ossibili per questo semplice programma sono molte Lo potremmo usare ad esempio per visualizzare dei messaggi durante boot di Windows 95 inserendo il comando all interno del file AUTOEXEC BAT Spunti per un p di esercitazioni La nostra applicazione d esempio stata sviluppata nel modo pi semplice possibile per permettere a chiunque di capirne il funzionamento senza perdersi in centinaia di linee di codice Questo comporta ovviamente una serie di limitazioni nelle funzionalit che questo miniterminale in grado di dare Chi volesse fare un p di esercizio pu tentare di ampliare il numero di caratteri di controllo riconosciuto dal miniterminale quali ad esempio il Carriage Return il New Line o il Backspace Chiunque abbia voglia di realizzare questi esercizi pu inviare direttamente all autore all indirizzo picbyexample Opicpoint com il proprio lavoro per una eventuale pubblicazione tra gli esempi del corso file C temp borrar pbe italiano less7 passo2 htm 8 of 8 13 10 1999 6 26 19 PM Lezione 7 Passo 3 ud Un altro esempio con l interfaccia RS232 Vediamo ora un altro esempio di utilizzo della RS232 In questo caso realizzeremo un circuito che sfrutta anche le capacit trasmissive messe a disposizione dalla subroutine TxChar Si tratta in pratica dell evoluzione del circuito gi presentato nella lezione 5 a 4 led e 4 switch dotato ora di interfaccia RS232 per poter comandare i quattro led e leggere da PC lo stato dei q
128. ower Down Mode e ridurre di conseguenza la corrente assorbita che passer da circa 2mA a 5 volt con clock di funzionamento a 4Mhz a circa 2uA ovvero 1000 volte di meno Per entrare in Power Down Mode basta inserire questa istruzione in un punto qualsiasi del nostro programma SLEEP Qualsiasi istruzione presente dopo la SLEEP non verr eseguita dal PICmicro che terminer in questo punto la sua esecuzione spegner tutti i circuiti interni tranne quelli necessari a mantenere lo stato delle porte di I O stato logico alto basso o alta impedenza ed a rilevare le condizioni di risveglio di cui perleremo di seguito Per ridurre il consumo di corrente in questo stato non devono esserci ovviamente circuiti collegati alle linee di uscita del PIC che consumino corrente O meglio questi circuiti devono essere progettati in modo da limitare il loro assorbimento nelle condizioni di Power Down Un altro accorgimento raccomandato dalla Microchip quello di collegare al positivo Vdd o al negativo Vss di alimentazione tutte le linee in alta impedenza non utilizzate compresa la linea RA4 TOCKI pin 3 Il risveglio del PICmicro Per risvegliare il PICmicro dal suo sonno possono essere utilizzate diverse tecniche 1 Reset del PICmicro mettendo a 0 il pin MCLR pin 4 2 Timeout del timer del Watchdog se abilitato 3 Verificarsi di una situazione di interrupt interrupt dal pin RBO INT cambio di stato sulla porta B termine delle operazion
129. pulsante rilasciato ci sia una condizione logica a 1 stabile sulla linea d ingresso La circuiteria di weak file C temp borrar pbe italiano less3 passo2 htm 3 of 5 13 10 1999 6 26 07 PM Lezione 3 Passo 2 pull up consente di evitare l uso di resistenze di pull up e pu essere attivata o disattivata agendo sul bit RBPU del registro OPTION Nella figura seguente viene riprodotto lo schema a blocchi dello stadio d uscita estratto dal data sheet Microchip D aa Latch D aa bus WR Fort WR TRIS RB IMT RD Part La sola linea RBO inoltre presenta una caratteristica molto particolare Essa quando viene configurata come linea di ingresso pu generare in corrispondenza di un cambio di stato logico un interrupt ovvero una interruzione immediata del programma in esecuzione ed una chiamata ad una subroutine speciale denominata interrupt handler Ma di questo parleremo in seguito Stadio d uscita delle linee RB4 RB5 RB6 e RB7 La circuiteria di commutazione di questo gruppo di linee identica al gruppo RBO 3 Queste linee dispongono anche della circuiteria di weak pull up In pi rispetto alle linee RBO 3 hanno uno stadio in grado di rilevare variazioni di stato su una quansiasi linea e di generare un interrupt di cui parleremo nelle prossime lezioni Nella figura seguente viene riprodotto lo schema a blocchi dello stadio d uscita estratto dal data sheet Microchip file C temp borrar pbe italiano less3 passo2 htm
130. quattro led Le linee da RB4 a RB7 vengono programmate quattro pulsanti movlw 11110000B movwf TRISB amp 7FH Commuta sul primo banco dei registri bcf STATUS RPO file C temp borrar pbe examples input asm 1 of 2 13 10 1999 6 49 40 PM file C temp borrar pbe examples input asm MainLoop Spegne tutti i led clrt PORTB Se e premuto il pulsante btfss PORTB SW bsf PORTB LED Se e premuto il pulsante btfss PORTB SW2 bsf PORTB LED2 Se e premuto il pulsante btfss PORTB SW3 bsf PORTB LED3 Se e premuto il pulsante btfss PORTB SW4 bsf PORTB LED4 goto MainLoop END SW1 SW2 SW3 Sw4 accende accende accende accende id id il id file C temp borrar pbe examples input asm 2 of 2 13 10 1999 6 49 40 PM file C temp borrar pbe examples seqtmr0 asm SERRA ra ee IRE Ku E AAA Tp pO DAS Pic by example SEQTMRO ASM Luci sequenziali con temporizzazione via TIMER 0 c 1999 Sergio Tanzilli tanzilli picpoint com http www picpoint com picbyexample index htm PRIOR RRA EAA KAR RAR EREE EREEREER KERR EKA OK ERK AAA RK KKK RON PROCESSOR 16F84 RADIX DEC INCLUDE P16F84 INC Setup of PIC configuration flags XT oscillator Disable watch dog timer Enable power up timer Disable code protect __CONF
131. questo corso salvo quando esplicitamente indicato utilizzato la seguente configurazione Oscillatore in modalit XT In questa modalit il PIC funziona correttamente con un quarzo collegato ai pin OSCI e OSC2 come indicato negli schemi d esempio e Watch Dog Timer Disabilitato La funzione del Watch Dog Timer viene spiegata pi avanti nel corso Per far funzionare correttamente gli esempio salvo quando indicato esplicitamente il watch dog timer deve essere disabilitato Esistono altri flag di configurazione il cui settaggio non determina cambiamenti sull esito degli esercizi Lezione 2 e mane Architettura interna dei PIC Al termine di questa lezione saprete Dove viene memorizzato il programma Dove vengono memorizzati i dati Che cosa una ALU un Accumulatore il Program Counter lo Stack ed il Register File Contenuti della lezione 2 1 L area programma ed il Register File L ALU ed il registro W 2 3 Il Program Counter e lo Stack 4 Realizziamo le Luci in sequenza file C temp borrar pbe italiano less2 intro htm 13 10 1999 6 26 01 PM Lezione 2 passo 1 E TT J PI L area di programma e il Register File Dopo aver fatto un p di pratica passiamo ora alla teoria Iniziamo a vedere com fatto internamente un PIC quali dispositivi contiene e come interagiscono tra loro Nella figura seguente viene riprodotto lo schema a blocchi semplificato dell architettura interna del PIC16F
132. rante l esecuzione del nostro programma Quest area coincide con l area RAM del PIC definita dalla Microchip come area dei FILE REGISTER I file register altro non sono che locazioni RAM disponibili per l utente a partire dall indirizzo OCH Questo indirizzo di file C temp borrar pbe italiano less1 passo4 htm 1 of 6 13 10 1999 6 25 59 PM Lezione 1 passo 4 inizio fisso e non pu essere cambiato in quanto le locazioni precedenti sono occupate da altri registri specializzati per uso interno Count RES 2 In questa linea incontriamo una label Count e una direttiva RES La direttiva RES indica al compilatore che intendiamo riservare un certo numero di byte o meglio di file register all interno dell area dati in questo caso 2 byte La label Count dove Count un nome scelto da noi un marcatore che nel resto del source assumera il valore dell indirizzo in cui stato inserito Dato che precedentemente avevamo definito l indirizzo di partenza a OCH con la direttiva ORG Count varr OCH Se ad esempio inseriamo una label anche alla linea successiva essa varr OCH 2 due sono i byte che abbiamo riservato ovvero OEH I nomi delle label possono essere qualsiasi ad eccezione delle parole riservate al compilatore quali sono le istruzioni mnemoniche e le direttive Una label si distingue da una costante simbolica perch il suo valore viene calcolato in fase di compilazione e non assegnato da noi staticamente ORG 00H Questa sec
133. rar pbe italiano less8 passo1 htm 1 of 3 13 10 1999 6 58 58 PM Lezione 8 Passo 1 A questo punto dobbiamo settare il flag WREN WRite ENable contenuto nel registro di controllo EECONI per poter abilitare l accesso alle successive operazioni di scrittura Dato che il registro EECONI situato nel banco registri 1 dovremo indirizzare questo banco settando il bit RPO del registri STATUS prima di accedere al registri EECONI bsf STATUS RPO Swap to bank 1 bsf EECON1 WREN Enable Write Ora dobbiamo eseguire una sequenza di scritture sul registro EECON2 per comunicare al PIC che abbiamo intenzione di scrivere sulla EEPROM Questa sequenza rappresenta una specie di codice di accesso alla EEPROM e serve ad evitare scritture accidentali in caso di funzionamento anomalo del PIC dovuto a sbalzi di tensione errori si programmazione In pratica dobbiamo scrivere i due valori esadecimali 55h e AAh in sequenza nel registro EECON2 movlw 55h Write 55H to RECON2 movwf EECON2 movlw AAh Write AAh to EECON2 movwf EECON2 Arrivati a questo punto abbiamo effettuato tutte le operazioni preliminari per scrivere sulla EEPROM e ci rimane solo di avviare la scrittura settando il flag WR WRite del regsistro EECONI con l istruzione bsf EECONI WR Begin write L hardware del PIC impiega un certo tempo a partire da questo momento per programmare la cella EEPROM con il valore da noi inviato Quando l operazione ha avuto termine l hardware del PIC ci
134. rettiva INCLUDE con il contenuto del file indicato e ad effettuare quindi la compilazione come se fosse anch esso parte del nostro source LED EQU 0 Ancora direttive Ma quando arrivano le istruzioni Ancora un po di pazienza La direttiva EQU molto importante in quanto ci consente di definire delle costanti simboliche all interno del nostro source In particolare la parola LED da questo punto in poi del source sar equivalente al valore 0 Lo scopo principale dell esistenza della direttiva EQU quindi rendere i source pit leggibili e consentire di cambiare i valori costanti in un unico punto del source E importante notare che la parola LED non identifica una variabile ma semplicemente un nome simbolico valido durante la compilazione Non sar quindi possibile inserire instruzioni tipo LED 3 all interno del source in quanto l assegnazione dinamica di un valore ad una variabile un operazione che richiede l intervento della CPU del PIC e che quindi deve essere espressa con istruzioni e non con direttive Le direttive hanno senso solo durante la compilazione del source quindi un PIC non potr mai eseguire una direttiva Vediamo ora la linea seguente ORG OCH Anche ORG una direttiva e ci consente di definire l indirizzo da cui vogliamo che il compilatore inizi ad allocare i dati o le istruzioni seguenti In questo caso stiamo per definire un area dati all interno del PIC ovvero un area in cui memorizzare variabili e contatori du
135. ro La frequenza di conteggio direttamente proporzionale alla frequenza di clock applicata al chip e pu essere modificata programmando opportunamente alcuni bit di configurazione Nella figura seguente viene riportata la catena di blocchi interni al PIC che determinano il funzionamento del registro TMRO TOCS Fosc PA 1 Hee TOSE 3 PS2 PSI Psd I blocchi Fosc 4 e TOCKI riportati in blu rappresentano le due possibili sorgenti di segnale per il contatore TMRO Fosc 4 un segnale generato internamente al PIC dal circuito di clock ed pari alla frequenza di clock divisa per quattro TOCKI un segnale generato da un eventuale circuito esterno ed applicato al pin TOCKI corrispondente al pin 3 nel PICI6F84 I blocchi TOCS e PSA riportati in verde sono due commutatori di segnale sulla cui uscita viene presentato uno dei due segnali in ingresso in base al valore dei bit TOCS e PSA del registro OPTION Il blocco PRESCALER un divisore programmabile il cui funzionamento verr spiegato nel prossimo passo Vediamo in pratica come possibile agire su questi blocchi per ottenere differenti modalit di conteggio per il registro TMRO Iniziamo programmando i bit TOCS a 0 e PSA a 1 La configurazione di funzionamento che otterremo rappresentata nella seguente figura file C temp borrar pbe italiano less4 passo1 htm 2 of 4 13 10 1999 6 26 09 PM Lezione 4 Passo 1 1 p i TOCS P
136. rt B file C temp borrar pbe italiano less2 passo4 htm 1 of 2 13 10 1999 6 26 04 PM Lezione 2 passo 4 si otterr lo spegnimento del LEDI e l accensione del LED2 e cosi via per i cicli successivi Quando il bit 4 di Shift varra 1 vorr dire che tutti e quattro 1 led sono stati accesi almeno una volta e occorre quindi ripartire dal led 1 Le istruzioni seguenti svolgono questo tipo di controllo brtrtso Shifk 4 swapf Shirbt F L istruzione BTFSC Shift 4 controlla appunto se il bit 4 del registro Shift vale 1 Se si esegue l istruzione successiva SWAPF Shift F altrimenti la salta L istruzione SWAP dall inglese scambia in pratica scambia i quattro bit pi significativi contenuti nel registro Shift con i quattro meno significativi Dal valore iniziale del registro Shift pari a 00010000B ottenuto dopo alcune ripetizioni del ciclo MainLoop si ottiene il valore 00000001B ed in pratica alla riaccensione del primo led file C temp borrar pbe italiano less2 passo4 htm 2 of 2 13 10 1999 6 26 04 PM Lezione 3 beso oe Introduzione alle periferiche AI termine di questa lezione saprete Come funzionano e come si programmano le linee di I O Contenuti della lezione 3 1 Le porte A e B 2 Stadi d uscita delle linee di I O 3 Input da tastiera file C temp borrar pbe italiano less3 intro htm 13 10 1999 6 26 05 PM Lezione 3 Passo 1 O OS P3 Le porte Ae B Il PIC16F84 dispone di un totale d
137. ruzioni semplicemente accendono il led e rimandano il programma all ingresso del ciclo di lampeggiamento SetToZero file C temp borrar pbe italiano less1 passo4 htm 4 of 6 13 10 1999 6 25 59 PM Lezione 1 passo 4 bcf PORTB LED goto MainLoop Queste due istruzioni semplicemente spengono il led e rimandano il programma all ingresso del ciclo di lampeggiamento La subroutine Delay Come descritto in precedenza questa subroutine inserisce un ritardo di circa un secondo e pu essere chiamata pi volte nel source tramite l istruzione call Delay Vediamo come funziona Delay cile Count Olrr Count DelayLoop decfsz Count 1 goto DelayLoop decfsz Count 1 1 goto DelayLoop retlw 0 END Delay e DelayLoop sono due label Delay identifica l indirizzo di inizio della subroutine e viene utilizzato per le chiamate dal corpo principale del programma DelayLoop viene chiamato internamente dalla subrountine e serve come punto di ingresso per il ciclo dall inglese loop di ritardo In pratica il ritardo viene ottenuto eseguendo migliaia di istruzioni che non fanno nulla Questo tipo di ritardo si chiama ritardo software o ritardo a programma E il tipo di ritardo pi semplice da implementare e pu essere utilizzato quando non richiesto che il PIC esegua altri compiti mentre esegue il ritardo Le istruzioni elet Count ele Counti CLEAR FILE REGISTER azzerano le due locazioni di ram riservate precedentemente con l istruzione
138. semplice locazione di memoria in grado di contenere un solo valore a 8 bit La differenza sostanziale tra il registro W e le altre locazioni di memoria consiste proprio nel fatto che per referenziare ill registro W la ALU non deve fornire nessun indirizzo di memoria ma pu accedere direttamente Il registro W viene utilizzato spessissimo nei programmi per PIC Facciamo un esempio pratico Supponiamo di voler inserire nella locazione di memoria 0CH del REGISTER FILE il valore 01H Cercando tra le istruzioni del PIC ci accorgiamo subito che non esiste un unica istruzione in grado di effettuare questa operazione ma dobbiamo necessariamente ricorrere all accumulatore ed usare due istruzioni in sequenza Vediamo perch Come detto nei passi precedenti l opcode di una istruzione non pu essere pi grande di 14 bit mentre a noi ne servirebbero 8 bit per specificare il valore che intendiamo inserire nella locazione di memoria 7 bit per specificare in quale locazione di memoria vogliamo inserire il nostro valore 6 bit per spcificare quale istruzione intendiamo utilizzare per un totale di 8 7 6 21 bit Dobbiamo quindi ricorrere a due istruzioni ovvero movlw 01H movwf QCH che prima inseriscono nel registro W il valore 01H con l istruzione MOVe Literal to W e poi lo muovono nella locazione OCH con l istruzione MOVe W to F Nel passo successivo incontreremo il Program Counter e lo Stack che ci aiuteranno a capire come funzion
139. sere sincrona o asincrona Nel nostro caso analizzeremo solo la comunicazione seriale asincrona ignorando completamente quella sincrona in quanto pi complessa e non disponibile sui normali PC Una comunicazione seriale consiste in genere nella trasmissione e ricezione di dati da un punto ad un altro usando una sola linea elettrica In pratica se desideriamo trasmettere un intero byte dobbiamo prendere ogni singolo bit in esso contenuto ed inviarlo in sequenza sulla stessa linea elettrica un p come avviene per la trasmissione in codice morse La differenza sostanziale st nel fatto che a generare e ricevere dati non c il telegrafista ma un computer per cui le velocit di trasmissione raggiungibili sono molto superiori Facciamo subito un esempio pratico e vediamo come fa un PC a trasmettere ad esempio il carattere A usando la RS232 Non necessario ovviamente realizzare gli esempi riportati di seguito in quanto presuppongono l uso di una coppia di PC ed un oscilloscopio non sempre disponibili nei nostri mini laboratori da hobbysta Per comprendere il funzionamento di quanto esposto e sufficiente fare riferimento alle figure a corredo Se prendiamo una coppia di fili e colleghiamo tra loro le porte seriali di due PC che denomineremo PC trasmittente e PC ricevente secondo lo schema riportato in figura Canon 3 pin male Caron 3 pin rale OCE DOCE PC trance mitter PC receiver otterremo la pi semplice delle connessioni in RS232
140. sibile inviarli al display se il bus dati composto da sole 4 linee Viene fatta in pratica una operazione detta di multiplex ovvero ogni byte viene scomposto in due gruppi di di 4 bite quindi trasmessi sul bus dati in sequenza Vengono inviati prima i quattro bit meno significativi seguiti dai quattro bit pi significativi Nel nostro source di esempio tutte le operazioni di trasmissione di dati e comandi verso il display vengono eseguite da una serie di subroutine presenti nel file LCD1 ASM semplificando cosi al massimo la complessit del nostro programma Prima di addentrarci nello studio delle singole subroutine vediamo come funziona il programma principale Analizziamo il sorgente LCD1 ASM Nella prima parte del nostro source vengono definite alcune costanti LCD Control lines file C temp borrar pbe italiano less7 passo1 htm 2 of 4 13 10 1999 6 26 16 PM Lezione 7 Passo 1 LCD RS equ 2 Register Select LCD mE equ 3 Enable LCD data line bus LCD DB4 equ 4 LCD data line 4 LCD DB5 equ 5 LCD data line DB5 LCD DB6 equ 6 LCD data line DB6 LCD DB7 equ 7 LCD data line DB7 Queste costanti definiscono l associazione tra le linee del PIC tutte connesse alla PORTA B e le linee del display Le singole definizioni verranno usate all interno delle subroutine di gestione dell LCD al posto dei singoli numeri di identificazione delle linee di I O tmpLcdRegister res 2 msDelayCounter
141. so e quali in uscita Lo stesso stato logico delle linee di I O dipende dal valore dei due registri PORTA e PORTB Alcuni registri riportano lo stato di funzionamento dei dispositivi interni al PIC o il risultato di operazioni aritmetiche e logiche E necessario conoscere quindi esattamente quale funzione svolge ciascun registro specializzato e quali effetti si ottengono nel manipolarne il contenuto Per facilitare le operazioni sui registri specializzati nel file P16F84 INC che come ricorderete era stato incluso nel source LED ASM con la direttiva INCLUDE la Microchip ha inserito una lista di nomi che identificano univocamente ciascun registro specializzato e a cui sono associati gli indirizzi corrispondenti nell area dei REGISTER FILE Se ad esempio volessimo definire tutte le linee della porta B del PIC in uscita agendo sul registro TRISB potremmo scegliere di referenziare direttamente il registro con il suo indirizzo moviw B 00000000 movwf O6H oppure referenziare lo stesso registro con il suo nome simbolico movlw B 00000000 movwf TRISB file C temp borrar pbe italiano less2 passo1 htm 3 of 4 13 10 1999 6 26 02 PM Lezione 2 passo 1 avendo pero l accortezza di inserire la direttiva INCLUDE P16F84 INC nel nostro source Nel passo successivo vedremo un altro componente interno al PIC denominato ALU ed il registro W conosciuto anche con il nome di accumulatore file C temp borrar pbe italiano less2 passo1 htm
142. ssa a 5 volt consentendo al PIC appena programmato di iniziare l esecuzione del codice L alimentazione dello Yapp viene ricavata direttamente dalla scheda prototipo tramite il pin 6 del connettore e quindi ridotta a 5 volt dall integrato U3 per alimentare gli integrati U1 e U2 La 12 volt viene utilizzata anche per generare la tensione di programmazione Vpp inviata al PIC tramite il pin MCLR Dove acquistare lo Yapp Lo Yapp pu essere realizzato al solo costo dei componenti utilizzando la documentazione presente su queste pagine file C temp borrar pbe italiano hardware yapp htm 5 of 7 13 10 1999 6 32 21 PM Yet Another Pic Programmer Per quanti desiderano acquistare lo Yapp in kit oppure gi montato e collaudato o solo parte della componentistica necessaria alla sua realizzazione pu rivolgersi ad alcuni produttori indipendenti La produzione e la vendita dello Yapp viene effettuata in maniera del tutto autonoma ed indipendente Per ogni informazione di carattere commerciale si prega quindi di non inviare richieste all autore ma di indirizzarle direttamente alle persone interessate e Elettroshop di Andrea Galizia e Hobby Elettronica 2 di Adriano Venturini Links e Protocollo di comunicazione tra Yapp e PC riservato ai programmatori che intendono realizzare proprie versioni del programma di gestione dello Yapp e Accessori per il corso Download Schema elettrico Yapp versione 2 7 YAPP27 PDF
143. ssione di un comando dal programmatore al PIC i ee ie Iu 1 1 5 b i i i i MELE i i 1 i a 1 w NE A UN E i M E x 3 E pas UU i EE j Dee 1 j CLOCK i i i i Lun 1 RAN L Ej 1 n 0 0 i i i A n RM n m IRE L PRT I 1 I 0 1 3 DATA i 0 i Le nm gt AAA zz Al gt _ kaw _ ci i Li Tutte le operazioni sul PIC da programmare devono essere precedute dall invio di un comando da parte del programmatore per comunicare al PIC l operazione che si intende eseguire La lunghezza dei comandi sempre di 6 bit a volte seguiti da una trasmissione di 14 bit contenenti il valore da programmare Nella seguente tabella viene riportato a titolo d esempio l elenco dei comandi riconosciuti dai PIC16x84 Comando dal programmatore Codice comando Descrizione Load Configuration 000000 Invia al PIC il prossimo dato da scrivere in memoria programma Al codice comando segue immediatamente il dato da memorizzare Load Data for Program 000010 Invia al PIC il prossimo dato da scrivere in memoria dati Al Memory codice comando segue immediatamente il dato da memorizzare Read Data from Program 000100 Legge dal PIC la locazione corrente dall area programma Memory Appena riceve questo comando il PIC trasmette al programmator
144. te and send it to the PC goto Led4Of f bcf PORTB LED4 goto MainLoop Led4Off FERA Je o ARK KR SK RAK IR E KAR GET SWITCH REOR RR ARAB E RIE RAK IRR BARK Get Switch movlw GET_SWITCH xorwf ShiftReg W btfss STATUS Z goto _GetSwitch swapf PORTB W movwf DummyReg comf DummyReg W andlw OFh call TxChar goto MainLoop _GetSwitch goto MainLoop PRICE TAR ERITREA RAR OK PERRERA RN RRA OK OK RRR AREA RRR RK BKK RIK ARERR BR RRB BAR RRR Delay subroutine W Requested delay time in ms FEE ao E EVER RETE LRA BKK K KERER ER KAE ERRER DKA RARER BRR RA RAK KAR msDelay movwf ELNE 1 ms msDelayLoop nop decfsz goto nop decfsz goto return PRICK RRA ARK RAR RA KK KK KK BRI KK OK GR OK EROR KARR BIR ARK BER BRL OK OO E OR KE UK KCKCK IRA RRR RAK TK ms ms Del Del LayCo LayCo about in ms ms ms ms Del Del Del Del Send a character on RS232 9600 baud 8 data bit LayCo 1 stop bit Input W Character to send SSO ER TID oe Ka Uo eo po KR KU NSIS uvae e ken CURSUS E DUK KU S Sta ANNA UE OR ose oce A ROUEN Ro INA TxChar movwf movlw movwf ShiftReg 8 BitCount clock 4MHz unter unter terna unter LayLoop F1 HO loop FO F layCounter 1 F layLoop No parity Data lenght file C temp borrar pbe examples rs232i0 asm 5 of 7 13 10 1999 6 46 5
145. temp borrar pbe examples Icdterm asm bcf PORTB LCD DB4 bcf PORTB LCD DB5 bcf PORTB LCD DB6 bcf PORTB LCD DB7 btfsc tmpLcdRegister 4 bsf PORTB LCD DBA btfsc tmpLcdRegister 5 bsf PORTB LCD_DB5 btfsc tmpLcdRegister 6 bsf PORTB LCD DB6 btfsc tmpLcdRegister 7 bsf PORTB LCD DB7 bsf PORTB LCD E Enables LCD movlw 1 Wait ims call msDelay bcf PORTB LCD E Disabled LCD movlw 1 Wait ims call msDelay Send lower four bits bcf PORTB LCD DB4 bcf PORTB LCD DB5 bcf PORTB LCD DB6 bcf PORTB LCD DB7 btfsc tmpLcdRegister 0 bsf PORTB LCD_DB4 btfsc tmpLcdRegister 1 bsf PORTB LCD_DB5 btfsc tmpLcdRegister 2 bsf PORTB LCD DB6 btfsc tmpLcdRegister 3 bsf PORTB LCD DB7 bsf PORTB LCD E Enables LCD movlw 1 Wait ims call msDelay bcf PORTB LCD E Disabled LCD movlw 1 Wait ims call msDelay return TERA utu RE BREE RAK EERIE BKK HER KR OKOK OK KR ORUKOK ORE OK OK CR ARB ELK EE KERERE ECKGKHKCE OK EER ARK Send a character on RS232 9600 baud 8 data bit 1 stop bit No parity Input W Character to send uk eR kuu Ae M UNUS OUR RU kaa e eA OR Ka RE RD RR IS KO ROS CE TxChar movwf ShiftReg moviw 8 Data lenght movwf BitCount bcf PORTA TX Send start bit file C temp borrar pbe examples Icdterm asm 7 o
146. temp borrar pbe italiano less7 passo2 htm 4 of 8 13 10 1999 6 26 19 PM Lezione 7 Passo 2 nostro PIC Nel file LCDTERM ASM troverete il source completo del nostro terminale d esempio Una volta montato il nostro circuito d esempio e programmato correttamente il 21016184 possiamo collegare al nostro PC il circuito e fornire alimentazione Sul display apparir il cursore lampeggiante in alto a sinistra A questo punto lanciamo in esecuzione un programma qualsiasi di emulazione terminale e configuriamolo per usare la porta seriale a cui collegato il circuito a 9600 baud 8 data bit 1 stop bit e no parity Assicuriamoci inoltre che non sia abilitato alcun controllo di flusso dei dati sulla seriale sia esso hardware che xon xoff Proviamo ora a premere qualche tasto sulla tastiera del PC ed osserviamo come i caratteri digitati vengano visualizzati anche sul display LCD del nostro circuito Premendo i tasti CTRL L potremo pulire lo schermo dell LCD e visualizzare nuove scritte Analizziamo il sorgente Andiamo ad analizzare ora il sorgente LCDTERM ASM del firmware della nostra applicazione d esempio Partiamo dall linea 24 dove troviamo le seguenti direttive TX equ 0 Tx data RX equ 1 Rx data in cui vengono assegnate alle costanti TX e RX rispettivamente le linee di trasmissione TX e ricezione RX del PIC In questa applicazione in realt non viene ancora usata la linea di trasmissione in quanto il nostro miniterminale in grado
147. ttenere a video il seguente MPASM 02 01 Released 0199397 Microchip Technology Inc Byte Craft Limited Checking C PICGPRG LED ASM for symbols Assembling LED 1 ASM 73 Building files Errors 0 Warnings 0 reported 0 suppressed Messages 2 reported 0 suppressed Lines Assembled 206 Press any key to continue Premiamo un tasto come richiesto dallo MPASM e andiamo a vedere che file sono stati generati Se tutto andato bene file C temp borrar pbe italiano less1 passo5 htm 1 of 2 13 10 1999 6 26 00 PM Lezione 1 passo 5 dovremo avere i seguenti nuovi file LED HEX LED LST LED ERR LED COD Il contenuto dei file gi stato illustrato nel passo 3 quindi proseguiamo con la programmazione del PIC utilizzando il solo file LED HEX che contiene il file compilato in formato Intel Hex 8 file C temp borrar pbe italiano less1 passo5 htm 2 of 2 13 10 1999 6 26 00 PM Lezione 1 passo 6 I 9e NW Programmiamo il PIC Premessa Per programmare i PIC in questa lezione faremo riferimento al programmatore Y APP Yet Another Pic Programmer realizzato dall autore e presentato in questo stesso corso Qualsiasi altro programmatore di PIC potr comunque essere tranquillamente utilizzato per la realizzazione degli esercizi Per le operazioni di programmazione su altri programmatori si prega di far riferimento alla relativa documentazione La documentazione ed il software per la realiz
148. ualsiasi porta seriale tramite un normale emulatore di terminale tipo Hyperterminal su Windows 95 98 Telix su MS DOS o Minicom su Linux Vediamo subito lo schema elettrico del nostro circuito nel seguente file EXAMPLE6 PDF Come potete vedere la base del circuito che andremo a realizzare identica a quella del passo precedente con la sola aggiunta del circuito integrato U3 del connettore a vaschetta DB9 per il collegamento alla porta seriale del PC ed una manciata di componenti accessori L integrato U3 un MAX232 prodotto dalla Maxim vedi datasheet su http www mxim com si occupa di convertire i segnali RS232 dai 12 volt necessari per trasmettere e ricevere dati sulla porta seriale ai 0 5 volt TTL gestibili direttamente dalle porte del PIC Ma vediamo in dettaglio come funziona la comunicazione seriale in RS232 Cos e a cosa serve l RS232 Lo standard RS232 definisce una serie di specifiche per la trasmissione seriale di dati tra due dispositivi denominati DTE Data Terminal Equipment e DCE Data Communication Equipment Come si pu vagamente intuire dal nome il Data Communication Equipment un dispositivo che si occupa di gestire una comunicazione dati mentre il Data Terminal Equipment un dispositivo che si occupa di generare o ricevere dati In pratica l RS232 stata creata per connettere tra loro un terminale dati nel nostro caso un computer con un modem per la trasmissione a distanza dei dati generati
149. uattro switch Lo schema elettrico lo potete trovare nel file example7 pdf ed il source nel file RS23210 ASM Viene fornito anche un semplice programma per MS DOS denominato RS232IO e scaricabile dalla sezione download Con questo programma possibile inviare dal PC i comandi di accensione dei singoli led e leggere lo stato corrente dei quattro switch Protocollo di comunicazione con il PC Come gi detto il nostro circuito dotato di quattro LED denominati LED1 LED2 LED3 e LED4 e quattro pulsanti denominato SWITCH1 SWITCH2 SWITCH3 e SWITCH4 Tramite un semplice protocollo possiamo decidere quale dei quattro led accendere oppure leggere lo stato di uno qualsiasi dei quattro pulsanti Il protocollo consiste in una serie di codici di controllo che il PC pu trasmettere al nostro circuito tramite la seriale La velocit di trasferimento la solita 9600 baud 8 data bit 1 stop bit no parity Comandi di accensione LED Possiamo accendere ogni singolo LED inviando dal PC i seguenti comandi Comandi di spegnimento LED Possiamo spegnere ogni singolo LED inviando dal PC i seguenti comandi 10h Spegnimento LEDI r lih Spegnimento LEDI oo l h Spegnimento LED3 UU 13h Spegnimento LEDA C rr L UU Lettura stato pulsanti Per leggere lo stato di tutti e quattro 1 puls
150. uce assembler Vediamo ora come possibile effettuare in pratica la compilazione di un source assembler Per prima cosa creiamo sul nostro disco fisso una directory di lavoro in cui da ora in poi memorizzeremo tutti i source del corso Scegliamo un nome quale ad esempio C PICPRG Qualsiasi altro nome di directory o drive ovviamente valido Baster sostituire nel resto del corso tutti i riferimento a C PICPRG con il nome del drive e della directory scelti Copiamo ora nella nostra directory di lavoro C PICPRG i file LED ASM e P16F84 INC Per far questo basta cliccare con il tasto destro del mouse sul nome e richiedere di salvare il file nella nostra directory di lavoro quindi ripetere l operazione per entrambe i files Installiamo ora il software necessario per compilare i nostri source La Microchip rende disponibile gratuitamente vedi pagina dei downloads il proprio assembler MPASM in doppia versione per il sistema operativo Microsoft Windows 3 1 95 e per ambiente MS DOS Di seguito faremo riferimento alla versione MS DOS che pu comunque lavorare anche in una sessione prompt MS DOS di Microsoft Windows Seguiamo le istruzioni fornite nelle pagine Microchip fino ad ottenere il file MPASM EXE che contiene l eseguibile per MS DOS dell assembler Copiamo quindi questo file nella nostra directory di lavoro C PICPRG Compiliamo il nostro source LED ASM eseguendo dal prompt di DOS l istruzione Il risultato che dovremmo o
151. uente figura file C temp borrar pbe italiano less7 passo2 htm 3 of 8 13 10 1999 6 26 19 PM Lezione 7 Passo 2 Canon 3 pin male Canon 3pinfemale to DCE to PC Funzionamento del MAX232 Come accennato prima nel nostro circuito d esempio useremo un driver RS232 ovvero un integrato in grado di convertire i segnali a 12 volt tipici della RS232 in segnali a 0 5 volt gestibili dalle porte del PIC Seguendo lo schema elettrico del nostro circuito d esempio vediamo che il segnale di trasmissione proveniente dal PC entra dal pin 3 del connettore DB9 femmina sul pin 13 di U3 Sul pin 12 di U3 sar presente un segnale a 0 volt quando sul pin 13 ci saranno 12 volt e 5 volt quando sul pin 13 ci saranno 12 volt Il segnale presente sul pin 12 di U3 viene quindi inviato alla linea RAI della porta A del PIC che in questo caso far da linea di ricezione Sul pin 18 del PIC RA1 avremo quindi la seguente corrispondenza di segnali con la linea TXD del PC 12 volt Dj HE aa D voit zm L C 12 volt 1 5 wolt CO I ial Z C D volt Viceversa sul pin 17 RAO il PIC genera i segnali da inviare al PC a livello TTL che vengono convertiti in segnali RS232 da U3 tramine i pin 11 ingresso TTL e 14 uscita RS232 e quindi inviati al PC tramite il pin 2 del connettore J2 Applicazione d esempio Mettiamo finamente mano al source della nostra applicazione d esempio e vediamo come ricevere e trasmettere dati dal file C
152. up of chip flags Enable watch dog timer Enable power up timer XT oscillator Disable code protect _ CONFIG 3FF5H SWITCH1 EQU 0 SWITCH2 EQU 1 LED EQU 2 ORG OCH 16 bit counter used in the delay subroutine Count RES 2 Reset Vector Start point at CPU reset ORG 00H Jump to main body of program goto Start SOR IR EAR ARK ILE OK E OK KE EK KK BKK RRR BABB kia uki OK KK SE KO OE koq AIR RR interrupt vector Start point for every interrupt handler FoR ROT KK AA RA C A KD ERG KM doo RR RAR Ca OI EK C RUN UN RR AUR ORG 04H PP EIEN KU KU AACR ASR Reid a Sutta EH 1212 1212121212121 IAA 2 121212 2 2 2 2 2 2 2 2 RE Interrupt handler mU RNC 111212121212 21212 121 Una ou Eo A Mea 2 2 2 2 2 gt 2 2 2 2 2 2 2 A bcf INTCON INTF Reset INTF flag retfie Return to the main body QUEOK SK RR RARE E OK UK EREEREER UE ERR KB CK OK OK RRR AIRE RE RER CE KARA IK EEE REE ER RIERA BAKE A Main body TERE RK NARRATE EER EO KK a CK OK KK RA RRR FRI ATR RR AEREE AS Starts bsf STATUS RPO Swap to data bank 1 file C temp borrar pbe examples wdt asm 1 of 3 13 10 1999 6 51 18 PM file C temp borrar pbe examples wdt asm movlw movwf bsf bsf bcf Set to 0 the to have an interrupt on the fal bcf Assign the PR bsf Set the PR bsf bsf bsf bcf bsf bsf bcf 000 TRI TRI 111111 B S
153. upt una particolare caratteristica dei PIC e dei microprocessori in generale che consente di intercettare un evento esterno interrompere momentaneamente il programma in corso eseguire una porzione di programma specializzata per la gestione dell evento verificatosi e riprendere l esecuzione del programma principale Volendo fare un paragone con il mondo reale possiamo dire che l interrupt rappresenta per il PIC quello che per noi rappresenta ad esempio la suoneria del telefono Per poter ricevere telefonate non dobbiamo preoccuparci di alzare continuamente la cornetta per vedere se c qualcuno che vuol parlare con noi ma grazie alla suoneria possiamo continuare tranquillamente a fare le nostre faccende in quanto saremo avvisati d questa ogni volta che qualcuno ci sta chiamando Appena sentiamo lo squillo possiamo decidere di interrompere momentaneamente le nostre faccende rispondere al telefono e una volta terminata la conversazione riprendere dal punto in cui avevamo interrotto Riportando i termini di questo paragone al PIC abbiamo che le nostre faccende corrispondono al programma in esecuzione e la chiamata da parte di qualcuno corrisponde all evento da gestire lo squillo del telefono corrisponde alla richiesta di interrupt la nostra risposta al telefono corrisponde alla subroutine di gestione dell interrupt E evidente quanto sia pi efficiente gestire un evento con un interrupt anzich controllare ciclicamente il verific
154. zazione del programmatore Y APP possono essere scaricati gratuitamente da questo sito cliccando qui Passiamo ora alla programmazione Copiamo nella nostra directory di lavoro C PICPRG il file YAPP EXE fornito insieme al programmatore Y APP scaricato dalla pagina quindi lanciamo in esecuzione lo Y APP con il seguente comando dal prompt del DOS YAPP COM2 Carichiamo il file LED HEX nel buffer di memoria su PC con il comando L Load IN8HEX file quindi lanciamo la programmazione con il comando W Write PIC e confermiamo con il tasto Y Su video dovremmo vedere la sequenza di opcode inviati al PIC ed al termine della programmazione dovremmo vedere lampeggiare il LED 1 del nostro circuitino come da programma Maggiori informazioni sulle modalit d uso del programmatore Y APP possono essere ricavate dalla documentazione relativa cliccando qui I flag di configurazione dei PIC Il PIC dispone di una serie di flag di configurazione contenuto nella configuration word Questi flag determinano alcune modalit di funzionamento del PIC quando esegue un programma La configurazione dei flag indicata nei source d esempio con la direttiva _ CONFIG e dovrebbe essere letta correttamente da quasi tutti i programmatori di PIC Alcuni di questi per non lo fanno ad esempio la versione precendente dello Y APP la 2 4 00ps per cui i flag vanno settati manualmente prima di iniziare la programmazione Tutti gli esercizi riportati in
Download Pdf Manuals
Related Search
Related Contents
www.malmbergs.com Gebrauchsanweisung / Brugsanvisning Et après les attentats ? - Accueil du site Eminent UPS 1600VA UAA食品とは! Manuale d`istruzioni dreamGEAR Silver Edition 20 In 1, DSi XL Universal Switch Panel User Manual City of Dawson Creek Arena User Guide INTERQUARTZ IQ750 and IQ750EHS QUICK START-UP Copyright © All rights reserved.
Failed to retrieve file