Thông báo

Collapse
No announcement yet.

HƯỚNG DẪN LẬP TRÌNH KEIL C CHO 8051-[Chỉ dành post bài hướng dẫn]

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

  • quyển của ng thúy vân mình cung có , đang
    tự ngâm cứu vẫn chưa ra dc j cả
    tự học khó thật.đau hết cả đầu

    làm kiểu j ma hết có 13 chân thôi

    mà ko dung IC khác mỗi 1 thanh là chiếm một chân

    con 8255 là con j vậy bạn co thể nói qua cấu tạo hoạt độnh của nó đươc ko
    Last edited by VNarmy; 05-04-2009, 14:24.

    Comment


    • Nguyên văn bởi hoang_hai
      làm kiểu j ma hết có 13 chân thôi
      Thế mình mới bảo bạn tìm hiểu thêm cách quét LED ma trận.

      Nguyên văn bởi hoang_hai
      con 8255 là con j vậy bạn co thể nói qua cấu tạo hoạt độnh của nó đươc ko
      dùng để mở rộng PORT mà bạn.
      còn cấu tạo thì google là okie liền
      Last edited by VNarmy; 05-04-2009, 14:24.

      Comment


      • ok
        để mình tìm hiểu tiếp

        Comment


        • ah nếu mình muốn tạo tần số 28MHz thì dung con thạch anh bao nhiêu vậy
          có dùng con 12MHz dc ko

          Comment


          • xử lý xâu kí tự trong lập trình C cho 8051

            Em đang làm bài hiện chữ quảng cáo dùng led ma trận : 8x32, có kết nối bàn phím 4x4. Bàn phím thì định làm là mỗi nút hiện 1 kí tự. Dành một nút thứ 16 để làm nút chạy chữ quảng cáo đã nhập. Em dùng Keil C lập trình C cho AT89C52
            Hiện xâu kí tự thì em có tham khảo và đã làm được.

            ví dụ muốn hiện một xâu thì em chỉ cần xuất lệnh :
            send_str("quang cao",0,1) // trong đó thì 0 là vị trí hiện chữ và 1 để làm dấu hiệu muốn chữ chuyển động từ phải qua trái

            Bây giờ vấn đề của em là : em đã tạo một xâu

            unsigned char q[]; // xâu này để chứa dãy kí tự nhập từ bàn phím, chỉ cần xâu này đúng là được

            em đã viết lệnh bắt được các phím của bàn phím (đã thử thấy được),nhưng không thể đưa nó vào xâu q kia.

            Code:
            i=quetbanphim();   // quét bàn phím và trả về số thứ tự của phím đã bấm
            phim_duoc_an(i);   // lệnh thực hiện chức năng của phím đã bấm
            Code:
            void phim_duoc_an(unsigned char phim)
            {
                switch(phim)// Tuy vao so lan
                {
                case 0: { so0(); break; }
                case 1: { so1(); break; }
                ........
            Code:
            void so0(void)
            {    
                q[index]='A'; index++;   // index em khai báo ở ngoài để nó có thể lưu giá trị cũ
                // các số khác tương tự
            khi chạy chương trình thì em thấy nó không hề lưu được vào trong chuỗi q kia.

            Code:
             index thì em khai báo ở ngoài thế này :
            unsigned char index=0;
            em không biết viết thế có sai ở đâu không?
            em nói thêm là em không hề thấy giá trị của index tăng lên.
            Đã dùng lệnh if(index==3)send_str(....) để thử nhưng không thấy kết quả.

            em hỏi thêm chút : lúc đầu em định viết

            unsigned char *q; // xâu này lưu dãy kí tự nhập

            dùng lệnh strcat(q,'A'); để nối 2 xâu , chương trình không báo lỗi nhưng chạy mô phỏng thì chả có kết quả gì.

            Ai đã từng làm rồi chỉ giúp em với. Chỉ cho em làm sao để mỗi khi mình ấn một nút thì làm cách nào để cộng thêm một kí tự vào xâu kia, và xâu đó được lưu lại dùng để hiện quảng cáo.
            Xin cảm ơn! Các anh giúp nhanh hộ em hơi vội, tưởng dễ xơi ai dè!

            Comment


            • Nguyên văn bởi hoang_hai Xem bài viết
              có bác nào biết khi muốn sử dụng chân P0^0->P0^7 của 8051 thi ta phải mắc thêm j vào các chân đấy ko vậy giup mình với mình đang dùng hết 30 chân của nó.
              mua con cầu trở J103 loại 9 chân, chân 1=+5V. cac chân khac gánh P0
              Tôi thích cái cầu kỳ của kỹ thuật
              Nhưng ghét mọi phức tạp trong tính cách con người

              Comment


              • các bạn ơi mình đang sử dụng chương trình ngắt ngoài cho đồng hồ;
                đây là đoạn code ví dụ ;

                //nhap nhay by Talaai \^_^/

                #include<regx51.H>
                #include<stdio.h>
                #include<string.h>
                //#include<instris.h>
                #include<math.h>
                #include<stdlib.h>
                //#include <conio.h>
                sbit vang=P1^0;
                sbit xanh=P1^1;
                sbit tim=P1^2;
                void tre(unsigned int ms)
                {unsigned int i;
                unsigned int j;
                for(i=0;i<ms;i++);
                for(j=0;j<120;j++);}
                void main(void)
                {IE=0x81;//dùng ngat ngoai int0
                while(1)
                {vang=1;tre(5000);
                vang=0;tre(5000);}
                void ngat0(void) interrupt 0
                {xanh=tim=1;tre(5000);
                xanh=tim=0;tre(5000);
                xanh=tim=1;tre(5000);
                xanh=tim=0;tre(5000);
                xanh=tim=1;tre(5000);
                xanh=tim=0;tre(5000);
                }
                }
                nó báo lỗi là;
                Build target 'Target 1'
                compiling Text1.c...
                TEXT1.C(24): error C141: syntax error near 'void'
                các bạn giúp mình với cảm ơn trước nhe.

                Comment


                • Build target 'Target 1'
                  compiling Text1.c...
                  TEXT1.C(24): error C141: syntax error near 'void'
                  Theo như thông báo lỗi và đã check code thì lỗi ở dòng 24 cạnh chữ "void"
                  ==> Lỗi này là do bạn khai báo hàm interrupt handler ở trong hàm main().
                  ==> Giải pháp: sau vòng while(1) .. bạn kết thúc hàm main() và tiếp tục với
                  hàm interrupt ngat0()...

                  Sửa lại xem thế nào nhá.

                  Comment


                  • uh .để mình thử xem

                    Comment


                    • mình chữa rồi và nó ko báo lỗi nữa nhưng sao cho nó chạy với proteus mình ngắt ngoài mà nó vẫn chạy như thường chẳng có j thay đổi cả,
                      xem hộ mình chương trinh xem sao nó ko chạy như ý mình với.

                      Comment


                      • Chào anh em trên diễn đàn" !
                        Em dùng Keil để lập trình C cho 8051. Nhưng khi em đăng ký nó lại báo lỗi thế này" ERROR :R208", em không biết xử lý như thế nao.
                        Anh em chỉ giúp em nhé, em cảm ơn.
                        Last edited by vinh viet le; 11-04-2009, 18:01.

                        Comment


                        • Em dùng Keil. nhưng khi đăng ký thì nó báo lỗi thế này anh em chỉ giúp minh nhé.
                          " ERROR: R208".Không biết có phải do đăng ký không được hay là thế nào mà em viết chương trình nạp vào chíp không chạy được(chương trình đúng)

                          Comment


                          • Nguyên văn bởi toanyt Xem bài viết
                            Code:
                            ORG 000H
                            PORT2: LCALL DELAY
                                   MOV P2,# 00000000B
                                   LCALL DELAY
                                   MOV P2,# 00000001B
                                   LCALL DELAY
                                   MOV P2,# 00000011B
                                   LCALL DELAY
                                   MOV P2,# 00000111B
                                   LCALL DELAY
                                   MOV P2,# 00001111B
                                   LCALL DELAY
                                   MOV P2,# 00011111B
                                   LCALL DELAY
                                   MOV P2,# 00111111B
                                   LCALL DELAY
                                   MOV P2,# 01111111B
                                   LCALL DELAY;
                                   MOV P2,# 11111111B
                                   LCALL DELAY
                                   SJMP PORT2
                            DELAY: MOV R6,#0FFH
                            HERE2: MOV R7,#0FFH
                            HERE1: DJNZ R7,HERE1
                                   DJNZ R6,HERE2
                                   RET
                            END
                            Bên trên là Code tôi đã sửa rồi. Nhưng khi tạo project thì vẫn bị báo lỗi như thế này:
                            Code:
                            Build target 'Simulator'
                            compiling Bai1.c...
                            D:\BAITAPLAPTRINHVDK\BAI1.C(1): error C129: missing ';' before '000'
                            Target not created
                            Tôi cũng không hiểu là bị lỗi như thế nào nữa. Có phải là Keil C của tôi chưa bẻ khóa thành công đúng không? Hay tại vì lý do nào khác? Mong các cao thủ gạo cội trong làng VDK ra tay ứng cứu. Cảm ơn rất nhiều!
                            Uh có lần tôi thử viet ct ASM bằng keil C và save bằng đuôi .asm cũng bị lỗi, mà dịch bằng Read51 thì đc, trong khi đó dịch C vẫn tốt. có cao thủ nào biết giải thích hộ cho anh em hiểu. Cảm ơn!
                            Tôi thích cái cầu kỳ của kỹ thuật
                            Nhưng ghét mọi phức tạp trong tính cách con người

                            Comment


                            • ở đây có 2 thư viện để sau dấu (//)....???
                              #include<regx51.H>
                              #include<stdio.h>
                              #include<string.h>
                              //#include<instris.h>
                              #include<math.h>
                              #include<stdlib.h>
                              //#include <conio.h>
                              mà hình như:"Build target 'Target 1' " là quên chưa chọn (Options for Target 'Target 1' )
                              thì phải.
                              Tôi thích cái cầu kỳ của kỹ thuật
                              Nhưng ghét mọi phức tạp trong tính cách con người

                              Comment


                              • Mấy bác cho em hỏi trong C mình viết

                                A = A << 1;

                                có giống với lệnh RL A trong hợp ngữ không.

                                Sao em viết thề này
                                P1 = 0x1; // P1 là Port1 8bit
                                P1 = P1 << 1 thì một vài vòng lặp thì P1 = 0 là sao ạ.

                                mấy bác giải thích giùm em nha, thanks

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X