********************************************************************* * Authors: B. Alex Bridges and Davy Little * * Class: ECE-374, Summer 1998 * * Project: Lab Assignment #5 * * Description: This program processes a list of grades and displays * * the results as a bar graph on the LEDs. * ********************************************************************* ** CONSTANTS / VARIABLES ** ABSOLUTE ORG $00 BAD: FCB 0 * Counter For Number Of Invalid Grades (< 65, > 100) RANGE1: FCB 0 * Counter For Number Grades [93,100] RANGE2: FCB 0 * Counter For Number Grades [84,92] RANGE3: FCB 0 * Counter For Number Grades [77,83] RANGE4: FCB 0 * Counter For Number Grades < 70 TABLOC: FDB TABLE * Holds Starting Address Of TABLE COUNT: FCB 0 * Counter For Bar Graph Display TIME: FDB 33333 * Value Corresponding to .1 Second Delay PORTB: EQU $1004 * Address Corresponding to Port B ** PROGRAM - MAIN ** RELATIVE ORG $C100 BEGIN: LDS $C0FF * Set custom value for stack pointer S LDX TABLOC * Set pointer to start of TABLE LOOP: LDAA 0,X * Assign value @ pointer => A CMP0: CMPA #$FF BEQ DSP1 * Branch if A = -1 CMP1: CMPA #100 BLS CMP2 * Branch if A < 100 INC BAD * Increment counter for number of invalid grades BRA NEXT * Next Value CMP2: CMPA #65 BHS CMP3 * Branch if A >= 65 INC BAD * Increment counter for number of invalid grades (< 65, > 100) BRA NEXT * Next Value CMP3: CMPA #93 BLO CMP4 * Branch if A < 93 INC RANGE1 * Increment counter for number grades [93,100] BRA NEXT CMP4: CMPA #84 BLO CMP5 * Branch if A < 84 INC RANGE2 * Increment counter for number grades [84,92] BRA NEXT CMP5: CMPA #77 BLO CMP6 * Branch if A < 77 INC RANGE3 * Increment counter for number grades [77,83] BRA NEXT CMP6: CMPA #70 BHS NEXT * Branch if A > 70 INC RANGE4 * Increment counter for number grades < 70 BRA NEXT NEXT: INX * Next address in TABLE BRA LOOP DSP1: LDAA RANGE1 * Copy RANGE1 to COUNT via A STAA COUNT LSR COUNT * Divide COUNT by 2 JSR GRAPH * Display COUNT DSP2: LDAA RANGE2 * Copy RANGE2 to COUNT via A STAA COUNT LSR COUNT * Divide COUNT by 2 JSR GRAPH * Display COUNT DSP3: LDAA RANGE3 * Copy RANGE3 to COUNT via A STAA COUNT LSR COUNT * Divide COUNT by 2 JSR GRAPH * Display COUNT DSP4: LDAA RANGE4 * Copy RANGE3 to COUNT via A STAA COUNT LSR COUNT * Divide COUNT by 2 JSR GRAPH * Display COUNT DSPBAB: LDAA BAD * Load BAD count in A STAA COUNT LSR COUNT * Divide COUNT by 2 JSR GRAPH * Display COUNT END: SWI ** PROGRAM - SUBROUTINES ** GRAPH: LDAA COUNT * Load A with COUNT COUNT0: CMPA #0 * If COUNT is 0, light 0 LEDs BNE COUNT1 LDAB #%0 STAB PORTB BRA PAUSE COUNT1: CMPA #1 * If COUNT is 1, light 1 LED BNE COUNT2 LDAB #%1 STAB PORTB BRA PAUSE COUNT2: CMPA #2 * If COUNT is 2, light 2 LEDs BNE COUNT3 LDAB #%11 STAB PORTB BRA PAUSE COUNT3: CMPA #3 * If COUNT is 3, light 3 LEDs BNE COUNT4 LDAB #%111 STAB PORTB BRA PAUSE COUNT4: CMPA #4 * If COUNT is 4, light 4 LEDs BNE COUNT5 LDAB #%1111 STAB PORTB BRA PAUSE COUNT5: CMPA #5 * If COUNT is 5, light 5 LEDs BNE COUNT6 LDAB #%11111 STAB PORTB BRA PAUSE COUNT6: CMPA #6 * If COUNT is 6, light 6 LEDs BNE COUNT7 LDAB #%111111 STAB PORTB BRA PAUSE COUNT7: CMPA #7 * If COUNT is 7, light 7 LEDs BNE COUNT8 LDAB #%1111111 STAB PORTB BRA PAUSE COUNT8: CMPA #8 * If COUNT is 8, light 8 LEDs BLO PAUSE LDAB #%11111111 STAB PORTB BRA PAUSE PAUSE: JSR DELAY * Wait 1 second CLRB * Turn off LEDs STAB PORTB RTS DELAY: LDAA #10 REPEAT: LDX TIME * Load TIME for .1 second delay DEC: DEX BNE DEC * Decrement value until 0 DECA BNE REPEAT * Repeat 10 times => 1 second delay RTS ** TABLE ** TABLE: FCB 80,92,75,85,105,94,97,100,65,88,71,68,99,93,124,84,87,86,74,88,84 FCB 69,96,86,70,65,129,97,82,64,83,77,88,73,81,-1