Quantcast

Maximum PC

It is currently Thu Apr 24, 2014 10:23 am

All times are UTC - 8 hours




Post new topic Reply to topic  [ 1 post ] 
Author Message
 Post subject: Problem with some assembly code
PostPosted: Thu Apr 03, 2008 8:48 pm 
Team Member
Team Member

Joined: Mon Jul 25, 2005 4:12 pm
Posts: 1273
Location: AL
Trying to finish up a homework assignment. I have no idea why my interrupt isn't working. The simulator gets to the "wai" command and pauses like it should, but nothing happens when I hit a button on my keypad.

What it should do:

http://www.eng.auburn.edu/~sylee/ee2220/hw08S_9.pdf

What my code looks like so far:

Code:

;*****************************************************************
;* Stephan Henning                                               *
;* April 4, 2008                                                 *
;* Elec 2220                                                     *
;* Computer Systems                                              *
;* HW9                                                           *
;*                                                               *
;*                                                               *
;*****************************************************************

; export symbols
            XDEF Entry            ; export 'Entry' symbol
            ABSENTRY Entry        ; for absolute assembly: mark this as application entry point

; include derivative specific macros
            ;INCLUDE 'mc9s12c32.inc'

ROMStart    EQU  $4000  ; absolute address to place my code/constant data
RAMStart    EQU  $0800
TSCR1       EQU  $0046
TFLG2       EQU  $004F
NTOFS       EQU   122
PORTA       EQU  $0000  ; port for led
PORTB       EQU  $0001  ; port for button columns
PTAD        EQU  $0270  ; port for button rows
DDRA        EQU  $0002
DDRB        EQU  $0003
DDRAD       EQU  $0272
INTCR       EQU  $001E
IRQEN       EQU  %01000000

; variable/data section

            ORG RAMStart
           
leds    ds.b    1    ; define leds to 1 byte
st1     ds.b    1    ; extras if needed
st2     ds.b    1
mode    ds.b    1    ; mem for storing mode
step    ds.b    1    ; mem for storing iteration step.
mask    dc.b    $FE, $FD, $FB, $F7, $EF

           
; Insert here your data definition.



; code section
            ORG   ROMStart
Entry:
           
            ;ldaa #%10000001          ;load aa with initial condition for leds
            ;staa leds                ;store initial conidtion to leds
           
            movb #%10000001, leds     ;minimized code, same as above
           
           
            lds  #$1000              ; initialize stack
            movb #$FF,DDRB           ; port b output
            movb #$00,DDRAD         ; port e input
            movb #$FF,DDRA           ; port a output
           
            movb leds,PORTA           ; send value to leds
            bset INTCR, IRQEN
            cli
           
       
start:
           
            wai
           
            bra start
           

;check_again:

            ;ldaa PORTB
            ;bita #%00000011
            ;lbeq  check_again
            ;bita #%00000001
            ;lbeq  loop1
            ;bita #%00000010
            ;lbeq  loop2
            ;lbra  check_again
           
             
         
loop1:     

            ldaa  #$01               ; load a mode 1
            ldab  #$04
loop1_1:
            pshb
            psha
            jsr   shift              ; jump to shift subroutine
           
            pula
            pulb
           
            movb leds,PORTA           ; send value to led
           
            jsr   one_sec_delay      ; lbranch to software delay
            dbne  b,loop1_1
           
            rts
           
           
           
loop2:     

            ldaa  #$00               ; load a mode 2
            ldab  #$06
loop2_1:         
            pshb
            psha
            jsr   shift              ; jump to shift subroutine
           
            pula
            pulb
           
            movb leds,PORTA           ; send value to led
           
            jsr   one_sec_delay      ; lbranch to software delay
            dbne  b,loop2_1
           
            rts                     
           
                                     
                     
           



one_sec_delay                         
         
            psha
            ldaa  #NTOFS
  ttloop:         
           
            movb  #$80 , TSCR1
            movb  #$80 , TFLG2
  tloop:    brclr TFLG2, #$80, tloop
            dbne  a, ttloop
            movb  #$00, TSCR1
            pula 
           
           
            rts





         

shift                                ; start shift subroutine
            tsta                     ; check a for mode
            bne   mode1
            lbra   mode2
           

mode1:                               ; lbranch for mode1

            ldaa  #$02
            sba
            blt   mode1_in
            lbra   mode1_out

            rts
           
mode2:                               ; lbranch for mode2
           
            ldaa  #$03
            sba
            blt   mode2_in
            lbra   mode2_out     
           
            rts
           
mode1_in:                           ; shifts mode1 led's in
         
           ldaa leds                ; load a with leds
           ldab leds                ; load b with leds
           
           anda #%11100000          ; remove unneeded values in a
           andb #%00011111          ; remove unneeded values in b
           
           lsra                     ;do the required shifts
           lslb
           lslb

           lbra store_return
           
         
           ;stab st2                 ;store to a temp mem location
           
           ;oraa st2                 ;or a with what we stores in st2
           
           ;staa leds                ;store a in leds   
           
           ;rts
           
           
mode1_out:                           ;shifts mode1 led's out

           ldaa leds                 ;load a with leds
           ldab leds                 ;load b with leds
           
           anda #%11100000           ;remove unneeded values in a
           andb #%00011111           ;remove unneeded values in b
           
           lsla                      ;do required shifts
           lsrb
           lsrb

         
           lbra store_return
         
           ;stab st2                  ;temp store b in mem
           
           ;oraa st2                  ;or a with b that we stored in mem
           
           ;staa leds                 ;store result into leds
           
           ;rts
           
           
mode2_in:

           ldaa leds                ; load a with leds
           ldab leds                ; load b with leds
           
           anda #%11110000          ; remove unneeded values in a
           andb #%00001111          ; remove unneeded values in b
           
           lsra                     ;do the required shifts
           lslb
           

         
           lbra store_return
         
           ;stab st2                 ;store to a temp mem location
           
           ;oraa st2                 ;or a with what we stores in st2
           
           ;staa leds                ;store a in leds   
           
           ;rts
           
           

mode2_out:

           
           ldaa leds                 ;load a with leds
           ldab leds                 ;load b with leds
           
           anda #%11110000           ;remove unneeded values in a
           andb #%00001111           ;remove unneeded values in b
           
           lsla                      ;do required shifts
           lsrb
           

           lbra store_return
           
           ;stab st2                  ;temp store b in mem
           
           ;oraa st2                  ;or a with b that we stored in mem
           
           ;staa leds                 ;store result into leds                     

           ;rts
           
store_return:

           stab st2                  ;temp store b in mem
           
           oraa st2                  ;or a with b that we stored in mem
           
           staa leds                 ;store result into leds                     

           rts           
                                   
         
 



         
         
keypad
       
            ldx   #mask
           
           
  checkcol1:
     
            movb  #%11111110, PORTB
            ldaa  PTAD
            bita  $FF
            lbeq   checkcol2
           
            bita  1,x+
            lbeq   butt0
            bita  1,x+
            lbeq   butt4
            bita  1,x+
            lbeq   butt8
            bita  1,x+
            lbeq   buttc
            bita  1,x+
            lbeq   buttleft
           
            lbra   done
           
           
  checkcol2:
 
            movb  #%11111101, PORTB
            ldaa  PTAD
            bita  $FF
            lbeq   checkcol3
           
            bita  1,x+
            lbeq   butt1
            bita  1,x+
            lbeq   butt5
            bita  1,x+
            lbeq   butt9
            bita  1,x+
            lbeq   buttd
            bita  1,x+
            lbeq   buttright
           
            lbra   done
           
           
  checkcol3:
           
            movb  #%11111011, PORTB         
            ldaa  PTAD
            bita  $FF
            lbeq   checkcol4
           
            bita  1,x+           
            lbeq   butt2
            bita  1,x+
            lbeq   butt6
            bita  1,x+
            lbeq   butta
            bita  1,x+
            lbeq   butte
            bita  1,x+
            lbeq   buttz
           
            lbra done
           
           
   checkcol4:
           
            movb  #%11110111, PORTB
            ldaa  PTAD
            bita  $FF
            lbeq   done
           
            bita  1,x+
            lbeq   butt3
            bita  1,x+
            lbeq   butt7
            bita  1,x+
            lbeq   buttb
            bita  1,x+
            lbeq   buttf
            bita  1,x+
            lbeq   buttblank
           
            lbra done
           
   butt0:
            lbra done
   butt1:
            jsr   loop1
            lbra done
   butt2:
            jsr   loop2
            lbra done
   butt3:
            lbra done
   butt4:
            lbra done
   butt5:
            lbra done
   butt6:
            lbra done
   butt7:
            lbra done
   butt8:
            lbra done
   butt9:
            lbra done
   butta:
            lbra done
   buttb:
            lbra done
   buttc:
            lbra done
   buttd:
            lbra done
   butte:
            lbra done
   buttf:
            lbra done
   buttleft:
            lbra done
   buttright:
            lbra done
   buttz:
            lbra done
   buttblank:
            lbra done
         

  done:

    rti
   
   



;**************************************************************
;*                 Interrupt Vectors                          *
;**************************************************************
            ORG   $FFFE
            DC.W  Entry           ; Reset Vector
            ORG   $FFF2
            dc.w  keypad          ; keypad interupt




Any ideas?


Top
  Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 1 post ] 

All times are UTC - 8 hours


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group