The assembly program used for the chip is described bellow. The comments explain what the program does at each step.
* USING OWN COMMUNICATION ROUTINES * * RECEIVES 3 BYTES FROM COMPUTER AND SENDS OUT TO PORT B AND CONVERTS * 3 BYTES TO DIGITAL AND SENDS TO COMPUTER * * PORT B IS USED TO OUTPUT THE 8 BIT DATA TO BE CONVERTED * TO ANALOG ALONG WITH 3 CONTROL BITS OF PORTC-0,1,2. ORG $B600 PORTA EQU $1000 PORTB EQU $1004 PORTC EQU $1003 DDRC EQU $1007 IODEV EQU $00A7 VALUE TO SPECIFY PORT TO BE USED AUTOLF EQU $00A6 AUTO LF/CR CONTROL INIT EQU $FFA9 USEFUL SUBROUTINES ADCTL EQU $1030 CONTROL FOR A/D CONVERSION ADR1 EQU $1031 A/D RESULT REGISTERS ADR2 EQU $1032 ADR3 EQU $1033 ADR4 EQU $1034 OPTION EQU $1039 TO POWER UP THE A/D SYSTEM INTMP1 EQU $0101 INTMP2 EQU $0102 INTMP3 EQU $0103 INTMP4 EQU $0104 OUTMP1 EQU $0111 OUTMP2 EQU $0112 OUTMP3 EQU $0113 OUTMP4 EQU $0114 BAUD EQU $102B SCCR1 EQU $102C SCCR2 EQU $102D SCSR EQU $102E SCDAT EQU $102F COPRST EQU $103A * MAIN PROGRAM THAT INITIALIZES AND ROUTES CONTROL * MAIN CLR AUTOLF INC AUTOLF LDAA #$00 STAA IODEV LDAA #$FF STAA DDRC SET PORTC AS OUTPUT PORT LDAA #$00 STAA PORTC SELECTING ALL 3 d/a's LDAA #$80 STAA PORTB INITIALIZE d/a's TO 0V JSR INIT LDAA #$FF STAA PORTC AFTER A DELAY, DESELECTING ALL d/a's LDAA #$41 STAA INTMP2 LDAA #$42 STAA INTMP3 LDAA #$43 STAA INTMP4 JSR INITAD JSR CHKST JSR TXDAT first 3 bytes test characters MLOOP JSR RXDAT JSR GETANL JSR OUTDAT JMP MLOOP * INPUT SUBROUTINE * INPUT PSHX LDAA #$55 STAA COPRST LDAA #$AA STAA COPRST LDAA IODEV BNE INPUT1 LDAA SCDAT INSCI LDAA SCSR ANDA #$20 BEQ INPUT1 LDAA SCDAT INPUT1 PULX RTS * OUTPUT SUBROUTINE * OUTPUT PSHA PSHB PSHX LDAB IODEV BNE OUTPUT1 OUTSCI LDAB SCSR BITB #$80 BEQ OUTSCI LOOP TILL TRDRE=1 STAA SCDAT OUTPUT1 PULX PULB PULA RTS * SUBROUTINE THAT WAITS FOR 3 CHARS FROM WORKSTATION * CHKST JSR INPUT TSTA BEQ CHKST CHECK IF ANY CHARACTER RECEIVED CLOOP1 JSR INPUT TSTA BEQ CLOOP1 CHECK FOR SECOND BYTE CLOOP2 JSR INPUT TSTA BEQ CLOOP2 CHECK FOR THIRD BYTE RTS * SUBROUTINE TO INITIALIZE A/D CONVERION UNIT * INITAD LDAA #$80 STAA OPTION SET ENABLE BIT FOR THE A/D SYS. LDAA #$30 STAA ADCTL START CONTINIOUS CONVERSION OF 4 INPUTS ALOOP LDAA ADCTL ANDA #$80 BEQ ALOOP CHK IF ONE CONVERSION COMPLETE RTS * GET ANALOG INPUTS AND OUTPUT THEM TO COMPUTER * GETANL LDAA ADR1 FIRST BYTE STRAY INPUT LDAA ADR2 JSR OUTPUT LDAA ADR3 JSR OUTPUT LDAA ADR4 JSR OUTPUT RTS * SUBROUTINE TO TRANSMIT 3 BYTES OF DATA FROM INTMP REGISTERS * TXDAT LDAA INTMP2 JSR OUTPUT LDAA INTMP3 JSR OUTPUT LDAA INTMP4 JSR OUTPUT RTS * SUBROUTINE TO RECEIVE 3 BYTES OF DATA FROM WORKSTATION * RXDAT JSR INPUT TSTA BEQ RXDAT IF NO CHR RECEIVED GO BACK STAA OUTMP1 IF YES, STORE RLOOP1 JSR INPUT TSTA BEQ RLOOP1 STAA OUTMP2 RLOOP2 JSR INPUT TSTA BEQ RLOOP2 STAA OUTMP3 RTS * SUBROUTINE TO SEND OUT THE DATA TO THE 3 D/A'S * * ALSO HAVE TO OUTPUT CONTROL ON PORT A TO CHOOSE 1 D/A AT EACH TIME * OUTDAT LDAA OUTMP1 STAA PORTB LDAA #$FE STAA PORTC SELECT FIRST d/a. NOP NOP NOP LDAA #$FF STAA PORTC AFTER A DELAY DISABLE LDAA OUTMP2 STAA PORTB LDAA #$FD STAA PORTC SELECT SECOND d/a. NOP NOP NOP LDAA #$FF STAA PORTC AFTER A DELAY DISABLE LDAA OUTMP3 STAA PORTB LDAA #$FB STAA PORTC SELECT THIRD d/a. NOP NOP NOP LDAA #$FF STAA PORTC AFTER A DELAY DISABLE RTS