giúp em về Htech C

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • phanhuycuong290
    Nhập môn đệ tử
    • Oct 2012
    • 5

    #1

    giúp em về Htech C

    em đang viết chương trình I2C trên MPLAB Htech C, em gặp 1 vấn đề là đăt 1 biến có thể truy xuất từng bit

    bên keilC cho 8051 có dạng như sau
    unsigned char bdata DATA;
    sbit DATA0 = DATA^0;
    sbit DATA7 = DATA^7;

    bên Htech C nó không hiểu mấy bác ơi
    muốn đặt biến dạng này thì làm thế nào vậy

    bác nào rành bên Htech C giúp với
  • namqn
    Trưởng lão PIC bang
    • Feb 2006
    • 3025

    #2
    Kỹ thuật thao tác chuẩn trong C (không phụ thuộc trình dịch C đang sử dụng):

    1. Để set bit k của biến v thành 1:
    Code:
    v = v | (1 << k);
    2. Để clear bit k của biến v thành 0:
    Code:
    v = v & ~(1 << k);
    Bạn nên tìm một tài liệu C primer nào đó để đọc thêm, ví dụ (nhờ Google):




    Thân,
    Biển học mênh mông, sức người có hạn.

    Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
    http://www.picvietnam.com/forum/showthread.php?t=1263

    Comment

    • pucapuca123
      Đệ tử 5 túi
      • Aug 2010
      • 116

      #3
      Nguyên văn bởi namqn View Post
      Kỹ thuật thao tác chuẩn trong C (không phụ thuộc trình dịch C đang sử dụng):

      1. Để set bit k của biến v thành 1:
      Code:
      v = v | (1 << k);
      2. Để clear bit k của biến v thành 0:
      Code:
      v = v & ~(1 << k);
      Bạn nên tìm một tài liệu C primer nào đó để đọc thêm, ví dụ (nhờ Google):




      Thân,
      tiện thể bác cho em hỏi luôn cách ghép 8 bít lại với nhau lại bằng cách nào là nhanh nhất.
      ví dụ mình có các biến sau.

      a0=1;
      a1=1;
      a2=1;
      a3=1;
      a4=0;
      a5=0;
      a6=0;
      a7=0;

      làm sao để ghép được thành 1 byte : b= a0a1a2a3a4a5a6a7=0b00001111;
      và có cách nào sử dụng các biến a0,a1...a7 như các bít trong biến b ( cái này cho tiết kiệm ram) chứ mình toàn khai báo unsigned char a0,a1...a7. tốn ram chết đi được,
      cám ơn các bác!

      Comment

      • habach
        Nhập môn đệ tử
        • Nov 2013
        • 5

        #4
        Nguyên văn bởi pucapuca123 View Post
        tiện thể bác cho em hỏi luôn cách ghép 8 bít lại với nhau lại bằng cách nào là nhanh nhất.
        ví dụ mình có các biến sau.

        a0=1;
        a1=1;
        a2=1;
        a3=1;
        a4=0;
        a5=0;
        a6=0;
        a7=0;

        làm sao để ghép được thành 1 byte : b= a0a1a2a3a4a5a6a7=0b00001111;
        và có cách nào sử dụng các biến a0,a1...a7 như các bít trong biến b ( cái này cho tiết kiệm ram) chứ mình toàn khai báo unsigned char a0,a1...a7. tốn ram chết đi được,
        cám ơn các bác!
        Đơn giản.

        Code:
        typedef union {
        struct {
        unsigned a0:1;
        unsigned a1:1;
        unsigned a2:1;
        unsigned a3:1;
        unsigned a4:1;
        unsigned a5:1;
        unsigned a6:1;
        unsigned a7:1;
        }
        struct {
        unsigned ax:8;
        }
        }myport;
        
        myport A;
        
        A.ax = 0b00001111;

        Comment

        Working...