Thông báo

Collapse
No announcement yet.

Giúp mình về code Keil C với

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

  • Giúp mình về code Keil C với

    Click image for larger version

Name:	12.jpg
Views:	1
Size:	138.3 KB
ID:	1410606

    Các bạn có thể chuyển đoạn code này qua Keil C giúp mình được không:
    Hoặc nếu có code nào tương tự bằng Keil C thì share cho mình với nha. Thanks!

    UpDown EQU 00H ; đặt tên bit 00h là updown
    StartEnd EQU 01H ; đặt tên bit 01h là startend
    LAMPCODE EQU 21H ; đặt tên thanh ghi 21h là lampcode
    ORG 0000H ; địa chỉ thanh ghi khởi đầu
    JMP MAIN ; nhẩy đến tên nhãn
    ORG 30H ; vùng địa chỉ bên ngoài chức năng ngắt

    MAIN: ; đặt tên nhãn dùng cho lệnh nhẩy
    MOV SP,#5FH ; chọn địa chỉ làm ngăn xếp
    MOV P3,#0FFH ; đặt trị 11111111b vào cảng p3 để tắt 8 led
    ; điều kiện khởi đầu
    CLR UpDown ; đặt bit 0 vào bit updown
    CLR StartEnd ; đặt bit 0 vào bit startend
    MOV LAMPCODE,#0FEH ; chuyển trị 11111110b vào lampcode

    LOOP: ; đặt tên nhãn dùng cho lệnh nhẩy
    CALL KEY ; gọi chương trình dò phím, tên nhãn key
    JNB F0,LNEXT ; cho nhẩy theo bit f0
    CALL KEYPROC ; gọi chương trình xử lý phím

    LNEXT: ; đặt tên nhãn dùng cho lệnh nhẩy
    CALL LAMP ; gọi chương trình điều khiển 8 Led trên cảng p3
    JMP LOOP ; quay lại tên nhãn loop

    DELAY: ; chương trình tạo trể
    MOV R7,#100 ; đặt trị 100 vào thanh ghi r7

    D1: ; đặt tên nhãn dùng cho lệnh nhẩy
    MOV R6,#100 ; đặt trị 100 vào thanh ghi r6
    DJNZ R6,$ ; nhẩy tại chổ, chờ trị trong r6 bằng 0
    DJNZ R7,D1 ; giảm trị trong r7 theo bước -1, r7=0?, định hướng nhẩy
    RET ; qua lại sau lệnh call delay

    ;----------------------------------------
    KEYPROC: ; chương trình xử lý phím
    MOV A,B ; chuyển trị trong b vào thanh ghi a
    JB ACC.2,KeyStart ; xét bit acc.2 để định hướng nhẩy
    JB ACC.3,KeyOver ; xét bit acc.3 để định hướng nhẩy
    JB ACC.4,KeyUp ; xét bit acc.4 để định hướng nhẩy
    JB ACC.5,KeyDown ; xét bit acc.5 để định hướng nhẩy
    JMP KEY_RET ; nhẩy về tên nhãn key_ret

    KeyStart: ; trình vào mode khởi động
    SETB StartEnd ; đặt bit startend lên 1, cho khởi động
    JMP KEY_RET ; nhẩy đến tên nhãn key_ret

    KeyOver: ; trình cho tắt, kết thúc
    CLR StartEnd ; đặt bit startend xuống 0, kết thúc
    JMP KEY_RET ; nhẩy đến tên nhãn key_ret

    KeyUp: ; trình cho 8 Led dời qua phải
    SETB UpDown ; đặt bit updown lên 1, dời qua phải
    JMP KEY_RET ; nhẩy đến tên nhãn key_ret

    KeyDown: ; trình cho 8 Led dời qua trái
    CLR UpDown ; đặt bit updown xuống 0, dời qua trái

    KEY_RET: ; đặt tên nhãn dùng cho lệnh nhẩy
    RET ; quay lại sau lệnh call keyproc

    KEY: ; đặt tên nhãn dùng cho lệnh nhẩy, trình dùng dò phím
    CLR F0 ; xóa bit f0
    ORL P1,#00111100B ; lấy logic OR trị 00111100b và cảng p1
    MOV A,P1 ; chuyển trị hiện có của p1 vào thanh ghi a
    ORL A,#11000011B ; lấy logic OR a và 11000011b, xét trạng thái 4 phím
    CPL A ; lấy bù a, đảo 8 bit trong thanh ghi a
    JZ K_RET ; xét trị trong thanh a, có bằng 0 không? để nhẩy
    CALL DELAY ; cho gọi chương trình trể
    OR P1,#00111100B ; lại lấy logia OR trị 00111100b cho cảng p1
    MOV A,P1 ; lại chuyển trị hiện có của cảng p1 vào thanh ghi a
    ORL A,#11000011B ; cho lấy logic OR trị trong a và trị 11000011b
    CPL A ; lại cho bù a, đảo 8 bit trong thanh ghi a
    JZ K_RET ; lại xét trị trong thanh a, có bằng 0? để nhẩy
    MOV B,A ; chuyển trị trong a vào thanh b
    SETB F0 ; đặt bit kiểm tra f0 lên 1, báo đã có phím nhấn

    K_RET: ; đặt tên nhãn dùng cho lệnh nhẩy
    ORL P1,#00111100B ; Lấy logic OR trị hiện có trong p1 và 00111100b
    MOV A,P1 ; chuyển trị hiện có trên cảng p1 vào thanh ghi a
    ORL A,#11000011B ; lấy logic OR trị trong a và 11000011b
    CPL A ; lấy bù a, đảo 8 bit trong thanh ghi a
    JZ K_RET1 ; xét trị trong a có bằng 0 không? để nhẩy
    JMP K_RET ; nhẩy đến tên nhãn k_ret

    K_RET1: ; đặt tên nhãn dùng cho lệnh nhẩy
    RET ; quay lại sau lệnh call key

    D500MS: ; chương trình làm trể
    PUSH PSW ; tạm cho cất trị trong thanh ghi psw vào ngăn xếp
    SETB RS0 ; đặt trị rs0 trong thanh ghi trạng thái psw lên 1
    MOV R7,#200 ; chuyển trị 200 vào thanh ghi r7

    D51: ; đặt tên nhãn dùng cho lệnh nhẩy
    MOV R6,#250 ; đặt trị 250 vào thanh ghi r6

    D52: ; đặt tên nhãn dùng cho lệnh nhẩy
    NOP ; dòng không tác vụ
    NOP ; dòng không tác vụ
    NOP ; dòng không tác vụ
    NOP ; dòng không tác vụ
    DJNZ R6,D52 ; giảm trị trong r6 theo bước -1, r6=0?, chọn hướng nhẩy
    DJNZ R7,D51 ; giảm trị trong r7 theo bước -1, r7=0?, chọn hướng nhẩy
    POP PSW ; lấy lại trị trước đó cho thanh ghi psw
    RET ; quay lại sau lệnh gọi call d500ms

    LAMP: ; chương trình điều khiển 8 Led trên cảng p3
    JB StartEnd,LampStart ; chọn hướng nhẩy theo bit startend
    MOV P3,#0FFH ; đặt trị 11111111b vào cảng p3, tắt hết 8 Led
    JMP LAMPRET ; nhẩy về tên nhãn lampret

    LampStart: ; đặt tên nhãn cho lệnh nhẩy, trình dời 8 bit trong a qua trái
    JB UpDown,LAMPUP ; nhẩy theo bit updown
    MOV A,LAMPCODE ; chuyển trị trong lampcode cho thanh ghi
    RL A ; cho quay vòng 8 bit trong thanh ghi aqua hướng trái
    MOV LAMPCODE,A ; chuyển trị trong a vào lampcode
    MOV P3,A ; cho xuất trị trong a ra cảng p3
    CALL D500MS ; gọi chương trình làm chậm d500ms
    JMP LAMPRET ; nhẩy về tên nhãn lampret

    LAMPUP: ; đặt tên nhãn cho lệnh nhẩy, trình cho dời 8 bit qua phải
    MOV A,LAMPCODE ; chuyển trị trong lampcode vào thanh ghi a
    RR A ; cho quay vòng 8 bit trong a qua hướng phải
    MOV LAMPCODE,A ; chuyển trị trong a vào lampcode
    MOV P3,A ; xuất trị trong a ra cảng p3
    CALL D500MS ; cho gọi chương trình trể d500ms

    LAMPRET: ; đặt tên nhãn cho lệnh nhẩy
    RET ; quay lại sau lệnh call
    END ; dừng biên dịch tại dòng này
    Last edited by trigiang28; 03-11-2011, 17:14.

  • #2
    chả hiểu ý đồ của bạn là gì, chuyển vì bạn không có trình dịch keil c, là dịch ra file hex giúp hả hay thế nào

    Comment


    • #3
      Nguyên văn bởi lengo90 Xem bài viết
      chả hiểu ý đồ của bạn là gì, chuyển vì bạn không có trình dịch keil c, là dịch ra file hex giúp hả hay thế nào
      bạn ấy nhờ bà con viết code bằng Keil C đó.
      Mãi đi tìm vàng.

      Comment


      • #4
        Nguyên văn bởi KVLV Xem bài viết
        bạn ấy nhờ bà con viết code bằng Keil C đó.
        đúng rùi á ^^ mình đang làm mạch điều khiển LED và muốn làm như hình trên, nhưng code lại là asm mình đọc hok có hỉu bạn nào có thể viết lại bằng Keil C giúp mình được không? Thanks!

        Comment


        • #5
          code c thì tui mù tịt, trên lớp không được học vì không đúng chuyên ngành, nên ngại tự tìm hiểu, nêu asm thì tui biết chút ít.

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          Đang tải...
          X