EASy68K  
It is currently Wed Jan 22, 2020 11:51 am

All times are UTC




Post new topic Reply to topic  [ 4 posts ] 
Author Message
PostPosted: Fri Apr 04, 2014 11:37 am 
Offline

Joined: Thu Apr 03, 2014 1:13 am
Posts: 2
i'm trying to use toggle switch to make interruptions like this:
-swicth1 to start chronometer if toggle is down and reset it if it's up like 00-00-00
-switch2 to stop chronometer if toggle is down and up to continue counting

i have already write the code below but it don't work.
Code:
DELAY    MACRO
    move.b  #23,d0          ;prepare l'exécution du macro
    move.l  #\1,d1          ;un retard de un centième de seconde accordé au calculateur lors du traitement du bit de poids faible de d1
    trap    #15             ;interruption logique
    ENDM


*-------------------------- PROGRAM START ---------------------------
    ORG    $1000  ;charge le programme à partir de l'adresse $1000

START
    * initialisation
    clr.w   centiemes
    move.b  #32,d0          ;prépare l'acces au matériel (hardware)
    move.b  #0,d1           ;j'affiche la fenètre de l'afficheur 7-segment
    trap    #15             ;interruption logique pour afficher la fenetre hardware
    move.b  #1,d1
    trap    #15             ;obtenir l'adresse des 7-segment affichés
    move.l  d1,a4           ;mettre cette adresse dans le registre d'adresse a4
    move.b  #2,d1
    trap    #15             ;obtenir l'adresse des LEDs
    move.l  d1,a3           ;mettre cette adresse dans a3
   
   
   
  ; Initialize IRQ vectors
    move.l  #initialIRQ,$64       ; IRQ1
    move.l  #stopIRQ,$68         ; IRQ2
    move.l  #repriseIRQ,$6C       ; IRQ3
    andi.w  #$00,SR                 ; put CPU in User mode
   
    move.b  #60,d0                  ; set mouse IRQ
    move.w  #$0101,d1               ; IRQ1 for mouse down
    trap    #15
    move.b  #60,d0                  ; set mouse IRQ
    move.w  #$0202,d1               ; IRQ2 for mouse up
    trap    #15
    move.b  #60,d0                  ; set mouse IRQ
    move.w  #$0304,d1               ; IRQ3 for mouse move
    trap    #15

 

       
     
  * IRQ handlers
 
initialIRQ
    movem.l d0-d7/a0-a4,-(a7)
    move.l  a4,a2
    bra AFFTIME
    move.b  #62,d0                  ; read mouse
    move.w  #$0103,d1                   ; mouse down state
    trap    #15
    bra loop
    movem.l (a7)+,d0-d7/a0-a4
    rte

stopIRQ
    movem.l d0-d7/a0-a4,-(a7)
    *bsr     heading
    move.b  #61,d0                  ; read mouse
    move.b  #1,d1                   ; mouse up state
    trap    #15
    *bsr     showMouseData
    movem.l (a7)+,d0-d7/a0-a4
    rte

repriseIRQ
    movem.l d0-d7/a0-a4,-(a7)
   * bsr     heading
    move.b  #61,d0                  ; read mouse
    move.b  #0,d1                   ; current mouse state
    trap    #15
    *bsr     showMouseData
    movem.l (a7)+,d0-d7/a0-a4
    rte
 
   
   
   
   
   



   
MISEAZERO
  move.l  a4,a2
  bra AFFTIME
 
loop
   
    move.l  a4,a2
    repeat
   
        add.l #1,d2
        move.l  d2,d1
       
        * D5 nous servira pour les minutes
       * D6 nous servira pour les heures
       * D7 nous servira pour les secondes
      
      
      
       *saugarde du temps totale en centieme de seconde dans d2 et d4
       move.l d1,d4
       move.l d1,d2
       
        *convertion du temps contenue dans d1.l en seconde et le mettre dans d7
        divu    #100,d1         ;convertir le temps en secondes
        andi.l  #$0000ffff,d1   ;se defaire de la partie à virgule du temps (en séconde) en effectuant un et logique qui mettra à zero tous les chiffres après la virgule
        divu    #60,d1          ;convertir le temps en minutes
        move.l  d1,d7
        move.l  #16,d0   
        lsr.l   d0,d7           d7 = seconds
       
        *convertion du temps contenue dans d1.l en minute et le mettre dans d5
        andi.l  #$0000ffff,d1   discard seconds from d1
        move.l  d1,d5           d5 = total minutes
       
        *convertion du temps contenue dans d1.l en heure et le mettre dans d6
        divu    #60,d1          ;convertir en heures
        move.l  d1,d6
       
        move.l  #16,d0
        lsr.l   d0,d6           minutes this hour to d6
        swap    d4              display centiemes on LEDs
        move.b  d4,(a3)
        DELAY    1              invocation du macro DELAY
    until.w d7 <ne> centiemes do  repète la boucle jusqu'à ce que tous les seconde ce soit écoulé

AFFTIME
* affichage des minutes en chiffre
    move.b d6,d0
    bsr    Hex2BCD
    move.b #0,d3                0 digit code
    if.b d0 <hi> #9 then.s      if minutes > 9
        move.b  d0,d3
        lsr.b   #4,d3           10's minute digit
    endi
    bsr     segment7
    move.b  d0,d3
    and.b   #$F,d3              1's minute digit
    bsr     segment7

* séparateurs après les minutes
    move.b  #11,d3              dash digit code
    bsr     segment7            display dash

*affichage des secondes en chiffre

    move.w  d7,d0
    bsr     Hex2BCD
    move.b  #0,d3               0 digit code
    if.b d0 <hi> #9 then.s
        move.b  d0,d3
        lsr.b   #4,d3           10's seconds digit
    endi
    bsr     segment7
    move.b  d0,d3
    and.b   #$F,d3              1's second digit
    bsr     segment7
   
    * séparateurs après les secondes
    move.b  #11,d3              dash digit code
    bsr     segment7            display dash
   
   
    *affichage des centiemes de seconde
   
    move.w  d2,centiemes          save centiemes
    move.w  d2,d0
    bsr     Hex2BCD
    move.b  #0,d3               0 digit code
    if.b d0 <hi> #9 then.s
        move.b  d0,d3
        lsr.b   #4,d3           10's seconds digit
    endi
    bsr     segment7
    move.b  d0,d3
    and.b   #$F,d3              1's second digit
    bsr     segment7


    bra     loop                loop forever
 
    * Halt the Simulator
    SIMHALT


*-----------------------------------------------------------
*         A
*       -----
*     F|     |B
*      |  G  |
*       -----
*     E|     |C
*      |  D  |
*       -----   .H

* Bit Number  7 6 5 4 3 2 1 0
* Segment     H G F E D C B A
*ici je représente les différents segments de la forme d'un chiffre decimal sur 8 bit
*ainsi pour le chiffre 3 par exemple les segments A,B,C,D,G seront actifs (bit à 1 pour actif et 0 pour non actif)
*(donc la forme de 3 sera représenté en binaire par 01001111,soit $4F en hexadécimal);
* je vais stocker les constantes représentant les chiffres de 0 à 9 en affichage 7-segment dans une table digits:

digits:
    dc.b  $3F           digit 0
    dc.b  $06           digit 1
    dc.b  $5B           digit 2
    dc.b  $4F           digit 3
    dc.b  $66           digit 4
    dc.b  $6D           digit 5
    dc.b  $7D           digit 6
    dc.b  $07           digit 7
    dc.b  $7F           digit 8
    dc.b  $6F           digit 9
    dc.b  $00           digit off
    dc.b  $80           séparateur

    ds.w  0             force word boundary

*----------------------------------------------------------
*affichage d'un chiffre sur l'afficheur 7-segment
* Pre:  D3.B contains 1 digit to display
*       A2 points to 7-segment LED to use
* Post: A2 points to next 7-segment LED

segment7:
    movem.l d3/a0,-(a7)     ;empile successivement les registres d3 et a0 dans la zone du pointeur -(a7)
    lea     digits,a0       ;met l'adresse de l'aspect d'un chiffre dans a0 depuis la table d'étiquette digits:
    and.l   #$00ff,d3
    move.b  (a0,d3),(a2)    ;affiche le chiffre
    adda.l  #2,a2
    movem.l (a7)+,d3/a0     ;restauration des registres en désempilant d3 et a0
    rts


*-----------------------------------
* Convert 2 digit Hex to 2 digit BCD
* Pre:  D0.B 2 digit Hex
* Post: D0.B 2 digit BCD
Hex2BCD:
    movem.l d1,-(a7)        save registers
    clr     d1
    and.l   #$00FF,d0
    divu    #10,d0
    move.l  d0,d1
    asl.w   #4,d0           shift tens to proper location
    swap    d1              put units in proper location
    or.b    d1,d0           combine units with tens
    movem.l (a7)+,d1        restore registers
    rts
   

* variables
centiemes     ds.w    1

    END     START


so i need your helps. tank you advance


Top
 Profile  
 
PostPosted: Wed Apr 09, 2014 8:43 pm 
Offline
User avatar

Joined: Thu Dec 16, 2004 6:42 pm
Posts: 1115
Mouse IRQs do not work on the hardware panel. Instead of using IRQs, how about doing some simple polling on the switch state?

_________________
Prof. Kelly


Top
 Profile  
 
PostPosted: Thu Apr 10, 2014 10:40 am 
Offline

Joined: Thu Apr 03, 2014 1:13 am
Posts: 2
ok. can i get a chronometer code working on 7-segment display please.


Top
 Profile  
 
PostPosted: Sat Apr 12, 2014 2:11 pm 
Offline
User avatar

Joined: Thu Dec 16, 2004 6:42 pm
Posts: 1115
clockDigital in the EASy68K examples folder uses the 7-segment display.

_________________
Prof. Kelly


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

All times are UTC


Who is online

Users browsing this forum: No registered users and 15 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:  
cron
Powered by phpBB® Forum Software © phpBB Group