* * * USER20.ASM 26 JUILLET 1994 * * * * STEPUSER.ASM 18 MARS 1995 * * TO BE USED WITH STEPPER.WW CONNECTED TO * UCT-11/64e2 V:2.0 UIO's CONNECTOR * * * * COPYRIGHT: JULY 1994 by: MICHEL-ANDRE ROBILLARD * * RF-232 * 1404 RUE GALT * MONTREAL, QC H4E 1H9 * TEL: (514) 761-4201 * FAX: (514) 761-0974 * ******************************************************* * * THIS PROGRAM IS TO BE USED WITH THE SINGLE BOARD * COMPUTER DESIGNED BY: RF-232, # UCT-11/64E2.PCB * V2.0 AND # UCT-11/64E2.PCB V3.0 CONNECTED WITH * THE USER BOARD, # USER.PCB V2.0 * * THE SCHEMATIC OF THE SINGLE BOARD COMPUTER UCT- * 11/64E2 IS NUMBERED: UCT-11/64E2.SCH V2.0 AND * UCT-11/64E2.SCH V3.0 * * THE SCHEMATIC OF THE BOARD USER.PCB IS NUMBERED * USER.SCH V2.0 * ******************************************************* * * NO ROUTINE DESTROY INTERNAL REGISTERS. * * THE ONES THAT DESTROY A REGISTER ARE THE ONE * WICH RETURN THE CHARACTER DEPRESSED ON THE * THE KEYBOARD IN THE ACCUMULATOR A. * * PLEASE TAKE NOTE THAT THE ROUTINE * "NOWAIT" WILL RETURN WITH $00, MEANING * THAT THERE WAS NO KEY DEPRESSED OR IF * A KEY WAS DEPRESSED, WILL RETURN WITH * ACCUMULATOR "A" CONTAINING THE CHARACTER. * * THOSE ROUTINE COMBINE ALL TOGETHER * TAKE ABOUT 10 BYTES OF THE STACK * NOT INCLUDING THE ORIGINAL BYTES * TAKEN BY THE CALLING SUBROUTINE. * ******************************************************* * * INILCD INITIALIZE THE LCD: 8 BITS / 2 LINES / * 5X7 / CURSOR / NO BLINK * CLEAR THE LCD AND PUT THE CURSOR AT * HOME POSITION * * LCD_BUSY LOOP UNTIL THE LCD IS READY TO RECEIVE * AN INSTRUCTION OR DATA. * * LCD_INS LOAD AN INSTRUCTION INTO THE INSTRUCTION * REGISTER OF THE LCD. * - ON ENTRY, A CONTAINS THE INSTRUCTION * * LCD_DATA LOAD DATA TO THE DATA REGISTER OF THE * LCD. * - ON ENTRY, A CONTAINS THE DATA * * GO1LINE1 PUT THE CURSOR OF THE LCD ON POSITION * #1 ON LINE #1 (HOME POSITION). * * GO1LINE2 PUT THE CURSOR OF THE LCD ON POSITION * #1 ON LINE #2 (POSITION # $40 OF LCD) * * BUZZERON WILL SOUND THE BUZZER FOR USER VARIABLE * BUZTIME. * * INIKBY INITIALIZE THE KEYBOARD AS A 4X4 MATRIX * * NOWAIT ROUTINE TO SCAN THE KEYBOARD ONE TIME * - ON RETURN: CLEAR (00) A IF NO KEY * * WAIT ROUTINE TO SCAN THE KEYBOARD * WAIT UNTIL A KEY IS DEPRESSED * DOES NOT DISPLAY THE CHAR ON THE LCD * - ON RETURN CHAR IS IN A * * WAITLCD SAME AS WAIT BUT DISPLAY CHAR ON LCD * - ON RETURN CHAR IS IN A * * WAITKEY - ENDLESS LOOP * ROUTINE TO GET ONE KEY FROM KEYBOARD * WAIT UNTIL ONE KEY IS DEPRESSED * - LOOPBACK IF TWO KEYS AT SAME TIME * - ON RETURN THE CHAR IS IN A * * KTABLE TABLE CONTAINING WHAT WILL APPEAR * ON PORT-C WHEN A KEY IS DEPRESSED * - USED WITH KEYBOARD FROM GRAY * # 88BB2-072 * * REALKEY TABLE THAT CONTAINS THE ASCII LETTER * CORRESPONDING TO THE KEYBOARD * * *** KTABLE AND REALKEY HAVE TO FOLLOW * EACH OTHER *** * * DELAY ROUTINE FOR DEBOUNCING THE KEYBOARD. * CAN BE CHANGED WITH USER VARIABLE * (BOUNCING) * * INCREASE ROUTINE TO INCREASE THE CONTRAST OF * THE LCD. IT MOVES THE WIPER OF THE * EEPOT. * WILL ADJUST THE WIPER OF THE EEPOT * (5/256) OF THE VOLTAGE APPEARING AT * THE INPUT OF THE EEPOT. * * DECREASE SAME AS INCREASE BUT DECREASES THE * CONTRAST * ******************************************************* ******************************************************* * * - ALL THE ROUTINES SHOULD PUT BACK PORT-A AS * DESCRIBED BELOW, AND PORT-B AS INPUT BEFORE * THE RTS. * ******************************************************* ******************************************************* * * USER VARIABLE * ORIGINE EQU $8000 START OF PROGRAM REGBS EQU $1000 REGISTER BASE ADDRESS WARMSTAR EQU $FF79 WARM START OF MONITEUR BUZTIME EQU $8000 TIME OF BUZZER-ON BOUNCING EQU $2000 BOUNCING TIME FOR KBY * ******************************************************* * * PORT-A BIT0 BUZZER NL 0 * BIT1 LCD POWER 0=ON 1=OFF NL 0 * BIT2 EEPOT INC* NH 1 * BIT3 EEPOT U/D* NH 1 * BIT4 EEPOT CS* NH 1 * BIT5 LCD RS* (DATA REG) NL 1 * BIT6 LCD R/W* NH 1 * BIT7 LCD E ACTIVE HIGH NL 0 * ----- * $7C * * PORT-B BIT0-7 => LCD DATA0-7 NORMALLY INPUT * * KBY GRAY # 88BB2-072/ * KBY GRAY #83BB1-002/ / * / / * PORT-C BIT0 KBY E H NH INPUT 1 * BIT1 KBY F G NH INPUT 1 * BIT2 KBY D F NH INPUT 1 * BIT3 KBY C E NH INPUT 1 * BIT4 KBY A M NH OUTPUT 1 * BIT5 KBY B L NH OUTPUT 1 * BIT6 KBY G K NH OUTPUT 1 * BIT7 KBY H J NH OUTPUT 1 * P1DA EQU $1200 PORTA DATA, CLR CA1 IRQ P2DA EQU $1201 PORTA DATA, CLR CA2 IRQ PORTA EQU $1202 CPA PORTA ADDRESS PORTB EQU $1203 CPA PORTB ADDRESS PORTC EQU $1204 CPA PORTC ADDRESS * DDRA EQU $1206 PORTA DATA DIRECTION REG DDRB EQU $1207 PORTB DATA DIRECTION REG DDRC EQU $1208 PORTC DATA DIRECTION REG CRA EQU $1209 CONTROL REG FOR PORTA CRB EQU $120A CONTROL REG FOR PORTB FSR EQU $120B PIN FUNCTION SELECT REG * FOR PORT C P1DB EQU $120C PORTB DATA, CLR CB1 IRQ P2DB EQU $120D PORTB DATA, CLR CB2 IRQ HSR EQU $120E HANDSHAKE/IRQ STATUS REG HWR EQU $120F H-SK OVER-RUN WARNING REG * BUZZER EQU $01 ACTIVE HIGH LCDPOWER EQU $02 0 => ON ; 1 => OFF LCDRS EQU $20 0 => INST ; 1 => DATA LCDRW EQU $40 0 => WRITE ; 1 => READ LCDE EQU $80 ACTIVE HIGH INPUT EQU $00 TO SET PORTx AS INPUT OUTPUT EQU $FF TO SET PORTx AS OUTPUT EOT EQU $04 END OF TEXT * AND DEBOUNCING KEYBOARD EEPOTINC EQU $04 EEPOT INC* PORTA BIT2 EEPOTUP EQU $08 EEPOT U/D* PORTA BIT3 EEPOTDWN EQU $08 EEPOT U/D* PORTA BIT3 EEPOTCS EQU $10 EEPOT CS* PORTA BIT4 * ********** * * - ON RESET WE SUPPOSE: * - INIT =$01 => RAM=$0000 & REG=$1000 * - IRQ ARE ENABLED * * - DESTROY: NOTHING * ******************************************************** * * ***** FOR THE INITIALIZATION OF THE CIA ***** * * ******************************************************** ******************************************************** * * STEPUSER.ASM START HERE * ORG ORIGINE *$8000 * JMP STEP_INI * STEPCW FCB $10 STEPCCW FCB $20 STEPTIME FDB $3000 ******************************************************** ******************************************************** WRITE EQU $FF76 ************************ ******************************************************** ******************************************************** * * * MSG1 FCC "NStep CW=1 CCW=2" FCB EOT *$04 MSG2 FCC "StepTIME=3 " FCB EOT * * * EQU FOR STEPUSER.ASM * STACK EQU $0040 TO INIT THE STACK POINTER * ***** * STEP_INI LDS #STACK INIT THE STACK POINTER JSR INILCD JSR INIKBY JSR GO1LINE1 MSG_INI LDX #MSG1 JSR DSP_LINE JSR GO1LINE2 LDX #MSG2 JSR DSP_LINE GOSTEP JMP DEBUT * ***** * DSP_LINE LDAA 0,X CMPA #EOT BEQ DSP_END JSR LCD_DATA INX JMP DSP_LINE DSP_END RTS * ***** * ******************************************************** * * SKANKBY * SCAN THE KEYBOARD TO SEE IF A KEY IS DEPRESSED * * 1 = NUMBER OF STEPS CW * 2 = NUMBER OF STEPS CCW * 3 = StepTIME BETWEEN TWO STEPS OF THE MOTOR * SCANKBY PSHA JSR NOWAIT CMPA #$00 A=00 IF NO KEY BEQ SCAN_END JSR BUZZERON JSR BUZ_OFF JSR BUZZERON JSR BUZ_OFF JSR BUZZERON JSR BUZ_OFF JSR BUZZERON JSR BUZ_OFF JMP KEY_ID * ***** ALL ROUTINES RETURN HERE BECAUSE OF THE "PULA" * *SCAN_END JSR BUZZERON EVERY TIME IT TURNS, IT BUZS (NOISY) SCAN_END PULA RTS * ***** BUZZER ON FOR BUZTIME * BUZ_OFF PSHX LDX #BUZTIME WAIT FOR A WHILE BO_LOOP DEX BNE BO_LOOP PULX RTS * ***** GET ID OF THE KEY DEPRESSED * KEY_ID CMPA #$31 STEP CW ??? BEQ KEY_CW CMPA #$32 STEP CCW ??? BEQ JMP_CCW CMPA #$33 StepTIME ??? BEQ JMP_TIME JMP SCAN_END NO => RETURN BECAUSE ERROR * JMP_CCW JMP KEY_CCW JMP_TIME JMP KEY_TIME * ***** BLANK THE LCD AND GO HOME * MSG_BLK FCC " " FCB EOT * * BLK_LCD PSHX JSR GO1LINE1 LDX #MSG_BLK BLANK FIRST LINE JSR DSP_LINE JSR GO1LINE2 LDX #MSG_BLK BLANK SECOND LINE JSR DSP_LINE JSR GO1LINE1 GO HOME PULX RTS * ***** CHANGE THE NUMBER OF STEPS CLOCKWISE: @ 8003 * MSG_CW FCC "Nb Steps CW: " FCB EOT * KEY_CW JSR BLK_LCD BLANK THE LCD AND GO HOME PSHX PSHB LDX #MSG_CW JSR DSP_LINE * JSR WAITLCD SCAN, DISPLAY, RETURN: A=KEY JSR DELAY JSR BUZZERON ANDA #$0F ASCII TO HEX LSLA GET LOW BYTE TO HIGH BYTE LSLA LSLA LSLA * * LDX #STEPCW STORE A @ STEPCW JSR WRITE * * JSR WAITLCD GET SECOND DIGIT JSR DELAY JSR BUZZERON ANDA #$0F ASCII TO HEX ADDA STEPCW ADD LOW BYTE * * LDX #STEPCW STORE A @ STEPCW JSR WRITE * * PULB PULX JMP ORIGINE RESET THE UNIT * ***** CHANGE THE NUMBER OF STEPS COUNTERCLOCKWISE: @ 8004 * MSG_CCW FCC "Nb Steps CCW: " FCB EOT * KEY_CCW JSR BLK_LCD BLANK THE LCD AND GO HOME PSHX PSHB LDX #MSG_CCW JSR DSP_LINE * JSR WAITLCD SCAN, DISPLAY, RETURN: A=KEY JSR DELAY JSR BUZZERON ANDA #$0F ASCII TO HEX LSLA GET LOW BYTE TO HIGH BYTE LSLA LSLA LSLA * * LDX #STEPCCW STORE A @ STEPCCW JSR WRITE * * JSR WAITLCD GET SECOND DIGIT JSR DELAY JSR BUZZERON ANDA #$0F ASCII TO HEX ADDA STEPCCW ADD LOW BYTE * * LDX #STEPCCW STORE A @ STEPCCW JSR WRITE * * PULB PULX JMP ORIGINE RESET THE UNIT * ***** CHANGE THE OF ONE STEP: @ 8005/6 * MSG_TIME FCC "StepTIME: " FCB EOT * KEY_TIME JSR BLK_LCD BLANK THE LCD AND GO HOME PSHX PSHB LDX #MSG_TIME JSR DSP_LINE * JSR WAITLCD SCAN, DISPLAY, RETURN: A=KEY JSR DELAY JSR BUZZERON ANDA #$0F ASCII TO HEX LSLA GET LOW BYTE TO HIGH BYTE LSLA LSLA LSLA * * LDX #STEPTIME STORE A @ STEPTIME JSR WRITE * * JSR WAITLCD GET SECOND DIGIT JSR DELAY JSR BUZZERON ANDA #$0F ASCII TO HEX ADDA STEPTIME ADD LOW BYTE * * LDX #STEPTIME STORE A @ STEPTIME JSR WRITE * * PULB PULX JMP ORIGINE RESET THE UNIT * * ******************************************************** ******************************************************** ******************************************************** ******************************************************** * * Michel-Andr‚ Robillard T.Sc.A. * 18 mars 1995 * * Pour contr“ler le "stepper motor" de GIGI * * * CLK PD2 @ $1008 (PORT-D) [DDRD = $1009] * CW/CCW* PD3 * F*/H PD4 FULL* / HALF * * * LED1 PD5 * * LED2 PA4 @ $1000 (PORT-A) * LED3 PA5 * LED4 PA6 * LED5 PA7 ??? PA7 (I/O)??? * * DDRD EQU $1009 PORTD EQU $1008 PRTA EQU $1000 * * ************************************ * LE ULN2803 INVERSE TOUS LES BITS * ************************************ *CLK EQU $04 *CW EQU $08 *HALF EQU $10 * * * * * * THE STACK IS ALREADY INITIALIZED * DEBUT LDAA #%00010000 HALF & CCW COMA ULN2803 INVERSE LE PORT STAA PORTD * LDAA #$FF TOUTES LES LEDS DE A=OFF COMA STAA PRTA * LDAA #$FF PORTD TOUT EN OUTPUT STAA DDRD * ***** * CCW LDAB STEPCCW NB STEPS CCW * LED4_OFF LDAA PRTA COMA ORAA #%00010000 LED4=OFF COMA ULN2803 INVERSE LE PORT STAA PRTA * LED3_ON LDAA PORTD COMA ANDA #%11011111 LED3=ON COMA ULN2803 INVERSE LE PORT STAA PORTD * * LDAA PORTD COMA ANDA #%11110111 CW/CCW*=0 =>CCW COMA ULN2803 INVERSE LE PORT STAA PORTD * JSR SCANKBY TO SEE IF USER WANT TO ADJUST VARs * HIGH LDAA PORTD COMA ORAA #%00000100 CLK=1 COMA ULN2803 INVERSE LE PORT STAA PORTD * LDX STEPTIME LOOPH DEX BNE LOOPH * LOW LDAA PORTD COMA ANDA #%11111011 CLK=0 COMA ULN2803 INVERSE LE PORT STAA PORTD LDX STEPTIME LOOPL DEX BNE LOOPL DECB BNE HIGH * ***** * CW LDAB STEPCW NB STEPS CW * LED3_OFF LDAA PORTD COMA ORAA #%00100000 LED3=OFF COMA ULN2803 INVERSE LE PORT STAA PORTD * LED4-ON LDAA PRTA COMA ANDA #%11101111 LED4=ON COMA ULN2803 INVERSE LE PORT STAA PRTA * LDAA PORTD COMA ORAA #%00001000 CW=1 COMA ULN2803 INVERSE LE PORT STAA PORTD * JSR SCANKBY TO SEE IF USER WANT TO ADJUST VARs * HIGHC LDAA PORTD COMA ORAA #%00000100 CLK=1 COMA ULN2803 INVERSE LE PORT STAA PORTD LDX STEPTIME LOOPHC DEX BNE LOOPHC * LOWC LDAA PORTD COMA ANDA #%11111011 CLK=0 COMA ULN2803 INVERSE LE PORT STAA PORTD LDX STEPTIME LOOPLC DEX BNE LOOPLC DECB BNE HIGHC * JMP CCW * * ******************************************************** ******************************************************** ******************************************************** ******************************************************** * * INILCD PSHA SAVE LDAA #$7C INIT PORTA (NORMAL) STAA PORTA CLR DDRA DEC DDRA ALL PORTA AS OUTPUT CLR DDRB ALL PORTB AS INPUT JSR LCD_BUSY GO READ UNTIL NOT BUSY LDAA #$38 8 BITS / 2 LINES / 5x7 JSR LCD_INS GO WRITE LCD-INSTRUCTION LDAA #$38 2 TIMES THE INSTRUCTION JSR LCD_INS LDAA #$0E INC / CURSOR / NO BLINK JSR LCD_INS LDAA #$01 LCD CLEAR JSR LCD_INS LDAA #$02 LCD HOME JSR LCD_INS PULA RESTORE RTS * ******************************************************** * * - ON ENTRY PORT-B IS NORMALLY INPUT * * - DESTROY: NOTHING * LCD_BUSY PSHB PSHY LDY #PORTA INIT Y FOR BSET & BCLR BCLR 0,Y LCDRS SET LCD FOR INS-REGISTER RDLOOP BCLR 0,Y LCDE SET LCD E LOW (NORMAL) BSET 0,Y LCDE SET LCD E HIGH LDAB PORTB GET BUSY FLAG (BIT-7) BMI RDLOOP IF 1 => BUSY, THEN LOOP BCLR 0,Y LCDE ELSE PUT LCDE (NORMAL) BSET 0,Y LCDRS ELSE PUT RS ORIGINAL PULY PULB RTS ******************************************************** * * - ON ENTRY A = INSTRUCTION FOR LCD * * - DESTROY: NOTHING * LCD_INS PSHY STAA PORTB SET DATA FOR LCD CLR DDRB DEC DDRB PORTB AS OUTPUT LDY #PORTA INIT Y FOR BSET & BCLR BCLR 0,Y LCDRS SET LCD FOR INS REG BCLR 0,Y LCDRW SET LCD FOR WRITE BSET 0,Y LCDE SET LCD E HIGH (ACTIVE) BCLR 0,Y LCDE SET LCD E LOW (NORMAL) CLR DDRB PUT BACK PORTB ORIGINAL BSET 0,Y LCDRS PUT BACK RS ORIGINAL BSET 0,Y LCDRW PUT BACK RW ORIGINAL PULY JSR LCD_BUSY WAIT FOR NOT BUSY RTS ******************************************************** * * - ON ENTRY A = BYTE TO WRITE TO LCD * * - DESTROY: NOTHING * LCD_DATA PSHA PSHY STAA PORTB SET DATA FOR LCD LDAA #OUTPUT STAA DDRB PORT B AS OUTPUT LDY #PORTA INIT Y FOR BSET & BCLR BCLR 0,Y LCDRW SET LCD FOR WRITE BSET 0,Y LCDE SET LCD E HIGH (ACTIVE) BCLR 0,Y LCDE SET LCD E LOW (NORMAL) CLR DDRB SET PORTB ORIGINAL BSET 0,Y LCDRW SET LCDRW ORIGINAL PULY PULA JSR LCD_BUSY WAIT UNTIL NOT BUSY RTS ******************************************************** * * - TAKE THE CURSOR TO THE FIRST CHAR OF LINE #1 * * - DESTROY: NOTHING * GO1LINE1 PSHA SAVE LDAA #$80 PUT $00 IN DDRAM ADDRESS JSR LCD_INS GO TO SECOND LINE PULA RESTORE RTS ******************************************************** * * - TAKE THE CURSOR TO THE FIRST CHAR OF LINE #2 * * - DESTROY: NOTHING * GO1LINE2 PSHA SAVE LDAA #$C0 PUT $40 IN DDRAM ADDRESS JSR LCD_INS GO TO SECOND LINE PULA RESTORE RTS ******************************************************** * * - PUT BUZZER ON FOR (BUZTIME) * * - DESTROY: NOTHING * BUZZERON PSHX SAVE LDX #PORTA INIT X BUZZER-ADDRESS BSET 0,X BUZZER SET BUZZER ON LDX #BUZTIME WAIT FOR A WHILE WAITMORE DEX BNE WAITMORE LDX #PORTA INIT X BUZZER-ADDRESS BCLR 0,X BUZZER SET BUZZER OFF PULX RESTORE RTS ******************************************************** * * - ROUTINE TO INITIALIZE THE KEYBOARD * * - DESTROY: NOTHING * INIKBY PSHB SAVE LDAB #$0F PA0-PA3 OUTPUT * PA4-PA7 INPUT STAB DDRC LDAB #$F0 WRITE 1111 0000 * INTO PORTA STAB PORTC PULB RESTORE RTS ******************************************************** * * - ROUTINE TO SCAN THE KEYBOARD ONE TIME * - ON RETURN: CLEAR A IF NO KEY IS DEPRESSED * * - DESTROY: A=$00 ONLY IF NO KEY DEPRESSED * ELSE ON RETURN A=CHAR * NOWAIT JSR INIKBY INIT PORT LDAA PORTC GET DATA (COL) ANDA #$F0 CMPA #$F0 BEQ NOKEY NO KEY THEN RTS BRA GETKEY ELSE BRANCH ALWAYS NOKEY CLRA RTS ******************************************************** * * - ROUTINE TO SCAN THE KEYBOARD * WAIT UNTIL A KEY IS DEPRESSED * - DOES NOT DISPLAY THE CHAR ON THE LCD * * - RETURN WITH CHAR IN A * * - DESTROY: A WILL CONTAIN CHAR ON RETURN * WAIT JSR WAITKEY RTS ******************************************************** * * - ROUTINE TO SCAN THE KEYBOARD * WAIT UNTIL A KEY IS DEPRESSED * - DISPLAY THE CHAR ON THE LCD * * - RETURN WITH CHAR IN A * * - DESTROY: A WILL CONTAIN CHAR ON RETURN * WAITLCD JSR WAITKEY ON RETURN HERE * A CONTAINS THE CHAR JSR LCD_DATA RTS ******************************************************** * * - ENDLESS LOOP * - ROUTINE TO GET ONE KEY FROM KEYBOARD * - ON RETURN THE CHAR IS IN A * * - DESTROY: A WILL CONTAIN CHAR ON RETURN * WAITKEY PSHA WAITALL JSR INIKBY INIT PORT LDAA PORTC GET DATA (COL) ANDA #$F0 CMPA #$F0 BEQ WAITALL NO KEY THEN WAIT PULA GETKEY PSHB PSHX JSR DELAY IT HAS A KEY LDAA PORTC LDAB #$F0 PA7-PA4 OUTPUT => COL * PA0-PA3 INPUT => ROW STAB DDRC ORAA #$0F KEEP PA7-PA4 & * FILL PA0-PA3 WITH 1111 STAA PORTC WRITE BACK INTO PORTA LDAA PORTC FETCH CLOSURE DATA LDX #KTABLE INIT POINTER X TO TABLE CLRB LOOKUP CMPA 0,X DATA=CURRENT TABLE VALUE ? BEQ STASH YES=PUT DATA INTO BUFFER INCB ADJUST CHARACTER INX MOVE TO NEXT TABLE ENTRY CPX #TBLEND+1 FINISH ??? BNE LOOKUP NO = LOOP PULX PULB BRA WAITKEY ELSE = BAD READING, TWO * KEYS AT THE SAME TIME * *********************** * HERE THE ORDER OF THE * KEY IS IN B AND X HAS * THE POSITION OF THE CHAR * IN THE TABLE * *********************** STASH LDAA $10,X GET REAL KEYSTROKE IN A JSR BUZZERON WAIT BUZTIME PULX PULB RTS RETURN WITH KEY IN A ******************************************************** * * - TABLE READ FROM THE KEYBOARD * - FOR KEYBOARD: GRAY # 88BB2-072 * * - TABLE KTABLE & REALKEY MUST FOLLOW EACH OTHER * * KTABLE FCB $EE,$ED,$EB,$E7,$DE,$DD,$DB,$D7,$BE FCB $BD,$BB,$B7,$7E,$7D,$7B TBLEND FCB $77 ******************************************************** * * - TABLE FOR KEY EQUIVALENT * REALKEY FCC '0123456789ABCDEF' ******************************************************** * * - DELAY FOR BOUNCING * * - DESTROY: NOTHING * DELAY PSHY LDY #BOUNCING LOOP1 DEY BNE LOOP1 PULY RTS ******************************************************** * -------------------------------------- * PORT-A PIN NAME ! PA2 ! PA3 ! PA4 ! ACTION ! * EEPOT PIN NAME ! INC* ! U/D* ! CS* ! ! * !------------------------------------! * !FALLING! H ! L ! WIPER UP ! * !FALLING! L ! L ! WIPER DWN ! * ! H ! X !RISING! STORE WIPER! * -------------------------------------- * * INCREASE => INCREASE THE CONTRAST OF THE LCD * DECREASE => DECREASE THE CONTRAST OF THE LCD * * WIPER GOES HIGH => HIGHER VOLTAGE => LOWER CONTRAST * WIPER GOES LOW => LOWER VOLTAGE => HIGHER CONTRAST * * - THIS ROUTINE IS USED WITH A 68HC11A1 @ 4.9152MHZ * IF YOU USE ANOTHER FREQUENCY, MAKE SURE TO * ADJUST THE NUMBER OF NOP (NO OPERATION) IN * SUBROUTINE "TOGLE" * * - USES: DELAY * * - DESTROY: NOTHING * INCREASE PSHX LDX #PORTA INIT X FOR BSET & BCLR BCLR 0,X EEPOTCS ASSERT EEPOT CS* BCLR 0,X EEPOTDWN ASSERT U/D* TO DOWN BRA TOGLE TOGLE INC* & RTS ********** DECREASE PSHX LDX #PORTA INIT X FOR BSET & BCLR BCLR 0,X EEPOTCS ASSERT EEPOT CS* ********** TOGLE JSR ACTION TOGLE ONCE JSR ACTION TOGLE ONCE AGAIN JSR ACTION TOGLE ONCE AGAIN JSR ACTION TOGLE ONCE AGAIN JSR ACTION TOGLE ONCE AGAIN BSET 0,X EEPOTDWN DE-ASSERT U/D* BSET 0,X EEPOTCS DE-ASSERT CS* JSR DELAY PULX RTS ********** ACTION NOP DELAY FOR THE EEPOT CS*... NOP ...TO THE INC* TOGLE NOP MIN TIME = 2.9usec NOP NOP NOP BCLR 0,X EEPOTINC TOGLE EEPOT INC* "LOW" NOP MIN TIME = 1usec NOP BSET 0,X EEPOTINC TOGLE EEPOT INC* "HIGH" NOP MIN TIME = 3usec NOP NOP NOP NOP NOP RTS *********************************************************** *********************************************************** *********************************************************** ***********************************************************