Jump to content
43oh

Brian1994

Members
  • Content Count

    1
  • Joined

  • Last visited

Posts posted by Brian1994

  1. Hello, all. I need help on the following code. The msp430 is controlling a 7-segment display. After it runs thru 0-F, It stops at 0. The 4 input buttons act as binary numbers(0 or 1). I can only get the program to take one button input, thus only allowing

     

    1000,0100,0010,and 0001. When i need 0001,0010,0011,0100,0101, etc. What can I do to perform this task?

     

    Thank you very much for your time.
    ;   
    ;   This code provides a trivial example for demonstrating writing to the
    ;   1-digit display- mainly this will quickly cycle through each segment
    ;   one at a time, then run a quick test of the 4 pushbuttons, by turning on
    ;   the symbol 0,1,2,or 3 to indicate which one (only one) PB is pressed.   
    ;   Only capable of testing one pushbutton at a time, not combinations
    ;    
    ;      
    ;
    ;   Target: TI LaunchPad development board with MSP430G2553 device with the
    ;    custom  1 digit expansion Display Board installed
    ;

    ;
    ;       HW I/O assignments:

    ;
    ;       P1.0    (output) LED1 LaunchPad bd (active high)
    ;       P1.1    (input)  pushbutton (top) (active low) expansion bd
    ;       P1.2    (input)  pushbutton (second from top) (active low) expansion bd
    ;       P1.3    (input)  pushbutton on LaunchPad bd (active low)
    ;       P1.4    (input) pushbutton (third from top) (active low) expansion bd
    ;       P1.5    (input) pushbutton (bottom) (active low) expansion bd
    ;       P1.6    (output) LED2 LaunchPad bd (active high)  
    ;       P1.7    (not used)  
    ;
    ;       P2.0    (output) Segment A (active high) drives display board
    ;       P2.1    (output) Segment B (active high) drives display board
    ;       P2.2    (output) Segment C (active high) drives display board
    ;       P2.3    (output) Segment D (active high) drives display board
    ;       P2.4    (output) Segment E (active high) drives display board
    ;       P2.5    (output) Segment F (active high) drives display board
    ;       P2.6    (output) Segment G (active high) drives display board
    ;       P2.7    (output) Segment DP (active high) drives display board
    ;
    ;
    ;
    ;*******************************************************************************
    #include  "msp430g2553.h"
    ;-------------------------------------------------------------------------------
    ; Definition of Constants
    ;-------------------------------------------------------------------------------

    LONG_DELAY      EQU     65535  ; max 16 bit value (FFFFh)
    ;LONG_DELAY      EQU     600  ; max 16 bit value (FFFFh)
    SHORT_DELAY     EQU     5000  ;

    TIMER_A_COUNT_1   EQU   1000   ; set count value in TimerA_0  

    MAX_TIMER_COUNT  EQU    50    ; number of Timer Interrupts that have to occur

    SEG_A         EQU     %00000001 ; Port pin position P2.0
    SEG_B         EQU     %00000010 ; Port pin position P2.1
    SEG_C         EQU     %00000100 ; Port pin position P2.2
    SEG_D         EQU     %00001000 ; Port pin position P2.3
    SEG_E         EQU     %00010000 ; Port pin position P2.4
    SEG_F         EQU     %00100000 ; Port pin position P2.5
    SEG_G         EQU     %01000000 ; Port pin position P2.6
    SEG_DP        EQU     %10000000 ; Port pin position P2.7


    PB_0         EQU     %00000010 ; Port pin position P1.1
    PB_1         EQU     %00000100 ; Port pin position P1.2   
    PB_2         EQU     %00010000 ; Port pin position P1.4   
    PB_3         EQU     %00100000 ; Port pin position P1.5
    PB_LPBD      EQU     %00001000 ; Port pin position P1.3 (on LaunchPad bd)



    SEG_PORT         EQU     P2OUT
    PB_PORT          EQU     P1IN

    ZERO            EQU     %00111111
    ONE             EQU     %00000110
    TWO             EQU     %01011011
    THREE           EQU     %01001111
    FOUR            EQU     %01100110
    FIVE            EQU     %01101101
    SIX             EQU     %01111100
    SEVEN           EQU     %00000111
    EIGHT           EQU     %01111111
    NINE            EQU     %01100111
    Letter_A        EQU     %01110111
    Letter_B        EQU     %01111100
    Letter_C        EQU     %00111001
    Letter_D        EQU     %01011110
    Letter_E        EQU     %01111001
    Letter_F        EQU     %01110001


    ;-------------------------------------------------------------------------------
    ; Definition of Variables
    ;-------------------------------------------------------------------------------

                    ORG   0200h     ; beginning of RAM space (necessary statement)

    ; no variables used in this simple example

    ;-------------------------------------------------------------------------------
                ORG     0C000h                  ; Program Reset (prog memory start)
                                                ; this is Program memory start
                                                ; address for MSP430G2553 (16K)
    ;-------------------------------------------------------------------------------
    RESET       mov.w   #0400h,SP        ; Initialize stackpointer(to end of RAM +1)
                                         ; RAM is 512 bytes, last position is 3FFh
                                         
    StopWDT     mov.w   #WDTPW+WDTHOLD,&WDTCTL  ; Stop WDT

    SetupP2     ;;;mov.b   #0FFh, &P1DIR  ; all as outputs          
               mov.b   #0FFh, &P2DIR ; all as outputs to drive 7-seg LED
                                                                
               bic.b    #0C0h, &P2SEL   ; Clears the P2SEL bits so that
                                            ; P2.6 and P2.7 function as GPIO pins
                                            
               mov.b    #0BEh, &P1REN    ;turn on the internal resistor for PB's
               mov.b    #0BEh, &P1OUT    ; set the resistors to Pullup mode                                        
              
               
               ; turn off all the segments
               clr.b  &SEG_PORT
              
               
    DisplayTop   

               mov.b #ONE, &SEG_PORT  ; crude approach

               call #Delay_Long
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long           
               
               mov.b #TWO, &SEG_PORT
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long            
               
               mov.b #THREE, &SEG_PORT
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long            
               
               mov.b #FOUR, &SEG_PORT
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long            
               
               mov.b #FIVE, &SEG_PORT
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long            
               
               mov.b #SIX, &SEG_PORT
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long            
               
               mov.b #SEVEN, &SEG_PORT
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long           
               
               mov.b #EIGHT, &SEG_PORT
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long  
               
               mov.b #NINE, &SEG_PORT
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long
               
               mov.b #Letter_A, &SEG_PORT
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long
               
               mov.b #Letter_B, &SEG_PORT
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long
               
               mov.b #Letter_C, &SEG_PORT
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long
              
               mov.b #Letter_D, &SEG_PORT
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long  
               
               mov.b #Letter_E, &SEG_PORT
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long
              
               mov.b #Letter_F, &SEG_PORT
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long
               call #Delay_Long  
               
               
               
               
               ; turn off all the segments
               clr.b  &SEG_PORT                     
               
    ReadPort1 ; will test for single button press but not combinations of buttons
                ; note buttons are in positions: 10BB1BB0
               ;The following comments are in the form (Button 1-4)
    Part1           
              ;(Bit 1)
               ;(HLLL)
               cmp.b # 0BCh, &P1IN    
               jne   Part2
               jeq
    Part2      cmp.b # 0BAh, &P1IN
               jne  Case_ONE
               cmp.b # 0AEh, &P1IN
               jne   Case_THREE
               cmp.b # 09Eh, &P1IN
              
               ;(LHLL)                       
              ; cmp.b # 0BAh, &P1IN    
               ;jeq   Case_TWO
               ;;(HHLL)
               
               ;jeq  Case_THREE
               ;(LLHL)
              ; cmp.b # 0AEh, &P1IN
              ; jeq   Case_FOUR
               ;(LLLH)
               ;cmp.b # 09Eh, &P1IN
               ;jeq   Case_EIGHT                   

               ;(LLLL)
               ;jmp Case_ZERO  ; no match  (no single button is pressed at this time)




    ;Cases to make letters  and numbers
    ;-------------------------------------------------------------------------------
    Case_ZERO         
               
               mov.b #ZERO, &SEG_PORT
               jmp Done           


    Case_ONE          
               
               mov.b #ONE, &SEG_PORT
               jmp Done
               
    Case_TWO          
               
               mov.b #TWO, &SEG_PORT
               jmp Done
              
    Case_THREE mov.b #THREE, &SEG_PORT
               jmp Done
     
     
              
    Case_FOUR
               mov.b #FOUR, &SEG_PORT
               jmp Done

    Case_FIVE
               mov.b #FIVE, &SEG_PORT
               jmp Done
               
    Case_SIX
               mov.b #SIX, &SEG_PORT
               jmp Done
               
    Case_SEVEN
               mov.b #SEVEN, &SEG_PORT
               jmp Done

    Case_EIGHT
               mov.b #EIGHT, &SEG_PORT
               jmp Done
               
    Case_NINE
               mov.b #NINE, &SEG_PORT
               jmp Done
               
    Case_A
               mov.b #Letter_A, &SEG_PORT
               jmp Done   

    Case_B
               mov.b #Letter_B, &SEG_PORT
               jmp Done

    Case_C     mov.b #Letter_C, &SEG_PORT
               jmp Done           

    Case_D     mov.b #Letter_D, &SEG_PORT
               jmp Done
              
    Case_E     mov.b #Letter_E, &SEG_PORT
               jmp Done

    Case_F     mov.b #Letter_F, &SEG_PORT
               jmp Done
    ;-------------------------------------------------------------------------------     
               
    Done:      call #Delay_Long

               ; turn off all the segments to clear results of last PB press
               clr.b  &SEG_PORT
               ; Go back to top
            
               jmp ReadPort1
          


    ;-------------------------------------------------------------------------------
    ;           End of main code
    ;-------------------------------------------------------------------------------                                            
                                               
    ;-------------------------------------------------------------------------------
    ;           Subroutines
    ;-------------------------------------------------------------------------------


    ;-------------------------------------------------------------------------------
    ; Delay_Long
    ;  passed in - nothing
    ;  returned - nothing
    ;  accomplishes - long delay
    ;  uses: R15
    ;-------------------------------------------------------------------------------
    Delay_Long
        push R15     ; save R15 since we use it here
    DelayTopL
        mov #LONG_DELAY, R15     ;load loop counter (R15) with Long Delay constant
    Loop1Long
        dec R15                     ; decrement loop counter
        jnz Loop1Long               ; Zero yet?, no decrement again

        pop R15     ; restore R15 before returning
        ret         ; return
    ;-------------------------------------------------------------------------------
    ;  end of Delay_Long
    ;-------------------------------------------------------------------------------

    ;-------------------------------------------------------------------------------
    ;           End of all Subroutines
    ;-------------------------------------------------------------------------------

    ;-------------------------------------------------------------------------------
    ;           Interrupt Vectors
    ;-------------------------------------------------------------------------------

                ORG     0FFFEh                  ; MSP430 RESET Vector
                DW      RESET                   ; establishes the label RESET as
                                                ; the starting point
                END                             ; END of all code for this program
    ;-------------------------------------------------------------------------------
    ;-------------------------------------------------------------------------------
     

×
×
  • Create New...