Proc to zase nefunguje - preruseni 2052

David Rudol rudol@post.cz
Sobota Prosinec 2 14:34:02 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.


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