Nezlomné Interrupty 2052

David Rudol rudol@post.cz
Sobota Prosinec 2 15:31:40 CET 2006


Dobrý den všem,
vzhledem k tomu, že MCU přestalo fungovat, tak nevím, kam se mám obrátit a proto píši zde. Před cca 2 měsíci jsem chtěl radu ohledně stopek na tisíciny na MCU , od té doby jsem pokročil - od PIC jsem přešel na 2052 - krásný a jednoduchý (obrazně) čip, ale mám problém s interrupty - po úvodním nastaveni očekávám, že se mi první pětice zobrazovačů s registry nastaví do "0" a na ostatních 2 pěticích budou svítit jen tečky (15 zobrazovačů v serii s 4094), děje se mi však podivnost - svítí jen tečky tam, kde mají a svítí mi jen osmička na prvním místě poslední pětice - nevím, kde mám chybu, po spuštění stopek mi jedou první 2 pětice - očekával jsem jen první a nevím, kde se mi registry plní.
Další problém mám  s ovládáním interruptů  INT0 a INT1  -  měly by přesouvat data  z  časovače a posléze pomocí NANDU zastavit  čítání -  nemám páru jak toho dosáhnout - jsem začátečník - prosím nekamenovat.


Prosím o pomoc.
                            Porki

Listing programu:




;;;;;;;;;;;;;;;;;;;; program casomira ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;; urceno pro procesory AT89C2052, AT89C4052 ;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;; pripojeni displaye pomoci 4094 shift registru ;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;Krystal na 16 MHz;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;; David Rudol 2006 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;deklaracni cast ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$INCLUDE(LP2052.INC)

; Definice bitu
DIN    equ    P1.0          ;data input
STB    equ    P1.2          ;strobe
CLK    equ    P1.3          ;clock
disp equ P1.4         ;zapinani displeju - OE
TLST equ P3.0         ;tlacitko start
Tl_stopL equ P3.2     ;tlacitko stop levy terc - INT0
Tl_stopP equ P3.3     ; tlacitko stop pravy terc - INT1
int0 equ ie.0
int1 equ ie.2

; Definice promennych
LTis  equ 30H     ; Leve tisiciny
LDes  equ 31H     ; Leve setiny
LSet  equ 32H     ; Leve desetiny
LSec  equ 33H     ; Leve sekundy
LDesSec equ 34H   ; Leve desitkz sekund
PTis  equ 35H     ; Prave tisiciny
PDes  equ 36H     ; Prave setiny
PSet  equ 37H     ; Prave desetiny
PSec  equ 38H     ; Prave sekundy
PDesSec equ 39H   ; Prave desitkz sekund
Tis  equ 35H     ; Tisiciny
Seti  equ 36H     ; Setiny
Des  equ 37H     ; Desetiny
Sec  equ 38H     ; Sekundy
DesSec equ 39H   ; Desitky sekund

        ORG 0
        jmp    zacni               ; preskoceni preruseni
        org  03H
        jmp stopl        ; obsluha preruseni - levy terc - INT0
        org    0BH
        jmp    timeup            ; obsluha preruseni casovac 0 - nejvyssi
        org  13H
        jmp stopp         ; obsluha preruseni - pravy terc - INT1
      zacni: mov    IE,#00000000B      ; zakaze vsechna preruseni
      mov    RH0,#0c1H          ; nastaveni registru casovace 0
        mov    RL0,#80H            ; pro rezim s HW prednastavenim
        mov IPH,#00000010B   ; casovac 0 - nejvyssi preruseni
        mov    TMOD,#00000001B        ; nastavi casovac hardwareovy reload
        mov    r2,#00D              ; tisiciny
        mov    r3,#00D              ; setiny
        mov    r4,#00D              ; desetiny
         mov  r5,#00D         ; sekundy
         mov  r6,#00D         ; desitky sekund
         mov  Tis,#00D
         mov  Seti,#00D
         mov  Des,#00D
         mov  Sec,#00D
         mov  DesSec,#00D
         mov  LTis,#16D
         mov  LSet,#16D
         mov  LDes,#16D
         mov  LSec,#16D
         mov  LDesSec,#16D
         mov  PTis,#16D
         mov  PSet,#16D
         mov  PDes,#16D
         mov  PSec,#16D
         mov  PDesSec,#16D                 setb    f0
      MOV P1M0,#00000000B    ;P1.0 až P1.6 vystupy
        MOV P1M1,#11111111B    ;P1.0 až P1.6 vystupy
        MOV P3M0,#11110010B    ;P3.0 až P3.7 vstupy
        MOV P3M1,#00000000B    ;P3.0 až P3.7 vstupy
      
;zakladni poslani na displaye - 0 na 1. petici, na ostatni nic;;;;;;;;;;;;;;;;;            clr disp
     call Levy
     call Pravy
     call Horni
     setb disp
;;;;;;;;;; Cekeni na stisk tlacitka start ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
zacatek: jb TLST,zacatek      ; skace dokola, dokud neni stisknute
      ;;;;;;;;;; Spusti pocitani ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;             mov    IE,#10000111B          ; nastavi preruseni
      mov    TCON,#00010000B        ; spusti casovac

;;;;;;;;;; Odtud jen zobrazuje ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;      zobraz: clr disp
       call Levy
       call Pravy
       call Horni
       setb disp
       mov    r0,#255D
cyk:      djnz    r0,cyk
       jmp zobraz ; zpozdeni a jiz pouhe zobrazovani

;;;;;;;;;;;; funkce upravujici cas preruseni ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

timeup:
 push    acc
 push    b
 push    psw
   inc        R2                ; inkrementace tisícin
   cjne      R2,#10D,goout    ; jsou-li tisíciny mensi nez 10 , pak nedela nic a vyskoci
   mov        R2,#00D            ; jsou-li rovny 10, pak pokracuje
   inc        R3                  ; inkrementace desitek setin
   cjne      R3,#10D,goout    ; jsou-li desitky setin mensi nez 10 , pak nedela nic a vyskoci
   mov        R3,#00D          ; jsou-li rovny 10, pak pokracuje
   inc        R4                  ; inkrementace setin
   cjne    R4,#10D,goout ; jsou-li setiny mensi nez 10, nedela nic a vyskoci
   mov     R4,#00D       ; jdou-li rovny 10, pak pokracuje
   inc     R5            ; zvysi sekundy o 1
   cjne    R5,#10D,goout ; jsou-li sekundy mensi nez 10, nedela nic a vyskoci
   mov     R5,#00D       ; jdou-li rovny 10, pak pokracuje
   inc     R6            ; zvysi desitky sekund o 1
   cjne    R6,#10D,goout ; jsou-li desitky sekund mensi nez 6, nedela nic a vyskoci
   mov     R6,#00D       ; jdou-li rovny 6, pak pokracuje
goout:
 mov     a,R2
 mov     tis,a
 mov     a,R3
 mov     seti,a
 mov     a,R4
 mov     des,a
 mov     a,R5
 mov     sec,a
 mov     a,R6
 mov     dessec,a
 pop     psw
 pop     b
 pop     acc         reti

;;;;;;;;;;;; stop leveho terce ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
stopp:
     mov     a,Tis     ;prepise aktualni hodnoty do registru "prave" casti
     mov     PTis,a
     mov     a,seti
     mov     PSet,a
     mov     a,des
     mov     PDes,a
     mov     a,sec
     mov     PSec,a
     mov     a,dessec
     mov     PDesSec,a
     reti

;;;;;;;;;;;; stop praveho terce ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

stopl:
     mov     a,Tis        ;prepise aktualni hodnoty do registru "leve" casti
     mov     LTis,a
     mov     a,seti
     mov     LSet,a
     mov     a,des
     mov     LDes,a
     mov     a,sec
     mov     LSec,a
     mov     a,dessec
     mov     LDesSec,a
     reti
;;;;;;;;;;;; poslani do posuvnych registru ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;;;;;;;;;; prvni petice;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Horni: mov a,DesSec
      movc a,@a+dptr
      mov dptr,#tab
      mov R0,a
      call posli
      mov  a,Sec
      movc a,@a+dptr
      mov dptr,#tab
      xrl a,#10000000b   ; Prida desetinou tecku
      mov  R0,a
      call posli
      mov  a,Des
      movc a,@a+dptr
      mov dptr,#tab
      mov  R0,a
      call posli
      mov  a,Seti
      movc a,@a+dptr
      mov dptr,#tab
      mov  R0,a
      call posli
      mov  a,Tis
      movc a,@a+dptr
      mov dptr,#tab
      mov  R0,a
      call posli
      ret
Levy:  mov a,LDesSec
      movc a,@a+dptr
      mov dptr,#tab
      mov R0,a
      call posli
      mov  a,LSec
      movc a,@a+dptr
      mov dptr,#tab
      xrl a,#10000000b   ; Prida desetinou tecku
      mov  R0,a
      call posli
      mov  a,LDes
      movc a,@a+dptr
      mov dptr,#tab
      mov  R0,a
      call posli
      mov  a,LSet
      movc a,@a+dptr
      mov dptr,#tab
      mov  R0,a
      call posli
      mov  a,LTis
      movc a,@a+dptr
      mov dptr,#tab
      mov  R0,a
      call posli
      ret
Pravy: mov a,PDesSec
      movc a,@a+dptr
      mov dptr,#tab
      mov R0,a
      call posli
      mov  a,PSec
      movc a,@a+dptr
      mov dptr,#tab
      xrl a,#10000000b   ; Prida desetinou tecku
      mov  R0,a
      call posli
      mov  a,PDes
      movc a,@a+dptr
      mov dptr,#tab
      mov  R0,a
      call posli
      mov  a,PSet
      movc a,@a+dptr
      mov dptr,#tab
      mov  R0,a
      call posli
      mov  a,PTis
      movc a,@a+dptr
      mov dptr,#tab
      mov  R0,a
      call posli
      ret
posli: clr CLK            ;dat do 0
        clr STB            ;dat do 0
      call poslia        ;skok na poslia
        setb STB        ;dat do 1
        clr STB            ;dat do 0
        ret
       poslia: mov a,r0
   mov c,acc.6
   call clkpulz
   mov c,acc.5
   call clkpulz
   mov c,acc.0
   call clkpulz
   mov c,acc.1
   call clkpulz
   mov c,acc.4
   call clkpulz
   mov c,acc.3
   call clkpulz
   mov c,acc.2
   call clkpulz
   mov c,acc.7
   call clkpulz
   ret     clkpulz:mov DIN,c
         setb CLK
         clr CLK
         ret           tab:    db    11000000B    ;0
       db    11111001B    ;1
       db    10100100B    ;2
       db    10110000B    ;3
       db    10011001B    ;4
       db    10010010B    ;5
       db    10000010B    ;6
       db    11111000B    ;7
       db    10000000B    ;8
       db    10010000B    ;9
       db    10001000B    ;A
       db    10000011B    ;b
       db    10100111B    ;c
       db    10100001B    ;d
       db    10000110B    ;E
       db    10001110B    ;F
       db  11111111B ; nic
tabkon:                  
END 



Další informace o konferenci Hw-list