*************************************** * Sous-routines utilitaire pour le * * port serie du 68HC11 * *************************************** *************************************** * Initialisation de l'acia de * communication * 9600 bps, 8 bit, pas de parity, 1 sb * * Reg aff: A,CCR *************************************** INISCI: LDX #REGS LDAA #$30 * 9600 BPS STAA BAUD,X LDAA #$00 * 8 BIT, NO WAKE UP, 1 STOP BIT STAA SCCR1,X LDAA #$0C * PAS INTERRUPT, TX ENABLE, RX ENABLE STAA SCCR2,X RTS *************************************** * Envoie le contenu de A sur le port * seriel * * Reg aff:CCR *************************************** OUTCAR: PSHB PSHX LDX #REGS OUTCAR2: LDAB SCSR,X BITB #%10000000 BEQ OUTCAR2 STAA SCDR,X PULX PULB RTS *************************************** * Routine qui transmet la valeur de * A au terminal sous la forme ASCII. * * Reg aff:CCR *************************************** OUT2HA: PSHA PSHA LSRA LSRA LSRA LSRA JSR HEXASC *conversion JSR OUTCAR *transmet le MSB PULA ANDA #$0F JSR HEXASC *conversion JSR OUTCAR *transmet le LSB PULA RTS *************************************** * Routine qui transmet la valeur de B * au terminal sous la forme ASCII. * * Reg aff:CCR *************************************** OUT2HB: PSHA TBA JSR OUT2HA PULA RTS *************************************** * Routine qui transmet le nombre contenu * dans X au terminal sous la forme ASCII. * * Reg aff:CCR *************************************** OUT4HX: PSHA PSHB PSHX XGDX JSR OUT2HA TBA JSR OUT2HA PULX PULB PULA RTS *************************************** * Transmet un retour de chariot * * Reg aff: CCR *************************************** SNDCRLF: PSHA LDAA #$0D JSR OUTCAR LDAA #$0A JSR OUTCAR PULA RTS *************************************** * Envoie une chaine de charactere * sur le port seriel. Fin avec $04 * * X= Adresse de la chaine * * Reg aff:A,X,CC *************************************** SNDMSG: LDAA ,X INX CMPA #$04 BEQ SNDMSG2 JSR OUTCAR BRA SNDMSG SNDMSG2: RTS *************************************** * LOOKCAR * * Lit le port seriel, mais attend pas * la reception du caractere * * Z=1, pas de car. * Z=0, car. recu dans A * * Reg Aff: A,CCR *************************************** LOOKCAR: PSHB PSHX LDX #REGS LDAB SCSR,X BITB #%00100000 BEQ LOOKCAR1 LDAA SCDR,X PSHA TPA ANDA #%11111011 TAP PULA LOOKCAR1: PULX PULB RTS *************************************** * INCAR * * Lit le port seriel, et attend un * caractere * * Reg Aff: A,CCR *************************************** INCAR: JSR LOOKCAR BEQ INCAR RTS *************************************** * Routine pour lire un chiffre * hexa --> LSB de acc.A * * Reg aff:A,CCR *************************************** IN1HA: JSR INCAR JSR ASCHEX RTS *************************************** * Routine pour lire un nombre * hexa --> acc.A * * Reg aff:A,CCR *************************************** IN2HA: PSHY JSR IN1HA ASLA ASLA ASLA ASLA PSHA JSR IN1HA TSY ORAA ,Y INS PULY RTS *************************************** * Routine qui attend du terminal * une nombre hexa. de 16 bits (4 touches) * Le nombre est plac‚ dans le reg.X * * Reg aff:X,CCR *************************************** IN4HX: PSHA PSHB JSR IN2HA PSHA JSR IN2HA TAB PULA XGDX PULB PULA RTS *************************************** * Routine pour lire un chiffre * hexadecimal provenant du terminal. * par.d'entree: acc.A = qte de car. * a recevoir. * maximum = 4 * par.de sortie:BUFFER contient * les car. recus *************************************** GETHEX: PSHX PSHY PSHB LDY #MEM LDX #BUFFER TAB ABX STX QIN,Y LDX #BUFFER *adr. du dernier car a recevoir. GETHEX0: JSR INCAR JSR MAJUS CMPA #$08 *BACKSPACE ? BNE GETHEX3 CPX #BUFFER BEQ GETHEX0 DEX JSR OUTCAR *echo du backspace BRA GETHEX0 GETHEX3: CMPA #$0D *RETURN ? BNE GETHEX4 CPX QIN,Y *test si recu tous les car. BEQ GETHEX5 *oui, ok BRA GETHEX0 *non, attend les autres car. GETHEX4: CMPA #'0' *decode si le car. est hexa. BLO GETHEX0 CMPA #'F' BHI GETHEX0 CMPA #'9' BLS GETHEX1 CMPA #'A' BHS GETHEX1 BRA GETHEX0 *si pas hexa, recommence GETHEX1: CMPX QIN,Y *si tous les car. sont recus, BEQ GETHEX0 *attend la touche RETURN JSR OUTCAR *echo du car. SUBA #$30 *conversion de ASCII-->hexa CMPA #$09 BLS GETHEX2 SUBA #$07 *ajustement pour code de A … F GETHEX2: STAA ,X *sauve le chiffre dans le buffer INX BRA GETHEX0 *attend prochain car. GETHEX5: PULB PULY PULX RTS *************************************** * Routine pour lire un chiffre * hexa --> LSB de acc. A * * Reg Aff: A,CCR *************************************** GET1HA: LDAA #$01 JSR GETHEX LDAA BUFFER RTS *************************************** * Assemble 2 chiffre hexa dans le * buffer et les places dans A *************************************** ASS2HEX: PSHY LDAA ,X INX ASLA ASLA ASLA ASLA PSHA LDAA ,X INX TSY ORAA ,Y INS PULY RTS *************************************** * Routine pour lire un nombre hexa * --> acc. A * * Reg Aff: A,CCR *************************************** GET2HA: PSHX LDAA #$02 JSR GETHEX LDX #BUFFER JSR ASS2HEX PULX RTS *************************************** * Routine qui attend du terminal * un nombre hexa de 16 bits (4 touches) * le nombre est placer dans le reg. X * * Reg Aff: X,CCR **************************************** GET4HX: PSHA PSHB LDAA #$04 JSR GETHEX LDX #BUFFER JSR ASS2HEX PSHA JSR ASS2HEX PSHA PULB PULA XGDX PULB PULA RTS *************************************** * Convertion de ASCII->HEXA *************************************** ASCHEX: SUBA #$30 CMPA #$09 BLS ASCHEX2 SUBA #$07 ASCHEX2: RTS *************************************** * Routine de conversion HEXA-->ASCII *************************************** HEXASC: ADDA #$30 CMPA #'9' BLS HEXAS ADDA #7 HEXAS: RTS *************************************** * Conversion en majuscule *************************************** MAJUS: CMPA #'a' BLO MAJUS2 CMPA #'z' BHI MAJUS2 SUBA #$20 MAJUS2: TSTA RTS