atmel - JNZ

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
Aqarel
Příspěvky: 241
Registrován: 04 úno 2007, 00:00
Kontaktovat uživatele:

atmel - JNZ

#1 Příspěvek od Aqarel »

zdravím, mcu(89c2051) má za úkol zastavit motor po načítání 200 pulsů z inkrementálního snímače. V reálném programu bude těch pulsů mnohem více, proto jsou tu použity dva uměle vytvořené 16b registry, a to R6, R7 - žádaný počet pulsů, a R4,R7 - aktuální počet pulsů. Program nezastaví motor po načtení 200 pulsů, ale zjistil jsem když odstraním instrukci JNZ označenou v programu, pak po 200 pulsech zastaví motor. Zajímavé je, že podle simulace v AS51 by to mělo fungovat správně.

Kód: Vybrat vše

org 0
      jmp main
      
      org 03h
      jnb p3.0,plus
      cjne r4,#0,sem
      dec r4
      dec r5
      jmp test
   sem:   dec r4
      jmp test
   plus:   cjne r4,#0ffh,sem2
      inc r4
      inc r5
      jmp test
   sem2:   inc r4
          
   test:   MOV A,r7      ;porovnani horního bajtu 16b registru      
                  SUBB A,r5
      JNZ endNor                    ;[b]problémová instrukce[/b]
      MOV A,r6      ;porovnani dolniho bajtu 16b registru   
      SUBB A,r4
      JNZ endNor
      SETB P3.4                     ;vypnutí motoru
   endNor: reti
      
   
   main:   mov r4,#0
      mov r5,#0
      mov r6,#200
      mov r7,#0
                setb ex0
      setb it0
      setb ea
      clr P3.5                        ;směr otáčení motoru
      clr p3.4                        ;zapnuti motoru
   sem3:   jb p3.1,sem4                ;zbytek programu, informativní zobrazování
                                                           ;registru R4,R5
      mov a,r5
      cpl a
      mov p1,a
      jmp sem3
   sem4:   mov a,r4
      cpl a
      mov p1,a
      jmp sem3
      
      end
[/b]
Uživatelský avatar
Aqarel
Příspěvky: 241
Registrován: 04 úno 2007, 00:00
Kontaktovat uživatele:

#2 Příspěvek od Aqarel »

tak už jsem to vyřešil :) , měl jsem otočený směr čítání - nevěnoval směru moc pozornost, protože vím, že jsem ho včera opravoval a chodilo to, ale pak jsme to zas musel nejspíš přepsat
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“