; ********************************************************************** ; * File S1DEB5.asm board: GPC 324+ETI 324 with SXA51 * ; * GRIFO(R) via Dell'Artigiano 8/6 40016 S. Giorgio di Piano (BO) * ; * Tel. +39 051 892052 Fax. +39 051 893661 * ; * http://www.grifo.it http://www.grifo.com * ; * by Alessio Francesconi 13.09.04 * ; ********************************************************************** ; DEB 01's example program of section 1, driven from a GPC 324 connected ; with an ETI 324. ; This section is composed by 16 keys conncted to 16 LEDs: ; the pressure of one or more of these keys, sets the logic state 0 on ; the line and the relative LED is lit by hardware. ; This program has to comunicate with PC and to writes the status of ; Port 1 (Port C of 82c55), on Port 0 (Port A of 82c55) if T1 of eventual ; TIO 16 connected to CN4 of ETI 324 is not pressed, otherwise writes on ; Port 0, the complemented status if T1 of TIO 16 is pressed. ; To communicate to ETI 324 board you need to map it at address 50H. ; For cursor movement and positioning, are used some command sequences ; with ADDS Viewpoint standard (see GET51 manual). ; The connection is realized through one 26 pins flat cable that interface ; CN1 connector of GPC 324 and CN1 connector of ETI 324 and another 20 pin ; flat cable that connect CN3 of ETI 324 and CN15 of DEB 01. ; ; ; Addresses of on board peripherals ; PDA EQU 0FF50H ;82c55 address of data registers is calculated PDB EQU 0FF51H ;adding: FF00H (abaco I/O bus address for GPC 324), PDC EQU 0FF52H ;50H (mapping addrress for ETI 324) and 0..3 CNT EQU 0FF53H ;(offset for corresponding data register). ; ; Initialization of constant data ; INIT EQU 8BH ;mode 0;port A in output,port B and C in input TXCHAR EQU 0DH ;variable with the value for the transmission PORTA EQU 08H ;internal memory address with portA value PORTB EQU 0AH ;internal memory address with portB value PORTC EQU 09H ;internal memory address with portC value ; ; Start of main program ; ORG 2050H ;beginning of executable part program MAIN: MOV SP,#2FH ;initialize the first free location pointer of the stack MOV DPTR,#CNT ;initialization of PPI 82c55 as indicated in INIT MOV A,#INIT MOVX @DPTR,A ;write to 82C55's control register control word CLR RS0 ;select the registers bank 0 (00H-07H) CLR RS1 ACALL SERIAL MOV DPTR,#HEADING ;print to monitor the "HEADING" string ACALL STRING ; CYCLE: ACALL INPORTB ;read the Port B status ANL PORTB,#01H ;only T1 status is checked, other keys are masked to 0 MOV A,PORTB CJNE A,#00H,COMPL ;if T1 is not pressed, jump to complemented setting ACALL INPORTC ;read the Port C status MOV PORTA,PORTC ;transfer the PORTC value on PORTA variable ACALL OUTPORTA ;write the normal bit on Port A AJMP CYCLE COMPL: ACALL INPORTC ;read the Port C status MOV A,PORTC CPL A ;complement of PORTC value MOV PORTA,A ;transfer the PORTC value on PORTA variable ACALL OUTPORTA ;write the complemented bit on Port A AJMP CYCLE ; ; Subroutine to acquire the reading data on port B ; INPORTB: PUSH PSW ;save registers used by subroutine PUSH DPL PUSH DPH PUSH ACC MOV DPTR,#PDB ;load the port B address and MOVX A,@DPTR ;acquire its data MOV PORTB,A ;save it on proper variable POP ACC ;restore registers used by subroutine POP DPH POP DPL POP PSW RET ; ; Procedura per l'acquisizione del dato letto sul Port C ; INPORTC: PUSH PSW ;save registers used by subroutine PUSH DPL PUSH DPH PUSH ACC MOV DPTR,#PDC ;load the port C address and MOVX A,@DPTR ;acquire its data MOV PORTC,A ;save it on proper variable POP ACC ;restore registers used by subroutine POP DPH POP DPL POP PSW RET ; ; Subroutine to show the acquire data on Port A ; OUTPORTA: PUSH PSW ;save registers used by subroutine PUSH DPL PUSH DPH PUSH ACC MOV A,PORTA ;save the PORTA variable data on A MOV DPTR,#PDA ;load the Port A address MOVX @DPTR,A ;write data on port A POP ACC ;restore registers used by subroutine POP DPH POP DPL POP PSW RET ; ; Serial initialization procedure ; SERIAL: PUSH PSW ;save PSW MOV SCON,#50H ;select mode 1, active reception MOV TH1,#253 ;initialize to 19200 baud ANL PCON,#7FH ;reset the bit 7 of PCON (SMOD) POP PSW ;restore PSW RET ; ; Serial transmission of a string contained in external data memory ; STRING: PUSH PSW ;save registers used by subroutine PUSH ACC PUSH TXCHAR STRINGLOOP: MOVX A,@DPTR ;load into A the memory contents pointed by DPTR JZ ENDSTRING ;if the last reading character is void (00H),jump to end MOV TXCHAR,A ;put the current character into the variable for the transmission ACALL TRASMSER ;transmit the character INC DPTR ;increase the pointer to be ready SJMP STRINGLOOP ;for the following character ENDSTRING: POP TXCHAR ;restore registers used by subroutine POP ACC POP PSW RET ; ; Serial transmission's procedure ; TRASMSER: PUSH PSW ;save PSW TRASM1: JBC TI,TRASM2 ;jump to TRASM2 if TI = 1 and reset TI SJMP TRASM1 ;jump to TRASM1 because TI = 0 ;and serial is still in transmission TRASM2: MOV SBUF,TXCHAR POP PSW ;restore PSW RET ; ; HEADING: DB 0CH,' NOTE: MAP ETI 324 AT ADDRESS 50H!' DB 1DH,' Writes to port 0 the status complemented of Port 1 if T1 of TIO 16',1DH,' is not pressed, otherwise write the status not complemented.',00H END