Teade

Collapse

Foorumi reeglid.

Foorumi reeglistik on uuendatud. Palume tutvuda ja arvesse võtta.
See more
See less

Bittide maskeerimine C keeles. Hi-tech PICC. Algteadmised.

Collapse
X
 
  • Filter
  • Kellaaeg
  • Show
Clear All
new posts

    Bittide maskeerimine C keeles. Hi-tech PICC. Algteadmised.

    Kuidas saab teha nii, et 8-bitises pordis on 3 väikseimat bitti varem määratud ja hilisema funktsiooniga saab muuta ainult kõrgemaid ka viimane jääks välja.
    N.
    #define MINUTES RB2 // minutes enable
    #define TENS RB1 // tens enable
    #define ONES RB0 // ones enable
    Edasi tuleb aga tabel, mis määrab suuremaid bitte ja ka viimane jääks välja
    0b00001000, //1 in BCD
    0b00010000, // 2 in BCD
    0b00011000, // 3 in BCD
    Kas tabelisse saab kirjutada taolist loogilist tehet ja kuidas see käiks?

    #2
    Vs: Bittide maskeerimine C keeles. Hi-tech PICC. Algteadmised.

    Saab kindlasti, aga kirjelduse järgi küll pihta ei saanud, mida täpsemalt.
    Muidu abiks ~ & | ^ >> ja << tehted.

    Comment


      #3
      Vs: Bittide maskeerimine C keeles. Hi-tech PICC. Algteadmised.

      pic-s saab teha bit ja byte operatsioone, C - keel tihti ei taha tunnistada bit käsklusi.
      bsf porta,0
      bcf muutuja,5 jne
      noh pole ju probleemi teha ka 3 rida järjest bit muutmise operatsiooni, kui sul vaja kolm bitti 8-st ainult muuta.

      bsf porta,0
      bsf porta,1
      bsf porta,2

      näiteks.

      clear_bit(portb, 0); //
      clear_bit(portb, 1); //
      clear_bit(portb, 4); //

      set_bit(portc, 5); //
      set_bit(portc, 7); //
      set_bit(portc, 0); //

      C-keele variandis sama asi.

      Noh C-keele meestele on omane teha kõigepealt muudetava vahesalvestus kuhugile purpose registrisse ja siis teha and selle seristri sisu ja uue väärtusega ja siis tulemus kirjutada originaal kohta üle.

      Comment


        #4
        Vs: Bittide maskeerimine C keeles. Hi-tech PICC. Algteadmised.

        Kui kirjutada C-s selline lõik
        Kood:
        int a,b,c;
        	b=0x7f;
        	c=0x8f;
        	a=(b&0x1c)|(c&0x73);
        
        	b=0x99;
        Siis translaator teeb PC-s sellise programmi.
        W32Dasm väljatrükk

        Kood:
        :00401675 C745DC7F000000          mov [ebp-24], 0000007F
        :0040167C C745D88F000000          mov [ebp-28], 0000008F
        :00401683 8B7DDC                  mov edi, dword ptr [ebp-24]
        :00401686 83E71C                  and edi, 0000001C
        :00401689 8B75D8                  mov esi, dword ptr [ebp-28]
        :0040168C 83E673                  and esi, 00000073
        :0040168F 09F7                    or edi, esi
        :00401691 897DD4                  mov dword ptr [ebp-2C], edi
        :00401694 C745DC99000000          mov [ebp-24], 00000099
        PICi puhul transleerub täpselt samasugune programmilõik
        selliseks masinkoodiks. Nii palju käske oli vaja seepärast et
        mul on see näide transleeritud PIC18F4550-le ehk 8 bitisele masinale ja defineeritud on 16 bitine muutuja.
        Aga selle pika koodi tegi translaator. Mina ei pidanud muretsema.

        Kood:
        519:               	int a,b,c;
        520:               	b=0x7f;
          2BFC    0E7F     MOVLW 0x7f
          2BFE    6EF3     MOVWF 0xff3, ACCESS
          2C00    0E02     MOVLW 0x2
          2C02    CFF3     MOVFF 0xff3, 0xfdb
          2C04    FFDB     NOP
          2C06    0E03     MOVLW 0x3
          2C08    6ADB     CLRF 0xfdb, ACCESS
        521:               	c=0x8f;
          2C0A    0E8F     MOVLW 0x8f
          2C0C    6EF3     MOVWF 0xff3, ACCESS
          2C0E    0E04     MOVLW 0x4
          2C10    CFF3     MOVFF 0xff3, 0xfdb
          2C12    FFDB     NOP
          2C14    0E05     MOVLW 0x5
          2C16    6ADB     CLRF 0xfdb, ACCESS
        522:               	a=(b&0x1c)|(c&0x73);
          2C18    0E1C     MOVLW 0x1c
          2C1A    6EE7     MOVWF 0xfe7, ACCESS
          2C1C    0E02     MOVLW 0x2
          2C1E    CFDB     MOVFF 0xfdb, 0x16
          2C20    F016     NOP
          2C22    0E03     MOVLW 0x3
          2C24    CFDB     MOVFF 0xfdb, 0x17
          2C26    F017     NOP
          2C28    50E7     MOVF 0xfe7, W, ACCESS
          2C2A    1616     ANDWF 0x16, F, ACCESS
          2C2C    6A17     CLRF 0x17, ACCESS
          2C2E    0E73     MOVLW 0x73
          2C30    6EE7     MOVWF 0xfe7, ACCESS
          2C32    0E04     MOVLW 0x4
          2C34    CFDB     MOVFF 0xfdb, 0x18
          2C36    F018     NOP
          2C38    0E05     MOVLW 0x5
          2C3A    CFDB     MOVFF 0xfdb, 0x19
          2C3C    F019     NOP
          2C3E    50E7     MOVF 0xfe7, W, ACCESS
          2C40    1618     ANDWF 0x18, F, ACCESS
          2C42    6A19     CLRF 0x19, ACCESS
          2C44    5016     MOVF 0x16, W, ACCESS
          2C46    1018     IORWF 0x18, W, ACCESS
          2C48    6E14     MOVWF 0x14, ACCESS
          2C4A    5017     MOVF 0x17, W, ACCESS
          2C4C    1019     IORWF 0x19, W, ACCESS
          2C4E    6E15     MOVWF 0x15, ACCESS
          2C50    C014     MOVFF 0x14, 0xfde
          2C52    FFDE     NOP
          2C54    C015     MOVFF 0x15, 0xfdd
          2C56    FFDD     NOP
        523:               	b=0x99;
          2C58    0E99     MOVLW 0x99
          2C5A    6EF3     MOVWF 0xff3, ACCESS
          2C5C    0E02     MOVLW 0x2
          2C5E    CFF3     MOVFF 0xff3, 0xfdb
          2C60    FFDB     NOP
          2C62    0E03     MOVLW 0x3
          2C64    6ADB     CLRF 0xfdb, ACCESS

        Comment


          #5
          Vs: Bittide maskeerimine C keeles. Hi-tech PICC. Algteadmised.

          Bitinikerdamine on igas compilerist erinev. C8051-l on näiteks bitmap ala mälys mis teeb asja raudvaraliselt ära. ~ & | ^ >> ja << tehted töötavad yldjuhul iga kompileriga. Vaadates et kasutab 0b.. eeldan et võib olla mikroe compoler. Seal käis access näiteks PORTB.F0. Mikroe-l on kena quichelp, seal kirjas kõik funktsioonid, tuleb tööriistadega kaasa nii paberil kui PDF-ina.
          Modelleerimises ja tootmises kehtivad:
          1. Avariikindel vooluring lühistab kõik teised.
          2. Transistor, millel on kiiresti toimiv kaitse, säästab kaitset, sulades kõigepealt ise.

          Comment


            #6
            Vs: Bittide maskeerimine C keeles. Hi-tech PICC. Algteadmised.

            Kuna alustaja tundis huvi C võimaluste vastu siis räägiks veel natuke neist.
            Näide on MPLAB IDE v8.36 all kirjutatud.
            Valikutes oli ka Hi-tech aga valisin C18. Läks nii.

            Üks võimalus bitte juhtida on kasutada tabelit.
            Näiteks võib sammmootorit juhtida selline programmilõik:
            Kood:
            int Tabx[]={0, 2, 3, 1};
            int Taby[]={0, 1, 3, 2};
            /*suund*/
            	if(txs>X) dx=1;
            	if(txs<X) dx=-1;
            // ...................................
            /* Tee samm*/
            			X+=dx;
            			k=X&3;
            			k=Tabx[k];
            			if(k&0x01){mLED_7_On();}else{mLED_7_Off();}
            			if(k&0x02){mLED_6_On();}else{mLED_6_Off();}
            C üks eelistest, selle kõrval et seda suudab kirjutada iga loll keda peeglist näed,
            on veel see, et sama programm (peaaegu sama) jookseb paljudel erinevatel arvutitel.
            Üsna suuri lõike sai PICist tõstetud PC-sse ja seal Demo ja silumisena kasutatud.
            __________________________________________________ _________________
            Kui siin liigub PICi ja C huvilisi siis võiks vast sellise huviliste klubi kokku panna.
            Kui 85. PC-d ilmusid, käisime Ülikooli raamatukogus koos ja arutasime keerulisi asju.
            Näiteks seda et kust saada 5 tollist flopi toorikut.

            Nüüd võiks ka midagi sellist ette võtta. Alustuseks.
            Füüsikahoones pidid noored tudengid tina panema. Suure kolviga.
            Vast annab jõuda koostööle.

            Comment

            Working...
            X