El Archivo P16F84

3
:: PIC Parte III Capítulo 5 Simulando la interrupción con MPLAB Antes de comenzar con la simulación vamos a aclarar un pequeño detalle, o mejor dicho... vamos a dar respuesta a la pregunta del millón... no pensarías que te dejaría así...!!!, noooooooo...!!! Bueno, antes de que copies el código en MPLAB e intentes ensamblarlo, lo cual seguramente te dará quinientos mil errores, debes saber que Cuando instalaste MPLAB allá en: C:\Archivos de programa\MPLAB Se instaló también un pequeño archivito en el mismo directorio, llamado P16F84.INC, Bien, búscalo y una vez lo tengas a mano... lo abres, que le haremos un par de modificaciones... Te encontrarás con algo como esto... ;================================= ; ; Register Definitions ; ;================================= W EQU H'0000' F EQU H'0001' ; Register Files INDF EQU H'0000' TMR0 EQU H'0001' PCL EQU H'0002' STATUS EQU H'0003' FSR EQU H'0004' PORTA EQU H'0005' PORTB EQU H'0006' EEDATA EQU H'0008' EEADR EQU H'0009' PCLATH EQU H'000A' INTCON EQU H'000B' OPTION_REG EQU H'0081' TRISA EQU H'0085' TRISB EQU H'0086' EECON1 EQU H'0088' EECON2 EQU H'0089' Bueno, es sólo una parte del archivo P16F84.INC, éste archivo contiene los nombres de los registros con sus respectivas posiciones de memoria, aquello que nosotros veníamos indicando en cada código que íbamos escribiendo, y una que otra cosita más como los nombres de los Bit's de cada uno de los registros, y si recuerdas siempre debíamos indicar la posición 0x05 para TRISA y 0x06 para TRISB, por tanto para OPTION_REG (registro OPTION) sería 0x01, te preguntarás... porque aquí las cosas se ven totalmente distintas...??? Lo que ocurre, es que cuando pasas al banco 1... TRISA está quinto en ese banco, es decir está en la posición 0x05, lo mismo ocurre con TRISB en 0x06, y por ende OPTION_REG está en 0x01, observa ahora los bancos de la RAM de nuestro primer tutorial... y compara con lo que acabamos de ver... Convencido...???. El tema es que para evitar tener que definirlos, tomaremos aquello que marqué en rojo y lo cambiaremos por... OPTION_REG EQU H'0001' TRISA EQU H'0005' TRISB EQU H'0006'

description

P16F84

Transcript of El Archivo P16F84

  • ::PICParteIIICaptulo5

    SimulandolainterrupcinconMPLAB

    Antesdecomenzarconlasimulacinvamosaaclararunpequeodetalle,omejordicho...vamosadarrespuestaalapreguntadelmilln...nopensarasquetedejaraas...!!!,noooooooo...!!!

    Bueno,antesdequecopieselcdigoenMPLABeintentesensamblarlo,locualseguramentetedarquinientosmilerrores,debessaberqueCuandoinstalasteMPLABallen:

    C:\Archivosdeprograma\MPLAB

    Seinstaltambinunpequeoarchivitoenelmismodirectorio,llamadoP16F84.INC,Bien,bscaloyunavezlotengasamano...loabres,queleharemosunpardemodificaciones...

    Teencontrarsconalgocomoesto...

    =================================RegisterDefinitions=================================

    WEQUH'0000'FEQUH'0001'

    RegisterFiles

    INDF EQUH'0000'TMR0 EQUH'0001'PCL EQUH'0002'STATUS EQUH'0003'FSR EQUH'0004'PORTA EQUH'0005'PORTB EQUH'0006'EEDATA EQUH'0008'EEADR EQUH'0009'PCLATH EQUH'000A'INTCON EQUH'000B'

    OPTION_REG EQUH'0081'TRISA EQUH'0085'TRISB EQUH'0086'EECON1 EQUH'0088'EECON2 EQUH'0089'

    Bueno,esslounapartedelarchivoP16F84.INC,stearchivocontiene losnombresde los registrosconsusrespectivas posiciones de memoria, aquello que nosotros venamos indicando en cada cdigo que bamosescribiendo,yunaqueotracositamscomolosnombresdelosBit'sdecadaunodelosregistros,ysirecuerdassiempredebamosindicarlaposicin0x05paraTRISAy0x06paraTRISB,portantoparaOPTION_REG(registroOPTION)sera0x01,tepreguntars...porqueaqulascosasseventotalmentedistintas...???

    Loqueocurre,esquecuandopasasalbanco1...TRISAestquintoenesebanco,esdecirestenlaposicin0x05,lomismoocurreconTRISBen0x06,yporendeOPTION_REGesten0x01,observaahoralosbancosdelaRAMdenuestroprimertutorial...ycomparaconloqueacabamosdever...

    Convencido...???.

    Eltemaesqueparaevitartenerquedefinirlos,tomaremosaquelloquemarquenrojoylocambiaremospor...

    OPTION_REGEQUH'0001'TRISAEQUH'0005'TRISBEQUH'0006'

  • Deahoraenmssiemprequehagamosunprogramaserobligacincolocarenelencabezadodenuestrocdigolasiguientelnea...

    #include

    Deacuerdo...Ahoraguardamosloscambios,cerramoselarchivoycomenzamosunnuevoproyectoenMPLABalcuallollamaremosINT_LED.pjt,yenlcreamosint_led.asm,copiaselcdigo,lopegasyledasa...

    Project>BuildAll

    Ycomotodoestperfecto...!!!comenzaremoslasimulacin,tedeberaquedaralgoas...

    Noteasustesportodaslasventanasabiertas,sonslo4,ytodasaccesiblesdesdeelmenWindow,laprimeraeselcdigo,laqueestalladoesSpecialFunctionRegisterenlaqueveremoscomocambianlosregistros,ladeabajoes laventanaquenosmuestra lapilaoSTACKy laltimaes ladeAsynchronousStimulus estaltima se encuentra en el men Debug > Simulator Stimulus, cuando la abras configura Stim 1(P) comoRB0 (P), eso har que cuando lo presionemos enve un pulso de nivel alto por el pin RB0, alconfigurarlocomo(P)seconvierteenunpulsador,ahoras,yaestamoslistosparacomenzar...

    ReseteamoselMicroopresionamosF6,ytehabrsubicadoenGOTOinicio,ahoravea...

    Debug>Run>Animate

    yquedartodocomoestenlaimagenanterior

    Aquharemosunpardeobservaciones,fjatequeestasenGOTOsueo,staeslasiguienteinstruccinquesedeberaejecutar,peronolohaceyaqueelmicroestdormidograciasalainstruccinSLEEP,observatambinqueenlaventanaSpecialFunctionRegistertodosepintdeazulportantoelmicrosedetuvoyapagcasitodo.ElSTACKestvacoyaquenoseprodujoningunallamada,PORTBesten00000000,esdecirqueelLEDest apagado (RB1=0) y no hay ninguna interrupcin todava (RB0=0), finalmente hchale una mirada alregistroINTCONqueestaen10010000esdecirGIE=1eINTE=1lasinterrupcionesestnhabilitadas

    Ahoravienelobueno...

    EnvaunpulsoporRB0(P),yversquelainterrupcinhacesaltaralmicroenladireccin0x04,(noesperesverenPORTBqueRB0sepongaa1yaquealconfigurarRB0(P)sloenvaunpulsomomentneoelcualesdifcilnotar),elSTACKseincrementaenunaposicin,yenelregistroINTCONsedeshabilitaGIE,labanderaINTFseponea1,luegoelmicroapuntaaISR,atiendelainterrupcinencendiendoelLED(RB1=1),luegoBorralabandera INTF y con RETFIE vaca la pila habilitando GIE nuevamente para regresar a GOTO sueo donde

  • ejecutarSLEEP,paradormirseyesperaraquepresionesnuevamenteelpulsador...

    Bravooooo...!!!

    Tienesmuchoparaentretenerte,unajugadaquetepondrdepelos...

    ObservaloqueharsconfiguraRB0(P)comoRB0(T),reseteaelmicroycomienzanuevamente, lamayorsorpresa es que cuando lo presiones, RB0 se pondr a 1 y no habr interrupcin, esto es as por queseleccionamos flanco de bajada para la interrupcin en RB0/INT, aquello que hicimos en el Bit6 del registroOPTION,recuerdaseso...???,ok...entoncesdeberahaberinterrupcincuandopresionesnuevamenteRB0yyanodirms...

    Bueno...slodejarteelcircuitoparaquelopruebescuandograbeselprogramaenelPIC...

    Suerte...!!!,yanobajarlosbrazosqueloprobyfuncionaperfectamente.

    Porsitequedandudasdecomofuncionaelprograma,realizalasimulacinenmodoSTEP(conelbotndeloszapatitos),esodeberaresponderatodastusdudas...