Thông báo

Collapse
No announcement yet.

Bác nào giúp em cách chuyển các lệnh từ ASM sang Keil C với

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Bác nào giúp em cách chuyển các lệnh từ ASM sang Keil C với

    EM chỉ biết viết ASM thui . Giờ ko biết viết C như thế nào . Bác nào bớt chút thời gian hướng dẫn em các lệnh tương ứng giữa ASM và C với . Thankss các bác nhìu nhìu

  • #2
    chắc bro phải đọc wa trình dịch Keil thì mới viết đc = Keil C . Tuy cũng là dạng ngôn ngữ C nhưng mỗi trình dịch lại có mỗi cách viết khác nhau !
    Bro post thử code ASM lên để a e chuyển giúp cho ! Nhớ chú thích cho dễ hiểu ! vì đặc trưng của ASM phải có sơ đồ thuật toán , thì đọc mới hiểu đc !

    Comment


    • #3
      Các bác giúp chuyển từ ASM sang Keil C!!!

      1. Chuong trinh ngat TOISR
      TOISR:
      CLR TR0 ; dung bo dem
      DJNZ R1,SS; R1=0? Neu chua, nhay toi SS
      JB 04H,TA; Kiem tra dieu kien tra lenh=1 nhay toi TA
      JNB 07H,TO4; Kiem tra dieu khien TEST, 07H=0 ?
      TEST:
      MOV R1,#20; nap lai gia tri cho thanh ghi R1
      INC R0; tang gia tri thanh ghi R1
      CJNE R0,#12,TO3; kiem tra R0=12?
      MOV R0,#0; Neu R0=12, nap lai R0=0
      TO3:
      JC TO4; Neu R0>12
      MOV R0,#0; Nap lai R0=0
      TO4:
      ACALL HTHI; Goi chuong trinh hien thi
      JB 07H,TO5; Kiem tra lai dieu kien TEST
      MOV R1,#50;
      CJNE R0,#12,NHA; R0=12? Neu khac se nhay toi NHA
      SJMP SS; Neu R0=12 thuc hien thu tuc ket thuc CTN
      NHA:
      JC HA; Neu R0>12 thuc hien thu tuc ket thuc CTN
      SJMP SS;
      HA:
      DJNZ R2,TTA; R2=12? Neu khac 0 se nhay toi TTA
      CLR P1.4; Tat chuong
      MOV R2,#3; Nap lai R2=3
      TTA:
      SETB 04H; dao bit dieu khien tra lenh
      SJMP SS ; Nhay ve doan ket thuc CTN
      TA:
      MOV P0,#00; Tat tat ca cac den
      MOV P1,#00;
      MOV R1,#50; Nap lai gia tri R1
      CLR 04H; Dao bit dieu khien tra lenh
      TO5:
      SETB P1.4; Rung chuong
      SS:
      JNB 05H,ACT41; Kiem tra su co
      SETB P1.5; Neu co bat den su co, nap lai bo dem va thaot
      ACT41:
      CLR P1.5; Tat den su co
      MM:
      MOV TL0,#0EFH; Nap lai gia tri bo dem
      MOV TH0,#0D*H;
      SETB TR0; Khoi dong lai bo dem
      RETI
      2. Chuong trinh chi bao dau ra
      HTHI:
      MOV 02FH,A
      MOV A,R0;
      MOV DPTR,#300H; Nap dia chi bang dau ra cho tin hieu DPTR
      MOVC A,@A+DPTR; Doc gia tri tu bang ra thanh ghi A
      CJNE R0,#12,F: Nap R0=12?
      SJMP ACT1; Nap neu R0=12 nhay toi ACT1
      F:
      JC F3; R0>12 hoac R0<12?
      CJNE R0,#19,F1; Neu R0>12 kiem tra R0=19?
      SJMP ACT1; Neu R0=19
      F1:
      JC F2; Neu R0>19 hoac R0<19?
      SJMP ACT2; Neu R0>19
      F2:
      SJMP ACT1; Neu R0<19
      F3:
      CJNE R0,#7,F4; Neu R0<12 kiem tra R0=7?
      SJMP ACT1; Neu R0=7
      F4:
      JC ACT2; Nap R0<7
      SJMP ACT1; Neu R0>7
      ACT1:
      MOV P0,A
      MOV P1,#0; Xoa P1
      MOV A,02FH; Lay lai gia tri thanh ghi A
      RET
      ACT2:
      MOV P1,A
      MOV P0,#0
      MOV A,02FH
      RET
      3. Chuong trinh su co
      EMER:
      JB P3.3,EXIT2; Thoat ra neu P3.3=1
      CLR IE.7; Cam ngat toan cuc
      STAND1:
      ACALL DELAY; Doi den khi nut an duoc nha
      JNB P3.3,STAND1; Lap lai neu P3.3=0
      JB 03H,TO11; 03F=1 nhay to TO11
      SETB 05H; Dat dieu kien su co
      CLR 03H; Dat off chp nut an
      SETB IE.7; Cho phep ngat toan cuc
      RET
      TO11:
      CLR 05H; huy dieu kien su co
      SETB 03H ; Dat ON cho nut an
      SETB IE.7 ; Cho phep ngat toan cuc
      EXIT2:
      RET
      4. Chuong trinh TEST
      TEST:
      JB P3.2,EXIT1; Thoat ra neu P3.3=1
      CLR IE.7; Cam ngat toan cuc
      STAND:
      ACALL DELAY; doi den khi nut an duoc nha
      JNB P3.2,STAND; Lap lai neu P3.2=0
      JNB 06H,TO1; 06F=0 nhay toi TO1
      MOV A,R0; Luu Ro vao thanh ghi A
      MOV 02EH,A; Cat gia tri R0 vao ngan xep
      MOV R1,#20; Nap gia tri cho R1
      SETB 07H; Dat dieu kien cho TEST
      CLR 06H; Dat Off cho nut an
      SETB IE.7; Cho phep ngat toan cuc
      RET
      TO1:
      MOV A,02EH
      MOV R0,A
      MOV R1,#50
      CLR 07H; huy dieu kien su co
      SETB 06H; Dat On cho nut an
      SETB IE.7; Cho phep ngat toan cuc
      EXIT1:
      RET

      Comment


      • #4
        Hic ! viết ASM có cực là vậy đó ! bạn chú thích giống như ng ta đọc từng câu lệnh vậy ! ko ai chú thích kiểu ấy hết ! Muốn đọc & hiểu code của ASM , chỉ cần chú thích ngay dòng lệnh đầu tiên mình sẽ làm gì .
        Code:
        #include<AT89C51.h> // nhập file này vào vì nó đn sẵn các thanh ghi & port trong MCU
        int8 R1  = giá trị ; // khai báo biến R1 & giá trị kèm theo nếu muốn , mình chọn tên biến giống tên thanh ghi cho bạn dễ theo dõi
        void T0ISR() using 1   // đoạn ct ngắt timer 0
        { TR0 = 0 ; 
           while(R1>0) { R1-- ; if( bít 05H ==0) {P1_5 = 1 ;};
        };
        Bạn chụp sơ đồ thuật toàn lên mình viết nhanh cho rùi ! Ngồi đọc chắc chết mất . Bạn định làm gì thì vẽ sơ đồ y vậy ! Mai mình thi RDM rùi ! giờ ngồi viết code chắc mai " out" luôn ! thông cảm nha !

        Comment


        • #5
          Bạn ơi thuật toán đây nhé

          Cố gắng giúp tớ với . ĐAng gấp lắm rùi . Mong các bác bớt chút thời gian chuyển ASM sang Keil C với .
          Attached Files

          Comment


          • #6
            Mấy chương trình này làm nhiệm vụ gì thế nhỉ? Nếu cậu học C rồi thì cứ viết C thôi, chẳng cần quan tâm ASM nó như thế nào đâu ( ý kiến chủ quan )
            Cung cấp Oscilocope , Inverter , Switching , DC power supply , AC millivolt meter ....

            Comment


            • #7
              Trời , em chỉ biết viết ASM thui mà , C còn bỡ ngỡ lắm nên mới nhờ các bác giúp . Ko bác nào giúp em ah???

              Comment


              • #8
                đóng gói

                nếu code asm dã được kiểm tra và hoạt động tốt thì bạn nên đóng gói phần code assembly này, sử dụng từ khóa #pragma asm #pragma endasm. code viết bằng assembly sau khi đóng gói sẽ nhúng vào project của bạn bằng lệnh gọi chương trình con(hay là gọi ngắt). những khai báo về thanh ghi trong asm, sử dụng từ khóa DB, sẽ được khai báo bién trong C với từ khóa volatile. làm như vậy sẽ nhanh hơn là dịch từng dòng lệnh từ asm sang C. chúc thành công nhé.

                Comment

                Về tác giả

                Collapse

                manngonguyen Tìm hiểu thêm về manngonguyen

                Bài viết mới nhất

                Collapse

                Đang tải...
                X