Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Zmiana w oryginalnym programie

fantasta 19 May 2005 23:24 3897 42
IGE-XAO
  • #31
    McRancor
    VIP Meritorious for electroda.pl
    Zależy jakiego kompilatora, nie miej nie jest to takie proste jakby mogło się wydawać, mój kompilator raisonance marudził strasznie przy próbie kompilacji, sporo trzeba pozmieniać nazw, dodać sporo deklaracji itp. Przyznam się że jak zobaczyłem ile tego jest to odeszła mi chęć na sprawdzanie tego co tam wyżej nabazgrałem
  • IGE-XAO
  • #32
    mipix
    Level 35  
    Ojoj mamuniu 8O , jak wrzuciłem to do kompilacji to lista błędów była dłuższa niż cały program, ja wysiadam w tym miejscu :sm1:
    i pozostanę przy pierwszej myśli, żeby napisać program od nowa.
    Dziękuję za uwagę. :roll:

    załączam zmodyfikowany kod, może ktoś będzie miał tyle cierpliwości i dopisze brakujące linie definicji zmiennych
    kod:
    Code:


     
                    ajmp    ROM_D
     ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
                     .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
     ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
     
     timint0:                                ; Timer interrupt 0 (TIM0)
                     ajmp    ROM_2A
     ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

     ROM_D:                                  ; CODE XREF: ROM:0000j
                    mov     SP, #INTMEM_35
                    mov     R0, #0x7F ; ''

     ROM_12:                                 ; CODE XREF: ROM:0014j
                    mov     @R0, #0
                    djnz    R0, ROM_12
                    mov     TMOD, #1        ; Timer Mode
                    setb    TCON.4          ; TCON.4 - TIMER 0 ON/OFF CONTROL
                    setb    IE.1            ; Interrupt Enable
                    setb    IE.7            ; Interrupt Enable
                    mov     INTMEM_31, #0
                    mov     INTMEM_32, #0
     
     ROM_25:                                 ; CODE XREF: ROM:0028j
                     mov     PCON, #1        ; Power Control
                    sjmp    ROM_25
     ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

     ROM_2A:                                 ; CODE XREF: ROM:000Bj
                     push    PSW
                     push    ACC
                     clr     A
                     xch     A, TL0          ; Timer0 - Low Byte
                     add     A, #0x95 ; 'Ľ'
                     xch     A, TH0          ; Timer0 - High Byte
                     addc    A, #0xFD ; 'ř'
                     xch     A, TH0          ; Timer0 - High Byte
                     mov     TL0, A          ; Timer0 - Low Byte
                     clr     A
                     mov     C, P3.7
    ;------------------------------
    PUSH A
    mov A,C
    push R1
    PUSH R2
    jb nie_ma_imp

    jest_imp:

    ;petla opozienia:1ms
    PETLA: MOV R2,#1
    OPOZ: MOV R1,#250
    DJNZ R1,$
    DJNZ R2,OPOZ

    jnb jest_imp

    nie_ma_imp:

    POP R2
    POP R1
    POP A
    ;-------------------------------
                     rlc     A
                     mov     C, INTMEM_20.1
                     rlc     A
                     jnb     PSW.0, ROM_57
                     cpl     INTMEM_20.1
                     jb      INTMEM_20.1, ROM_57
                     mov     A, INTMEM_31
                     add     A, #1
                     da      A
                     mov     INTMEM_31, A
                     clr     A
                     addc    A, INTMEM_32
                     da      A
                     mov     INTMEM_32, A
     
     ROM_57:                                 ; CODE XREF: ROM:0042j
                                             ; ROM:0047j
                    clr     A
                    mov     C, P3.4
                    rlc     A
                    mov     C, INTMEM_20.2
                    rlc     A
                    jnb     PSW.0, ROM_74
                    cpl     INTMEM_20.2
                    jb      INTMEM_20.2, ROM_74
                    mov     A, INTMEM_31
                    add     A, #0x99 ; 'Ö'
                    da      A
                    mov     INTMEM_31, A
                    mov     A, #0x99 ; 'Ö'
                    addc    A, INTMEM_32
                    da      A
                    mov     INTMEM_32, A
      ROM_74:                                 ; CODE XREF: ROM:005Ej
                                              ; ROM:0063j
                     mov     A, INTMEM_32
                     mov     INTMEM_34, A
                     add     A, #0xF0 ; '­'
                     jc      ROM_84
                     add     A, #0xF
                     jnc     ROM_82
                     mov     A, #0xF0 ; '­'
     
     ROM_82:                                 ; CODE XREF: ROM:007Ej
                     orl     INTMEM_34, A
     
     ROM_84:                                 ; CODE XREF: ROM:007Aj
                     mov     A, INTMEM_31
                     jc      ROM_8E
                     add     A, #0xF0 ; '­'
                     jnc     ROM_8E
                     add     A, #0x10
     
     ROM_8E:                                 ; CODE XREF: ROM:0086j
                                            ; ROM:008Aj
                     mov     INTMEM_33, A
                     inc     INTMEM_21
                     jnb     INTMEM_21.3, ROM_BC
                     clr     INTMEM_21.3
                     inc     INTMEM_30
                     acall   ROM_CC
                     cpl     A
                     orl     P3, #0xF
                     mov     P1, A
                     acall   ROM_C1
                     anl     P3, A
                     mov     A, #0xFF
                     mov     C, P3.5
                     rlc     A
                     cpl     A
                     xch     A, INTMEM_35
                     xrl     A, INTMEM_35
                     anl     A, INTMEM_35
                     jnb     ACC.0, ROM_BC
                     mov     INTMEM_31, #0
                     mov     INTMEM_32, #0
                     clr     INTMEM_20.0
     
     ROM_BC:                                 ; CODE XREF: ROM:0092j
                                             ; ROM:00B1j
                     pop     ACC
                     pop     PSW
                     reti
     
     ; --------------- S U B R O U T I N E ---------------------------------------
     
     
     ROM_C1:                                 ; CODE XREF: ROM:00A1p
                     mov     A, INTMEM_30
                     anl     A, #3
                     inc     A
                     movc    A, @A+PC
                     ret
     ; End of function ROM_C1
     
     ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
                     .byte 0xFE, 0xFD, 0xFB, 0xF7
     
     ; --------------- S U B R O U T I N E ---------------------------------------
     
     
     ROM_CC:                                 ; CODE XREF: ROM:0099p
                     mov     A, INTMEM_30
                     anl     A, #3
                     jb      INTMEM_20.0, ROM_F4
                     clr     C
                     rrc     A
                     mov     PSW.5, C        ; PSW.5 - FLAG 0
                     add     A, #0x33 ; '3'
                     mov     R0, A
                     mov     A, @R0
                     jnb     PSW.5, ROM_DF   ; PSW.5 - FLAG 0
                     swap    A
     
     ROM_DF:                                 ; CODE XREF: ROM_CC+Fj
                     anl     A, #0xF
                     inc     A
                     movc    A, @A+PC
                     ret
     ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
                     .byte 0xEE, 0x88, 0xB6, 0xBC, 0xD8, 0x7C, 0x7E, 0xA8, 0xFE
                     .byte 0xFC, 0, 0, 0, 0, 0, 0
     ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
     
     ROM_F4:                                 ; CODE XREF: ROM_CC+4j
                     inc     A
                     movc    A, @A+PC
                     ret
    ; End of function ROM_CC
     
     ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
                     .byte 0x46, 0x46, 0xCE, 0x72, 0, 0, 2, 0, 0xD
  • IGE-XAO
  • #33
    McRancor
    VIP Meritorious for electroda.pl
    No w sumie nikt nie mówił że disasembleracja jest odwracalna, a przynajmniej przy niewielkim nakładzie pracy ;)
  • #34
    LordBlick
    VIP Meritorious for electroda.pl
    Zawsze uważałem, że szkoda zawracać sobie gitarę disaemblacją, bo to strata czasu.
    1. Trzeba rozgryźć czyjś tok rozumowania.
    2. Trzeba się namordować, aby poprawić niekompatybilny z kompilatorem kod.
    3. Trudno się wprowadza zmiany w nie własnym kodzie, tak aby wszystko grało.

    Za to napisanie programu od nowa, zwłaszcza w tym zagadnieniu to nie bedzie zbytnia trudność, podstwowe procedurki to wyświetlanie i liczenie, ew. zerowanie licznika. Myślę, że dla AVR w asemblerze dla wprawnego programisty ekspresowe napisanie programu zajęłoby może z 6 godzin, mając pod ręką jeden z układów do testowania... ;)
    Pozdrawiam, Daniel
  • #35
    McRancor
    VIP Meritorious for electroda.pl
    Myśle że róźnica w 2051 a AVR jak już się pisze w asemblerze to kwestia tylko zmiany pewnych nawyków.

    Inny problem, czy znajdzie się ktoś kto napisze taki program za free? Innymi słowy autorze, musisz ten problem ugryźć inaczej ;)
  • #36
    mipix
    Level 35  
    Zgadzam sie z McRancor. to co u było wcześniej pisane , to dobre rady, które miały szanse powodzenia pod pewnymi warunkami.

    Najprościej będzie udostępnić jeden z tych liczników jakiemuś programiście na miejscu (Gdynia) jak jest sprytny to w kilka godzin to zrobi od podstaw.
    Chyba , że ktoś się skusi na zrobienie tego na odległość, tu na forum. Poczekamy zobaczymy (może mi odbije ;) )
  • #37
    McRancor
    VIP Meritorious for electroda.pl
    mipix wrote:
    (może mi odbije ;) )

    Albo się napiję! ;)
    Tylko wtedy licznik będzie średnio działał,
    wydaj mi się że w Gdyni jest co najmniej jeden bascomowiec, który skutecznie zapcha pamięć i ram procesora mniej lub bardziej tandetnym kodem.

    Bascom Rulessss!

    ;)
  • #38
    fantasta
    Level 29  
    Chyba ze ktos z was wystawia faktury ale nie wiem czy odwazylbym sie podejsc z tym tematem do szefa ;) Bo kupil mi ksiazke o programowaniu 8051 i zestaw dydaktyczny :P

    Ehhhhhhhhh...A mialo byc tak pieknie :(
  • #39
    Tdv
    Level 34  
    mipix wrote:
    Ojoj mamuniu 8O , jak wrzuciłem to do kompilacji to lista błędów była dłuższa niż cały program, ja wysiadam w tym miejscu :sm1:
    i pozostanę przy pierwszej myśli, żeby napisać program od nowa.
    Dziękuję za uwagę. :roll:

    załączam zmodyfikowany kod, może ktoś będzie miał tyle cierpliwości i dopisze brakujące linie definicji zmiennych
    kod:
    Code:


     
                    ajmp    ROM_D
     ; ???????????????????????????????????????????????????????????????????????????
                     .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
     ; ???????????????????????????????????????????????????????????????????????????
     
     timint0:                                ; Timer interrupt 0 (TIM0)
                     ajmp    ROM_2A
     ; ???????????????????????????????????????????????????????????????????????????

     ROM_D:                                  ; CODE XREF: ROM:0000j
                    mov     SP, #INTMEM_35
                    mov     R0, #0x7F ; ''

     ROM_12:                                 ; CODE XREF: ROM:0014j
                    mov     @R0, #0
                    djnz    R0, ROM_12
                    mov     TMOD, #1        ; Timer Mode
                    setb    TCON.4          ; TCON.4 - TIMER 0 ON/OFF CONTROL
                    setb    IE.1            ; Interrupt Enable
                    setb    IE.7            ; Interrupt Enable
                    mov     INTMEM_31, #0
                    mov     INTMEM_32, #0
     
     ROM_25:                                 ; CODE XREF: ROM:0028j
                     mov     PCON, #1        ; Power Control
                    sjmp    ROM_25
     ; ???????????????????????????????????????????????????????????????????????????

     ROM_2A:                                 ; CODE XREF: ROM:000Bj
                     push    PSW
                     push    ACC
                     clr     A
                     xch     A, TL0          ; Timer0 - Low Byte
                     add     A, #0x95 ; 'Ľ'
                     xch     A, TH0          ; Timer0 - High Byte
                     addc    A, #0xFD ; 'ř'
                     xch     A, TH0          ; Timer0 - High Byte
                     mov     TL0, A          ; Timer0 - Low Byte
                     clr     A
                     mov     C, P3.7
    ;------------------------------
    PUSH A
    mov A,C
    push R1
    PUSH R2
    jb nie_ma_imp

    jest_imp:

    ;petla opozienia:1ms
    PETLA: MOV R2,#1
    OPOZ: MOV R1,#250
    DJNZ R1,$
    DJNZ R2,OPOZ

    jnb jest_imp

    nie_ma_imp:

    POP R2
    POP R1
    POP A
    ;-------------------------------
                     rlc     A
                     mov     C, INTMEM_20.1
                     rlc     A
                     jnb     PSW.0, ROM_57
                     cpl     INTMEM_20.1
                     jb      INTMEM_20.1, ROM_57
                     mov     A, INTMEM_31
                     add     A, #1
                     da      A
                     mov     INTMEM_31, A
                     clr     A
                     addc    A, INTMEM_32
                     da      A
                     mov     INTMEM_32, A
     
     ROM_57:                                 ; CODE XREF: ROM:0042j
                                             ; ROM:0047j
                    clr     A
                    mov     C, P3.4
                    rlc     A
                    mov     C, INTMEM_20.2
                    rlc     A
                    jnb     PSW.0, ROM_74
                    cpl     INTMEM_20.2
                    jb      INTMEM_20.2, ROM_74
                    mov     A, INTMEM_31
                    add     A, #0x99 ; 'Ö'
                    da      A
                    mov     INTMEM_31, A
                    mov     A, #0x99 ; 'Ö'
                    addc    A, INTMEM_32
                    da      A
                    mov     INTMEM_32, A
      ROM_74:                                 ; CODE XREF: ROM:005Ej
                                              ; ROM:0063j
                     mov     A, INTMEM_32
                     mov     INTMEM_34, A
                     add     A, #0xF0 ; '­'
                     jc      ROM_84
                     add     A, #0xF
                     jnc     ROM_82
                     mov     A, #0xF0 ; '­'
     
     ROM_82:                                 ; CODE XREF: ROM:007Ej
                     orl     INTMEM_34, A
     
     ROM_84:                                 ; CODE XREF: ROM:007Aj
                     mov     A, INTMEM_31
                     jc      ROM_8E
                     add     A, #0xF0 ; '­'
                     jnc     ROM_8E
                     add     A, #0x10
     
     ROM_8E:                                 ; CODE XREF: ROM:0086j
                                            ; ROM:008Aj
                     mov     INTMEM_33, A
                     inc     INTMEM_21
                     jnb     INTMEM_21.3, ROM_BC
                     clr     INTMEM_21.3
                     inc     INTMEM_30
                     acall   ROM_CC
                     cpl     A
                     orl     P3, #0xF
                     mov     P1, A
                     acall   ROM_C1
                     anl     P3, A
                     mov     A, #0xFF
                     mov     C, P3.5
                     rlc     A
                     cpl     A
                     xch     A, INTMEM_35
                     xrl     A, INTMEM_35
                     anl     A, INTMEM_35
                     jnb     ACC.0, ROM_BC
                     mov     INTMEM_31, #0
                     mov     INTMEM_32, #0
                     clr     INTMEM_20.0
     
     ROM_BC:                                 ; CODE XREF: ROM:0092j
                                             ; ROM:00B1j
                     pop     ACC
                     pop     PSW
                     reti
     
     ; --------------- S U B R O U T I N E ---------------------------------------
     
     
     ROM_C1:                                 ; CODE XREF: ROM:00A1p
                     mov     A, INTMEM_30
                     anl     A, #3
                     inc     A
                     movc    A, @A+PC
                     ret
     ; End of function ROM_C1
     
     ; ???????????????????????????????????????????????????????????????????????????
                     .byte 0xFE, 0xFD, 0xFB, 0xF7
     
     ; --------------- S U B R O U T I N E ---------------------------------------
     
     
     ROM_CC:                                 ; CODE XREF: ROM:0099p
                     mov     A, INTMEM_30
                     anl     A, #3
                     jb      INTMEM_20.0, ROM_F4
                     clr     C
                     rrc     A
                     mov     PSW.5, C        ; PSW.5 - FLAG 0
                     add     A, #0x33 ; '3'
                     mov     R0, A
                     mov     A, @R0
                     jnb     PSW.5, ROM_DF   ; PSW.5 - FLAG 0
                     swap    A
     
     ROM_DF:                                 ; CODE XREF: ROM_CC+Fj
                     anl     A, #0xF
                     inc     A
                     movc    A, @A+PC
                     ret
     ; ???????????????????????????????????????????????????????????????????????????
                     .byte 0xEE, 0x88, 0xB6, 0xBC, 0xD8, 0x7C, 0x7E, 0xA8, 0xFE
                     .byte 0xFC, 0, 0, 0, 0, 0, 0
     ; ???????????????????????????????????????????????????????????????????????????
     
     ROM_F4:                                 ; CODE XREF: ROM_CC+4j
                     inc     A
                     movc    A, @A+PC
                     ret
    ; End of function ROM_CC
     
     ; ???????????????????????????????????????????????????????????????????????????
                     .byte 0x46, 0x46, 0xCE, 0x72, 0, 0, 2, 0, 0xD


    To nie ma prawa działac dobrze. Człowieku, masz przerwanie tajmera co 620us, a ty w nim wstawiasz opóźnienie 1ms... Jednym słowem program będzie praktycznie stał na tej pętli.
    Wstawianie tu opóźnień nie ma najmniejszych szans powodzenia.
  • #40
    mipix
    Level 35  
    Kolego Tdv: pewnie , że będzie stałw pętli, ale tylko gdy dostanie impuls, Gdy impulsu nie ma , to pętla jest pomijana. Problemem tego licznika jest właśnie jego szybkość, jest zbyt duża. Nie liczyłem tego (pod kątem czasu) to miało być później dostrojone do potrzeb indywidualnych liczników (przekaźników). Ta pętla już z założenia ma zatrzymać progam - taka była moja koncepcja(patrz wcześniejszy post).
    Ale i tak jestem za napisaniem tego rogramu od nowa, bo niewiadomo czy komuś się to chce poprawiać. To jak z łataniem dziór w samochodzie, jedną się naprawi a druga wyjdzie obok.
  • Helpful post
    #41
    jaglarz
    Level 23  
    Jaki stan logiczny ma być zliczany? 0 czy 1 ?
    Czy problem jest jeszcze aktualny czy już rozwiązany?
    Ile masz czasu na rozwiązanie tego?
    Napisanie od nowa nie stanowiłoby problemu, ale czy masz czas czekać?
    Na swoich stronach mam podobny licznik, ale jak rozumiem nie masz ochoty robić nowego, tylko zmodyfikować posiadane (30 sztuk ?, wszystkie trzeba poprawiać)?

    Piszesz że kondensator 100nF nie pomógł?? W mojej konstrukcji pomogło. Oczywiście była też pętla opóźniająca, aby pominąć niepożądane impulsy.




    www.jaglarz.com
    Marek Jaglarz
  • #42
    fantasta
    Level 29  
    Jak widac ze schematu wejscie in zwiera do portu P3.7 mase wiec stan 0.
    Temat jak najbardziej jest aktualny. No tworzenie nowych licznikow raczej mija sie z celem jest ich troche za duzo :/
    A czas mam. Nie jestem jakos obciazony uciekajacym czasem.
  • #43
    fantasta
    Level 29  
    Wiec od dzis uwazam temat za zamkniety.
    Jaglarz wykonal bardzo solidna robote i napisal nowy program. Dziala bez zarzutu i juz jestem zadowolony bo o jeden problem z glowy.

    Dzieki bardzo.