Download
slide1 n.
Skip this Video
Loading SlideShow in 5 Seconds..
Programación PIC ® Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio PowerPoint Presentation
Download Presentation
Programación PIC ® Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio

Programación PIC ® Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio

172 Vues Download Presentation
Télécharger la présentation

Programación PIC ® Avanzada Rango Medio Programación Microcontroladores Familia de Rango Medio

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. ProgramaciónPIC®AvanzadaRangoMedio ProgramaciónMicrocontroladores FamiliadeRangoMedio ConfiguracióndePeriféricos ProgramaciónAssembler mc

  2. Objectivos Alfinalizarestaclaseustedpodrá: –EntenderálosPeriféricosbásicosylos registrosasociadosalosmismos “MetiendoMano”ustedexperimentarála IncializacióndelosperiféricosdelRango Medio. Podráimplementarperiféricosnocubiertos aquí Entenderálasinterrupcionesyelpolling Escribasupropiocódigodeaplicación – – – –

  3. Paraconseguirlomejordeesta clase Idealmenteusteddebeestarfamiliarizado conlosiguiente: – – – – – ProgramaciónAssembler PrincipiosdelaFamiliadeRangoMedioySet deInstrucciones OrganizacióndelaMemoriadeDatosy Programa MPLAB MicrochipICD2debugger

  4. Agenda BreverevisióndelaArquitecturadelRangoMedio, SetdeInstruccionesyHerramientas InterrupcionessobrelosPICdeRangoMedio –LaboratoriodeInterrupciones DiscuciónsobrelosPeriféricos: –PuertosI/O –Timers Timer0 Timer1 –Timer1Laboratorio Timer2 –Timer2Laboratorio

  5. Agenda(cont.) Módulo(CCP)Captura/Comparación/PWM –PWMySalidadelCompareLaboratorios ComparadorAnalógicos ConversorAnalógicoDigital(ADC) –ADCLaboratorio UARTdireccionable(AUSART) I2CconelPuertoSerieSincrónicoMaster –I2CBasadoenunSensordeTemperaturaLaboratorio Conclucionesypreguntasadicionales

  6. ProgramaciónPIC®AvanzadaRangoMedio FamiliadeRangoMedio ArquitecturaBásicay Herramientasde Desarrollo mc ®

  7. PICRangoMedioDiagramaen Bloques STATUS PROGRAMCOUNTER 8-bitvaluefrominstruction REGISTER Pagesof Program Memory BancosdeMemoria deDatos MUX ADC ALU TIMER0 14-bits INSTRUCTIONREGISTER WORKING REGISTER AUSART MSSP PERIFERICOS

  8. MemoriadePROGRAMA ResetVector 0000h Maximo8Kwords –(8Kx14bits/word)/1byte =14Kbytesdememoria ResetVectorat0000h –ContadordePrograma (PC)iráaestadirección sobreelRESET InterruptVector0004h 0005h 07FFh 0800h 0FFFh Page0 Page1 1000h 17FFh 1800h 1FFFh InterruptVectorat0004h –ContadordePrograma (PC)iráaestadirección sobrecualquier interrupción Page2 Page3

  9. ContadordePrograma(PC)y Stack PCLATH 13-bitPC –PCLALUresult(8-bits)orPCH<12:8>PCL CALL,RETURN, –RETFIE,RETLW StackLevel1 EspecificalaPáginaen MemoriadePrograma 8NivelesdeStack –almacenaelcontenidodelPC PUSHESStackLevel8 –CALL/Interrupt Memoriade – PC<12:0> OPCODE(11-bits) PCH Pagingbits Pi bit ActualizacióndesdePCLATH POPS RETURN,RETFIE,RETLW Programa

  10. MapadeMemoriade Datos 000h Special Function Registers01Fh 080h 09Fh 100h 10Fh 110h 180h 18Fh 190h SFR SFR Special Function Registers 020h 0A0h 128 Bytes General Purpose Registers General Purpose Registers General Purpose Registers General Purpose Registers 1EFh 1FFh 0EFh 0FFh 16Fh 17Fh Shared Bank1 Shared Bank2 Shared Bank3 07Fh Bankk0

  11. RegistrosdeFunciones Especiales(SFRs) CondeptodeArchivo deRegistros Accesoacualquier registro AlgunosRegistrosserepiten entodoslosbancos (PCLATH,INTCON,etc.) PORTB PORTC PORTD PORTE PCLATH INTCON PIR1 PIR2 TRISB TRISC TRISD TRISE PCLATH INTCON PIE1 PIE2 06h 07h 08h 09h 0Ah 0Bh 0Ch 0Dh 86h 87h 88h 89h 8Ah 8Bh 8Ch 8Dh Bank0 Bank1

  12. RegistroSTATUS IRP RP1RP0 TO PD Z DC C RP1 RP0 0 RP1 0 RP0 1 BANK0 BANK1 10BANK2 11BANK3 BitIndirectRegisterBankSelect: (usadosparadirecciionamiento Indirecto) 1=Bank2,3 0=Bank0,1 Contiene: –EstadoArtméticodela ALU –ElestadodelRESET –BitselectoresdelBanco dememoria

  13. PIC16SetdeInstrucciones 35instruccionesdepalabrasimple Todasseejecutanenuncicloesceptolossaltos ByteOrientedOperations BitOrientedOperations addwf andwf clrf clrw f,d ff,dd f - AddWandf ANDWwithf Clearf ClearW bcf bsf btfsc btfss f,b ff,bb f,b f,b BitClearf BitSetf BitTestf,SkipifClear BitTestf,SkipifSet LiteralandControlOperations comf f,d Complementf decf decfsz incf incfsz iorwf movf movwf nop rlf rrf subwf swapf xorwf f,d f,d f,d ff,dd f,d f,d f - f,d f,d f,d f,d f,d Decrementf Decrementf,Skipif0 Incrementf Incrementff,Skipif0 InclusiveORWwithf Movef MoveWtof NoOperation RotateLeftfthroughCarry RotateRightfthroughCarry SubtractWfromf Swapnibblesinf ExclusiveORWwithf addlw andlw call clrwdt goto iorlw movlw retfie retlw return sleep sublw xorlw k k k - k k k - k - - k k AddliteralandW ANDliteralwithW Callsubroutine ClearWatchdogTimer Gotoaddress InclusiveORliteralwithW MoveliteraltoW Returnfrominterrupt ReturnwithliteralinW ReturnfromSubroutine Gointostandbymode SubtractWfromliteral ExclusiveORliteralwithW

  14. ProgramaciónPIC®AvanzadaRangoMedio Herramientasde Desarrollo mc mc

  15. MPLAB IDE ® MPLAB®IDE(IntegratedDevelopment Environment) IntegratesdifferentMicrochipandthird partytools CodeEditor CrossCompilers Assemblers Simulators,In-CircuitDebuggers,Emulators Programmers – – – – –

  16. MPLAB IDE ® MPLAB®IDE(IntegratedDevelopment Environment) IntegratesdifferentMicrochipandthird partytools CodeEditor CrossCompilers Assemblers Simulators,In-CircuitDebuggers,Emulators Programmers – – – – –

  17. ICD2(DebuggerInCircuit) MPLAB®ICD2esunprogramador-- debuggerdebajocosto. Lee/Escribeelespaciodememoriayareas EEDATAdelosPIC ProgramabitsdeConfiguración Debuggingincircuit BorradodeMemoriadeProgramacon verificación – – – –

  18. PICDEM®2PlusBoard HerramientaPICDEM2 16x2LCD Module AnalogPot 9Vto5V regulator RS232 Connecto r LEDs 18,28and40- pinDIP sockets Pushbutton Switches ICD Connecto r Piezo Buzzer I2CBased TempSensor

  19. ProgramaciónPIC®AvanzadaRangoMedio g Interrupciones mc

  20. InterrupcionesyPolling Quereramenudoqueelprocesador realizaraunatareasiocurreun acontecimientoespecífico Dosmétodosparacomprobarsiha ocurridoesteacontecimiento: Polling(Interrogación): Compruebacontinuamenteparasabersihay acontecimientoenvariospuntosenelcódigo Interrupts: “INTERRUPTS”Elprogramaprincipalpasaala subrutinadeinterrupcióncuandoocurreunevento – –

  21. Polling bsf PORTA,1 ;Setbit1of ;PORTA RA<1>=1 btfssINTCON,TMR0IF;CheckTimer0 ;interruptflag ;in“INTCON” ;registerand ;skipthenext ;instructionif ;itisset TMR0IF=1 ?? YES NO goto $-1 ;Goto ;previous RA<1>=0 ;instruction bcf PORTA,1 ;Clearbit0of ;PORTA

  22. Interrupciones code000h goto Start nointerrupt Reset Main program execution ;========================= int_vectorcode004h InterruptService Routine(ISR) ;returnfrom retfie instruction interruptflag set retfie ;interrupt ;========================= ExecuteISRat address004h main_prog code Start;startlabelformain code end Mainprogram code

  23. HabilitandoInterrupciones ElProcesadordebesaberque interrupcionesseránhabilitadas Unnúmeroderegistrosconlosbitsde habilitacióndeinterrupcioneshacenesto: ControldeInterrupciones(INTCON) HabilitadordeInterrupcióndePeriféricos1 (PIE1) HabilitadordeInterrupcióndePeriféricos2 (PIE2)

  24. LógicadeInterrupción TMR0IE TMR0IF INTE INTF RBIE RBIF TMR2IE TMR2IF ADIE ADIF OtrosPeriféricos Interrupt GIE PEIE

  25. RegistroINTCON (CorazóndelasInterrupciones) Seteaelusode cualquier interrupción Seteaelusode interrupcioónpor Periféricos GIE PEIETMR0IEINTERBIETMR0IFINTFRBIF Flagsavisande lainterrupción producida!

  26. Habilitandoelnucleodelas interrupciones Int_vectCODE 004h ;clearexternalinterrupt ;flagtoenable ;furtherinterrupts bcf INTCON,INTF <ISRcode> retfie “goto$”address “goto$”address ProgramCounter Stack INTCON Main CODE 0 0 0 0 0 01 GIE 01 INTE 01 INTF Start <codetosetupPORTB> ;initializeINTCON clrf INTCON ;enableanexternal ;interruptontheINTpin bsf INTCON,INTE ;enableglobalinterrupts bsf INTCON,GIE ;sithereandloopforever goto $

  27. InterrupcióndePeriféricos DosregistrosHabilitaninterrupción desdePeriféricos –PeripheralInterruptEnable1(PIE1) –PeripheralInterruptEnable2(PIE2) Dosregistrosmuestranlapetición para una interrupción(Flags) –PeripheralInterruptRequest1(PIR1) –PeripheralInterruptRequest2(PIR2) *LosFlagsseactivaraninclusosinoestan habilitadaslasinterrupciones!!

  28. RegistrosPIE1yPIR1* PIE1Register(PeripheralInterruptEnables) ADIE RCIE TXIE SSPIE CCP1IETMR2IETMR1IE PIR1Register(PeripheralInterruptRequests) ADIF RCIF TXIF SSPIF CCP1IFTMR2IFTMR1IF *Checkindividualmentelosdatasheetsparalocalizarlosbits

  29. RegistrosPIE2yPIR2* PIE2Register(InterruptEnables) OSCFIE C2IE C1IE EEIE BCLIEULPWUIE CCP2IE PIR2Register(InterruptFlags) OSCFIF C2IF C1IF EEIF BCLIFULPWUIF CCP2IF *Checkindividualmentelosdatasheetsparalocalizarlosbits

  30. Habilitandolainterrupcióndeun periférico(Timer1) 004h Int_vectCODE “goto$”address “goto$”address ProgramCounter Stack bankselPIR1 bcfPIR1,TMR1IF <ISRcode> retfie INTCON 11 GIEPEIE Main Start CODE banksel bcf 0 PIR1 PIR1,TMR1IF banksel bsf PIE1 PIE,TMR1IE PIE1 1 TMR1IE 01 TMR1IF bsfINTCON,PEIE bsfINTCON,GIE <codetosetupTimer1> ;sithereandloopforever goto$ PIR1 Timer1Overflow!

  31. LatenciadeInterrupción LatenciadeInterrupción: Tiempodesdequeseproducela interrupciónyelPCdirecciona0004h Interrupciónsincrónica(typ.Inter.) latenciaesde3ciclosdeinstrucción(Tcy) Interrupciónasincrónica(typicallyexternal) latenciaesde3–3.75cyclosdeinstrucción – – –

  32. Salvandoelcontexto Duranteunainterrupciónsoloes salvadoelcontexto: SoloessalvadoelPC(sobreelstack) Registrossoncambiadosenlarutinade interrupción. – – Debensersalvadoslosregistros: Working(W) Status PCLATH(ProgramCounterLatchHigh) Registrosdefinidosporelusuario – – – –

  33. Prioridaddeinterrupción LosmicrocontroladoresdelPICde Rangomediotratantodaslas interrupcionesconlamismaprioridad Elusuariodebehacerlosiguiente: Determinelafuentedeinterrupción Determineelordenenelcuallas interrupcionessonatendidas. – –

  34. EjemplodePrioridadde Interrupciones 0x004;interruptvectorlocation INT_VECTORCODE ;Savecontext movwf swapf movwf temp_w STATUS,w temp_status ;saveWREG ;movfaffectsZbit, ;useswapfinstead ;saveSTATUSregister ;Check flagsinorderofpriority INTCON,RBIF PORTB_ISR PIR1,TMR2IF Timer2_ISR PIR2,TMR1IF Timer1_ISR temp_status,w STATUS temp_w,w btfsc call btfsc call btfsc call Restore_context: swapf movwf movf retfie ;PORTBchange? ;Timer2interrupt? ;Timer1interrupt? ;restoreSTATUSreg ;restoreWREG ;returnfrominterrupt

  35. ProgramaciónPIC®AvanzadaRangoMedio g Periféricos mc

  36. PeriféficosdelRangomedio I/OPorts Timers(0,1,2) Capture/Compare/PWM Comparadores ADC AUSART I2CySPISerial Interfaz

  37. I/ORevisión Hasta35portsI/O multiplexadosconfuncionesdePeriféricos – Altacapacidaddecorriente25mA Manipulacióndirectadebitsenunciclo TodoslosI/OtienenprotecciónESD DespuesdelReset: Lospinesconcapacidadanalógicaestan activos LospinesI/ODigitalessonconfigurados comoentradas – –

  38. RegistroPORTxyTRISx CadaPORT(A,B,C,D,E)tieneuntieneun registrodedirecciónTRISx PORTBRegister RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 Dato ConfiguraDireccióndelDato PORTBTri-StateRegister(TRISB) TRISB7TRISB6TRISB5TRISB4TRISB3TRISB2TRISB1TRISB0 1=correspondingPORTBpinisanINPUT 0=correspondingPORTBpinisanOUTPUT

  39. Configurandoentradasanalógicas comodigitales I/O’sconcapacidadesanalógicaspor defaultsonanalógicassobreelreset

  40. Configurandoentradasanalógicas comodigitales Paraconfigurarlasentradasanalógicascomodigitales existen2vías: 1)RegistroSelectrosAnalógico(ANSELandANSELH) Faradispositivoscon>8pinesanalógicos O 2)RegistroADCControl1(ADCON1) Paradispositivoscon<8pinesanalógicos AnalogSelectRegister(ANSEL) ANS7 ANS6 ANS5 ANS4 ANS3 ANS2 ANS1 ANS0 AnalogSelectHighRegister(ANSELH) ANS9 ANS8 ANS13ANS12ANS11ANS10 1=PinassignedasAnalogInput 0=DigitalI/O PortConfigurationBits ADCControlRegister1(ADCON1) ADFMADCS2 PCFG3PCFG2PCFG1PCFG0

  41. Configurandoentradasanalógicaspara Digital PCFGAN7 AN6AN5AN4AN3 AN2 AN1VddAN0 <3:0> PortConfigurationBits ADCControlRegister1(ADCON1) ADFMADCS2 PCFG3PCFG2PCFG1PCFG0

  42. InicializandoDigitalI/O InicializaciónPORTB –RB4aRB7comoentradaDigital –RB0aRB3comosalidaDigital ;------------configurePORTBfordigital---------------------- banksel clrf banksel clrf PORTB PORTB ANSELH ANSELH ;GotobankcontainingPORTBregister ;InitializePORTBdata ;GotobankcontainingANSELHregister ;Setasalldigital ;-----------SetupdirectionofeachPORTBpin----------------- banksel movlw movwf TRISB b’11110000’ TRISB ;GotobankcontainingTRISBregister ;MovevaluetosetTRISB<7:4>highand ;TRISB<3:0>lowintoWregister ;MovevalueinWintoTRISB

  43. OpcionesPORTBInterrupción&Pull-Up TodoslospinesdelPORTBtiene interrupciónporcambioyPullUP RegistrodelPull-UpPORTB(WPUB) 1 WPUB7WPUB6WPUB5WPUB4WPUB3WPUB2WPUB1WPUB0 1=Pull-upenabledDispositivossinregistroWPUB 0=Pull-updisabledusanbitRBPUenelOPTION InterrupciónsobreCambioPORTBRegistro(IOCB) IOCB7IOCB6IOCB5IOCB4ICOB3IOCB2IOCB1IOCB0 1=Interrupt-on-changeenabledLosdispositivossinIOCB 0=Interrupt-on-changedisabled HIGH LOW RegistrodeControldeInterrupción(INTCON) GIEPEIETMR0IEINTERBIETMR0IFINTFRBIF *PORTBdebeprimeroserleído/serescritoyentoncesRBIFsepuede borradoporsoftware RB3 RB4 1 confíanenbitdeRBIEen INTCON

  44. g Timers mc

  45. Timers Timerssonusadospara: tiempodereferenciaparaeventos contarelnúmerodeeventos generaciáondeformasdeondaetc... – – – PIC16F877tiene3timers Timer0 Timer1 Timer2 – – –

  46. TimerComparación TIMER0TIMER1TIMER2 SIZEOF REGISTER CLOCKSOURCE 8-bits(TMR0) Fosc/4 16-bits (TMR1H:TMR1L) Fosc/4 8-bits(TMR2) Fosc/4 (Internal) CLOCKSOURCE (External) CLOCKSCALING AVAILABLE (Resolution) INTERRUPT EVENTandFLAG LOCATION CANWAKEPIC FROMSLEEP? T0CKIpin Prescaler8-bits (1:21:256) Onoverflow FFh00h (TMR0IFinINTCON) NO T1CKIpinor Timer1oscillator (T1OSC) Prescaler3-bits (÷1,÷2,÷4,÷8) Onoverflow FFFFh0000h (TMR1IFinPIR1) YES None Prescaler (1:1,1:4,1:8) Postscaler (1:11:16) TMR2matches PR2 (TMR2IFinPIR2) NO

  47. Timer0DiagramaenBloques DATABUS Fosc/4 8 synchronize T0CKI pin WatchdogTimer OPTIONregister scaledclock prescaler TMR0 WDTout PSA PS2 PS1 PS0 RBPUINTEDGTOCSTOSE PrescalerRateSelectBits PrescalerAssignment 1=prescalerassignedtoWDT 0=prescalerassignedtoTimer SourceEdgeSelect 1=incrementTMR0onhigh-to-lowtransition 0=incrementTMR0onlow-to-hightransition TMR0Clock SourceSelect 1=TOCK1,0=Fosc/4

  48. Timer0DiagramaenBloques DATABUS Fosc/4 8 synchronize T0CKI pin scaledclock prescaler TMR0 WatchdogTimer INTCONregister TMR0IF •Silafuentedeclockesexternapuedesincronizarse (TOCKI)paraelclockinterno •Timer0esdelecturayescritura •Timer0elflagesseteadosobreundesbordedelTMR0 (FFto00)

  49. Timer0Inicialización Timer0 incrementing 0101010101011001 ;MakesuretheTimer0count ;register(TMR0)isclear bankselTMR0 clrfTMR0 TMR0 INTCON Flagonoverflow 01 ;ClearTimer0interruptflag bcfINTCON,TMR0IF ;SetuptheOptionregisterto TMR0IF ;incrementTimer0frominternal ;clockwithaprescalerof1:16 bankselOPTION_REG movlwb’00000011’ Thisinterruptflagwillseton Timer0overflowevenif interruptsaredisabled OPTION_REG movwf OPTION_REG 00000011 TOCSPSA PS<2:0> Prescaler Assignment (ExternalorInternal)(WDTorTMR0) ;TheTMR0interruptisdisabled,do ;pollingontheflagbit(TMR0IF) btfssINTCON,TMR0IF goto$-1 <continue> SelectsTimer0 Prescaler ClockSource value=1:16

  50. Timer1DiagramaenBloques T1OSI T1OS0 T1 OSC synchronize prescaler Fosc/4 T1CKI pin Timer1ControlRegister(T1CON) TMR1H TMR1L Enable TMR1ON TMR1GET1CKPS1T1CKPS0T1OSCENT1SYNCTMR1CSTMR1ON T1GINV Timer1On 1=EnableTimer1 LPOscillatorEnable 1=T1OSCselected 0=T1CKIcanbeused ClockSourceSelect 1=External(T1CKI) 0=Internal(FOSC/4)