Thông báo

Collapse
No announcement yet.

Giúp e làm sao quét led từ P0--->P3 32 cổng at89c52

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

  • Giúp e làm sao quét led từ P0--->P3 32 cổng at89c52

    mấy a sư hunh chỉ dùm e làm thế nào quét led chạy từ chân P0.0 đến p3.7 ạ. đây là code của e

    #include <regx51.h>
    #define led P2
    #define XUNG P1_0 //LAY XUNG TU 555
    unsigned char quay;
    unsigned char x;
    unsigned char m=0x55;
    void delay_555()
    {
    while(XUNG==1)
    {
    if(m==0xaa)//?????????????????
    {
    break;
    }
    }
    while(XUNG==0)
    {
    if(m==0xaa)//?????????????????
    {
    break;
    }
    }
    }
    //************************
    void delay(unsigned int ms)
    {
    unsigned int i;
    unsigned char j;
    for(i=0;i<ms;i++)
    {
    for(j=0;j<125;j++)
    {
    }
    }
    }
    //******************************
    void chon_xung()
    {
    if(m==0x55)
    {
    delay_555();
    }
    else
    {
    delay(300);
    }
    }
    /////////////////**********mang*************//////////
    unsigned char code a2[]={0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x01,0x02,0x0 4,0x08,0x10,0x20,0x40,0x80,
    0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
    //********chon xung 555 hay xung noi***********
    void int0_ISR
    (void) interrupt 0
    {
    m=~m;
    }

    main()
    {
    EX0=1;
    EA=1;
    IT0=1;
    while(1)
    {
    for(x=0;x<23;x++)
    {
    led=a2[x];
    {
    chon_xung();
    }
    }
    }
    }
    Last edited by lenhoc91; 13-05-2012, 15:11.

  • #2
    code ko có chút logic nào và mình đọc cũng ko hiểu j lun, sai lun từ chính mấy chương trình delay cơ bản, chả bít hoạt động ra sao
    delay kiểm tra xung 555
    (void) interrupt 0
    {
    m=~m;
    } thì làm sao m nó tăng đc, cái này là m =0 thì m =1 và ngược lại
    ngoài ra sai ngay từ cái khai báo đầu tiên
    #define led P0,P2
    1 biến, tham số chỉ định nghĩa cho 1 phần tử bất kỳ, vừa khai báo P0 vừa khai báo P2 là sao
    Website chính thức đổi địa chỉ website thành
    Mời các bạn ghé thăm !!!

    Comment


    • #3
      Nguyên văn bởi mast090 Xem bài viết
      code ko có chút logic nào và mình đọc cũng ko hiểu j lun, sai lun từ chính mấy chương trình delay cơ bản, chả bít hoạt động ra sao
      delay kiểm tra xung 555
      (void) interrupt 0
      {
      m=~m;
      } thì làm sao m nó tăng đc, cái này là m =0 thì m =1 và ngược lại
      ngoài ra sai ngay từ cái khai báo đầu tiên
      #define led P0,P2
      1 biến, tham số chỉ định nghĩa cho 1 phần tử bất kỳ, vừa khai báo P0 vừa khai báo P2 là sao
      cái #define led P0,P2 này là e viết thử để quét từ P0.0-->P2.7 ma ko được wen xóa đó.
      xóa P0 or P2 là f7 được ah. e mo phỏng thấy chạy được mà

      Comment


      • #4
        4 port = 32 bit
        sử dụng 1 biến long 32 bit
        thao tác trên biến này
        rồi tách biến này ra thành các byte
        xuất các byte này ra 4 port
        hehe
        Be quan. Plz contact through email:

        Comment


        • #5
          thế thao tác làm sao a e chi cho e rõ

          Comment


          • #6
            Thế này nhé s:
            giả sử e có 1 biến 32 bit - khai báo kiểu long nhé
            ví dụ: a khai báo thằng x ở dưới



            đây là các macro định nghĩa e sẽ lấy được các byte riêng trong đó BYTE 1 là byte thấp nhất ( tí nữa ta xuất ra port0)

            #define BYTE1(v) ((unsigned char) (v))
            #define BYTE2(v) ((unsigned char) (((unsigned long) (v)) >> 8))
            #define BYTE4(v) ((unsigned char) (((unsigned long) (v)) >> 16))
            #define BYTE4(v) ((unsigned char) (((unsigned long) (v)) >> 24))

            long x;

            void xuat (void) {
            p0 = BYTE1(x);
            p1 = BYTE1(x);
            p2 = BYTE1(x);
            p3 = BYTE1(x);

            }



            void main(void)

            {

            em làm gì đó với biến x 32 bit ( quét như w muốn)

            sau đó gọi hàm xuất ở trên
            xuat();



            }
            Be quan. Plz contact through email:

            Comment


            • #7
              #define BYTE1(v) ((unsigned char) (v))
              #define BYTE2(v) ((unsigned char) (((unsigned long) (v)) >> 8))
              #define BYTE4(v) ((unsigned char) (((unsigned long) (v)) >> 16))
              #define BYTE4(v) ((unsigned char) (((unsigned long) (v)) >> 24))

              macro này la sao a? e ko hiểu

              a cho e vidu đi

              Comment


              • #8
                tự hiểu đi e
                >> là toán tử dịch bit sang phải
                8:ta lấy được byte thứ 2 sau khi dịch 8 lần
                16 : ta lấy được byte thứ 2 sau khi dịch 16 lần
                24 : ta lấy được byte thứ 2 sau khi dịch 24 lần
                Be quan. Plz contact through email:

                Comment


                • #9
                  hjc. thank a

                  Comment


                  • #10
                    khổ quá : 'hic' của em làm a sợ đó
                    tức là giả sử e có 1 biến 32 bit kiểu long nha gọi nó là x

                    giả sử trạng thái của nó là: x = 00000000111111110000000011111111 được chưa ( đếm coi có đủ 23 bit ko ^^) ( a viết kiểu nhị phân)


                    #define BYTE1(v) ((unsigned char) (v))
                    #define BYTE2(v) ((unsigned char) (((unsigned long) (v)) >> 8))
                    #define BYTE4(v) ((unsigned char) (((unsigned long) (v)) >> 16))
                    #define BYTE4(v) ((unsigned char) (((unsigned long) (v)) >> 24))


                    sau đó e gọi :

                    void xuat (void) {
                    p0 = BYTE1(x);
                    p1 = BYTE1(x);
                    p2 = BYTE1(x);
                    p3 = BYTE1(x);
                    }

                    trình biên dịch thực hiện lệnh p0 = BYTE1(x);
                    đến đấy nó ko hiểu BYTE1(x) là gì
                    nó chạy lên đầu và nhìn vào khai báo
                    #define BYTE1(v) ((unsigned char) (v))
                    nó thấy à thì ra BYTE1(biến) tức lấy được 8 bit thấp nhất của byte đó ; luc này 8 bit thấp nhất của x là 1111111 và đưa ra p1 nhé
                    tuơng tự
                    đến dòng:
                    p2 = BYTE2(x)
                    nó chạy lên đầu thấy khai báo:
                    #define BYTE2(v) ((unsigned char) (((unsigned long) (v)) >> 8))

                    nó hiểu à thì ra đầu tiên ta dịch biến x đi 8 lần sang phải: e thấy sau khi dịch 8 lần x lúc này là :
                    x = 00000000111111110000000011111111 ( ban đầu)
                    dịch 8 lần x = (00000000 - 8 bit số 0 được dịch vào)(00000000)(11111111)(00000000) còn 8 bit 1 cuối cùng của bị đầy ra ngoài và đưa vào 8 bit số 0 a ghi ở đầu đó
                    sau khi dịch e thấy ta sẽ lấy 8 bit thấp nhất = 00000000 và đưa ra p2

                    tương tự nha
                    Be quan. Plz contact through email:

                    Comment


                    • #11
                      Nguyên văn bởi mast090 Xem bài viết
                      code ko có chút logic nào và mình đọc cũng ko hiểu j lun, sai lun từ chính mấy chương trình delay cơ bản, chả bít hoạt động ra sao
                      delay kiểm tra xung 555
                      (void) interrupt 0
                      {
                      m=~m;
                      }
                      thì làm sao m nó tăng đc, cái này là m =0 thì m =1 và ngược lại
                      ngoài ra sai ngay từ cái khai báo đầu tiên
                      #define led P0,P2
                      1 biến, tham số chỉ định nghĩa cho 1 phần tử bất kỳ, vừa khai báo P0 vừa khai báo P2 là sao
                      cơ bản bạn chẳng hiểu gì về C cả m=~m; là như thế sao

                      Comment


                      • #12
                        lệnh hồ giải thích dễ hiểu quá
                        mấy cái đó là cơ bản trong lập trình C mà
                        bạn nên hiểu thêm về ASM, C và cách biểu diễn số trên máy tính

                        nhưng tôi vẫn nghĩ là dùng 4 biến 1 byte chạy nhanh hơn (theo quan điểm cá nhân thôi nhé)

                        Comment


                        • #13
                          em thấy code bạn ấy viết m=~m;là lấy phần bù theo bit của m,theo khai báo ban đầu của tác giả thì ban đầu m=0x55;sau lệnh gán m=~m;thì m=0xaa;em chỉ hiểu như vậy không biết nó có sai thật không mong được các huynh chỉ giáo.

                          Comment


                          • #14
                            đúng đó em
                            Be quan. Plz contact through email:

                            Comment


                            • #15

                              thì m=~m là lấy số bù 1
                              cái tay mast chả hiểu gì dám phán nếu m=0 thì sau lệnh trên nó thành 1 và ngược lại

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              • since0501
                                Trả lời cho Pin Li-FePO4 (pin sắt) rất dể hỏng! Các biện pháp ngăn ngừa.
                                bởi since0501
                                Mình đào mộ xíu, cho mình hỏi là pin của bác vẫn ok chứ? Mình vừa đóng khối pin 16 cell 40135 thì khi chạy điện áp nó sụt so với khi nghỉ như video mình dẫn link, vậy cho mình hỏi là dung lượng pin sẽ tính khi áp nghỉ hay áp đang hoạt động, và pin sụt áp như vậy là bình thường hay pin kém?
                                ht...
                                hôm nay, 17:56
                              • mèomướp
                                Trả lời cho Sửa bộ nguồn DC 60V 45A
                                bởi mèomướp
                                Dạ hông dám làm thì chắc chắn sẽ mãi ko thể làm được đâu ạ. Nguồn xung dân dụng vài kw giờ rất nhìu ạ, sạc ô tô điện, máy hàn, lò vi sóng, âm ly... tùy chất lượng mà độ phức tạp sẽ khác nhau ạ. Và cái giá phải trả về kinh tế...
                                Hôm qua, 13:11
                              • tuyennhan
                                Trả lời cho Sửa bộ nguồn DC 60V 45A
                                bởi tuyennhan
                                Sửa dạng này thì chuyên còn không dám chắc khộng cháy nổ với linh kiện bán ngoài chợ nói gì khộng chuyên .
                                Hôm qua, 09:25
                              • tuyennhan
                                Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                bởi tuyennhan
                                Đúng rồi chọn mua theo tai . ca thì phải toàn dải nhạc thì chỉ cao và thấp thé nên loa ca thì nghe nhạc không hay và ngược lại .
                                Muốn ca và nhạc đều hay thì phải dúng 2 giàn , còn nếu chỉ có 1 thì phải chỉnh sửa lại sao cho ca và nhạc đều được không quá dở ....
                                Hôm qua, 09:10
                              • Ng.Phuong.5
                                Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                                bởi Ng.Phuong.5
                                Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                                Mấy con...
                                09-01-2025, 19:44
                              • viettinh
                                Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                bởi viettinh
                                Bác nói đúng quá. Cơ mà muốn mua hàng chính hãng, hàng thương hiệu mà tai lại hợp hàng tầu mới khổ chứ.
                                Đang tính mua cái loa tầu nữa cột đằng sau loa này, Loa sony chỉ để hát nhép thôi, có dc k các bác ...
                                09-01-2025, 18:12
                              • nguyendinhvan
                                Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                bởi nguyendinhvan
                                Theo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
                                Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
                                Cách đơn giản...
                                09-01-2025, 00:04
                              • mèomướp
                                Trả lời cho Sửa bộ nguồn DC 60V 45A
                                bởi mèomướp
                                Dạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
                                08-01-2025, 19:02
                              • tuyennhan
                                Trả lời cho Sửa bộ nguồn DC 60V 45A
                                bởi tuyennhan
                                Chủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
                                08-01-2025, 15:43
                              • tuyennhan
                                Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                bởi tuyennhan
                                Loa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
                                08-01-2025, 15:28
                              Đang tải...
                              X