Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Program dla mikroprocesora 8051 (P89C51RD2) w języku C

km_86 24 Apr 2008 19:24 2701 5
Computer Controls
  • #1
    km_86
    Level 2  
    Witam,
    potrzebuję napisać program w języku C dla mikroprocesora 8051 firmy Philips (P89C51RD2) dla zestawu startowego MTS-51. Posiadam przykładowy kod assemblera. Program nie musi być taki jak poniższy, ważne, żeby był w języku C.


    Przykładowy KOD programu:

    Code:
     ORG 000H 
    

    MOV A,#10000000B
    NEXT:
    MOV P2,A
    CALL DELAY
    RR A
    JMP NEXT

    ;==============================
    ; DELAY 0.1S
    ;==============================
    DELAY:
    MOV R6,#200
    DL1:
    MOV R7,#249
    DJNZ R7,$
    DJNZ R6,DL1
    RET

    END


    Przeniosłem z Programowanie Ogólne - krzychoocpp
    [28-30.06.2022, targi] PowerUP EXPO 2022 - zasilanie w elektronice. Zarejestruj się za darmo
  • Computer Controls
  • #2
    KowalD
    Level 17  
    znaczy masz napisac program, ktory robi cokolwiek??

    cos mi tu nieladnie pachnie lenistwem i ogolna olewka szkoly :D...

    ale mozesz sprobowac w ten sposob... nie wiem co ta instrukcja rr robi, ale pewnie to jest przesuwanie, a program ma migac diodami ;)...
    Code:

    void delay(int value)
    {
        volatile int i;
        for (i=0;i<value;i++);
    }
    int main(void)
    {
        char A= 1;
        while (1)
        {
            P2=A;
            A=A<<1;
            delay(10000);
        }
        return 0;
    }

    oczywiscie nie ma szans, zeby to sie skompilowalo :D :D :D... ale ogolny schemat algorytmu i podstawy do treninguc juz masz :D... wez sie do roboty, bo jak na poczatku odpuscisz, to pozniej bedzie ciezko nadrobic...
  • Computer Controls
  • #3
    km_86
    Level 2  
    Dziękuję. :-)

    Język C jest wszędzie tylko, że nie uczono mnie go w szkole i muszę nadrabiać we własnym zakresie.

    Wiele książek jest napisanych dla programowania mikroprocesora firmy ATMEL i dla innych zestawów startowych, a ja chciałbym napisać dla MTS-51, który wygląda tak:

    http://www.ndn.com.pl/katalog/kh/pdf/mts51.pdf

    Znalazłem takie coś:

    Code:


    #include "51xD2.h"

    void main(void) {
       WORD i;

       while (1) {

       P3_2 =!P3_2;
       for (i=0;i<0xffff;i++) {};
      }
    }


    Co o tym sądzicie? Co należałoby zmienić, żeby program skompilował się i "ruszył" na MTS-51.

    Dodam, że powższy program jest napisany dla mikrokontrolera AT89C51RD2 dla zestawu ZL2MCS51.
  • #4
    Bigfoot
    Level 25  
    W jakim kompilatorze piszesz przede wszystkim?
    Jesli w Keilu to P3_2 muszisz zamienic na P3^2, WORD zmien na unsigned char a pierwsza linie zmien na #include <REG51F.h>.

    Bedzie dzialac - przynajmniej w Keilu.

    BF
  • #5
    a2d2a2m
    Level 15  
    Program, który podałeś jest żywcem skopiowany z książki wydawnicta AVT. Jeżeli w takiej formie chcesz go zaprezentować w szkole, to musisz miec bardzo tolerancyjnego nauczyciela, który będzie udawał, że wierzy w to, że połowa klasy była tak samo inteligentna i napisała identyczny program , a nawet zmienne tak samo nazwali. Żeby skompilować musisz zadeklarować porty? sbit P3.2=0; i zmienić zapis P3_2 na P3.2 zależy to od kompilatora. Zmienną "i" możesz zmienić na dowolną nie tylko jedno literową np."mójnauczycieljestnaiwny" . Podany przez ciebie program powoduję raz pojawienie się stanu niskiego na porcie , a raz stanu wysokiego naprzemian. for (i=0;i<0xffff;i++) {};zapis ten realizuje opóźnienie. Mikrokontroler wykonuje tyle razy 0xffff
    pustą pętlę{}, a tym samym traci czas, co jest właśnie naszym opóźnieniem po czym zmienia stan portu na przeciwny P3.2 =!P3.2; wykrzyknik oznacza negację. Zapis WORD i; do deklaracja typu zmiennej.
    Powodzenia
  • #6
    km_86
    Level 2  
    Dziękuję za wyczerpujące wypowiedzi.

    Nauczyciel nie zwróci uwagi na to skąd przepisałem program, bo chodzi o dowolny program wzięty z dostępnych źródeł. Tylko ja realizuje w grupie to zadanie.

    Poprawię program w KEIL-u.

    Długa droga przede mną z nauką programowania, ale to przydatna umiejętność, którą chcę nabyć.

    Pozdrawiam. :-)