Thông báo

Collapse
No announcement yet.

Dành cho người mới tìm hiểu 8051

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

  • #91
    chao QUYNH ! minh dang co bai tap lon lien quan den 8051 ,minh dang can rat gap ,ban co the gui cuon sach do den cho minh theo dia chi thucdong2000@yahoo.com ,cam on ban rat nhieu

    Comment


    • #92
      ok.mình gửi cho 2 bạn rồi.
      Thế giới quả là rộng lớn, và có rất nhiều việc phải làm.

      Comment


      • #93
        hướng dẫn của các ban rất chi tiết và hay. bạn có tập lệnh của keil c (tiếng việt càng tốt) viết cho 89c51 ko? nếu ban có gửi cho mình với.

        thanhhai08@gmail.com

        thank!

        Comment


        • #94
          Tập lệnh trong keil C ko khác gì so với C cả, chỉ khác ở 1 số thủ tục vào ra thôi. Bạn mua quyển học lập trình C mà tham khảo nhé.
          Thân ái.
          Thế giới quả là rộng lớn, và có rất nhiều việc phải làm.

          Comment


          • #95
            cac bác cho em hỏi em làm như thế này mà không hiểu sao nó lại bị nhấp nháy, led sang yếu( em đã thử trên mạch thật). các bác chỉ giúp em. em có gửi cả bản mô phỏng bằng Proteus.
            cảm ơn!!!!

            //chuong trinh thu nghiem quet LED 7 tu mot con so dua vao

            #include<AT89x51.h>


            #define LED8 P1_0
            #define LED7 P1_1
            #define LED6 P1_2
            #define LED5 P1_3
            #define LED4 P1_4
            #define LED3 P1_5
            #define LED2 P1_6
            #define LED1 P1_7
            #define Yes 1
            #define No 0
            //dinh nghia cac bien dung cho su ly tach so
            #define donvi 0
            #define chuc 1
            #define tram 2
            #define nghin 3
            #define van 4
            #define tramnghin 5
            #define trieu 6
            #define vantrieu 7


            /*
            #define a P0_0
            #define b P0_1
            #define c P0_2
            #define d P0_3
            #define e P0_4
            #define f P0_5 ....
            */

            unsigned long Buffer[8];
            bit fg=No;
            //0 , 1 , 2 , 3 ,4 ,5 ,6 ,7 ,8
            const char LEDi[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,
            0x98,0x88,0xC6,0x86,0x8E,0x82,0x89,0x7F,0xFF};
            // 9 , A , B , C , D ,E , F , . , TRANG

            void delay(unsigned char ms) // tre ms
            {
            unsigned char i=121;
            while(ms--)
            {
            while(i--);
            }
            }

            void BCD(unsigned long so)
            {

            //tach cac so ra theo don vi tuong ung
            Buffer[donvi]=so%10; //lay so du
            Buffer[chuc]=so/10;
            Buffer[tram]=so/100;
            Buffer[nghin]=so/1000;
            Buffer[van]=so/10000;
            Buffer[tramnghin]=so/100000;
            Buffer[trieu]=so/1000000 ;
            Buffer[vantrieu]=so/10000000 ;

            // tach rieng tung so mot
            // theo dung hang don vi va tram cua chung
            if(Buffer[chuc]<=0) Buffer[chuc]=16; //=16 la tat het cac led
            else if(Buffer[chuc]>=10) Buffer[chuc]%=10;

            if(Buffer[tram]<=0) Buffer[tram]=16; //=16 la tat het cac led
            else if(Buffer[tram]>=10) Buffer[tram]%=10;

            if(Buffer[nghin]<=0) Buffer[nghin]=16; //=16 la tat het cac led
            else if(Buffer[nghin]>=10) Buffer[nghin]%=10;

            if(Buffer[van]<=0) Buffer[van]=16; //=16 la tat het cac led
            else if(Buffer[van]>=10) Buffer[van]%=10;

            if(Buffer[tramnghin]<=0) Buffer[tramnghin]=16; //=16 la tat het cac led
            else if(Buffer[tramnghin]>=10) Buffer[tramnghin]%=10;

            if(Buffer[trieu]<=0) Buffer[trieu]=16; //=16 la tat het cac led
            else if(Buffer[trieu]>=10) Buffer[trieu]%=10;

            if(Buffer[vantrieu]<=0) Buffer[vantrieu]=16; //=16 la tat het cac led
            else if(Buffer[vantrieu]>=10) Buffer[vantrieu]%=10;


            }

            void hienthi()
            {


            {
            P0=LEDi[Buffer[donvi]];
            LED1=0;
            delay(1);
            LED1=1;

            P0=LEDi[Buffer[chuc]];
            LED2=0;
            delay(1);
            LED2=1;

            P0=LEDi[Buffer[tram]];
            LED3=0;
            delay(10);
            LED3=1;

            P0=LEDi[Buffer[nghin]];
            LED4=0;
            delay(1);
            LED4=1;

            P0=LEDi[Buffer[van]];
            LED5=0;
            delay(1);
            LED5=1;

            P0=LEDi[Buffer[tramnghin]];
            LED6=0;
            delay(1);
            LED6=1;

            P0=LEDi[Buffer[trieu]];
            LED7=0;
            delay(1);
            LED7=1;

            P0=LEDi[Buffer[vantrieu]];
            LED8=0;

            delay(1);
            LED8=1;








            }
            }

            void ngat(void)interrupt 2 using 1 // su dung ngat ngoai
            {

            if (P3_3==0) fg=Yes;

            }

            void main(void)
            {

            unsigned long j=0;
            //TMOD=0x02;

            EX1=1;
            P0=1;
            P1=1;

            EA=1; //cho phep su dung ngat
            //TR1=1;

            while(1)
            {
            if (fg==Yes) j=j+1;
            else fg=No;
            BCD(j);
            hienthi();
            //fg=No;
            }

            }
            n
            ĐT: 0986 492 489

            Tham khảo:

            Comment


            • #96
              huynh thử xài con chốt xem , lập trình đơn giản mà lại chạy rất chính xác , đệ đã làm rùi và chạy rất ngon (con chốt thì đệ xài con 74ls373)

              Comment


              • #97
                Chào các bạn ,từ trước đến giờ tôi chỉ viết cho 8051 bằng asm ,hôm vừ rồi có cóp 1 file của bạn Vũ Hà Linh viết bằng C về dịch thử bằng Keil song báo nhiều lỗi o hiểu tại sao. Keil 709 tôi down từ diễn đàn về. Nhờ bạn Linh giải đáp giúp nhé .Cảm ơn.
                Đa
                Đây là file List sau khi đã dịch:
                C51 COMPILER V7.09 LCDVD 12/03/2006 23:38:21 PAGE 1


                C51 COMPILER V7.09, COMPILATION OF MODULE LCDVD
                OBJECT MODULE PLACED IN D:\Keil\C51\BIN\lcdvd.OBJ
                COMPILER INVOKED BY: D:\Keil\C51\BIN\c51.exe D:\Keil\C51\BIN\lcdvd.c

                line level source

                1 /************************************************** **************************/
                2 /* */
                3 /* File: lcd.c */
                4 /* Author: Vu Ha Linh, Automatic Control Deparment */
                5 /* Ha Noi university of technology */
                6 /* */
                7 /************************************************** **************************/
                8 /* */
                9 /* Function: This module is a standard LCD (16x2) functions */
                10 /* */
                11 /* Input and Output parameters of those subroutines: */
                12 /* void LCD_Init(void); */
                13 /* void LCD_Position(unsigned char, unsigned char); */
                14 /* void LCD_PutCmd(unsigned char); */
                15 /* void LCD_PutChar(unsigned char); */
                16 /* void LCD_PrString(char*); */
                17 /* void LCD_Clear(void); */
                18 /* void LCD_PrInteger(int); */
                19 /* */
                20 /* Note: Must be call LCD_Init() first at the begining of program */
                21 /* */
                22 /************************************************** **************************/
                23 /* */
                24 /* History: */
                25 /* Version: */
                26 /* Date Writer Remark */
                27 /* */
                28 /* 30-07-2006 Vu Ha Linh Creating the first version */
                29 /* */
                30 /* */
                31 /************************************************** **************************/
                32
                33 #include <REGX51.H>
                *** WARNING C318 IN LINE 33 OF D:\Keil\C51\BIN\lcdvd.c: can't open file 'REGX51.H'
                34 #include "lcd.h"
                *** WARNING C318 IN LINE 34 OF D:\Keil\C51\BIN\lcdvd.c: can't open file 'lcd.h'
                35
                36 /************************************************** ***************************
                37 define Hardware address
                38 it can changed by user
                39 ************************************************** ***************************/
                40 #define LCD_PORT P1
                41
                42 sbit LCD_RS = P3^2;
                *** ERROR C202 IN LINE 42 OF D:\KEIL\C51\BIN\LCDVD.C: 'P3': undefined identifier
                43 sbit LCD_RW = P3^3;
                *** ERROR C202 IN LINE 43 OF D:\KEIL\C51\BIN\LCDVD.C: 'P3': undefined identifier
                44 sbit LCD_EN = P3^4;
                *** ERROR C202 IN LINE 44 OF D:\KEIL\C51\BIN\LCDVD.C: 'P3': undefined identifier
                45 sbit LCD_D7 = P1^7;
                *** ERROR C202 IN LINE 45 OF D:\KEIL\C51\BIN\LCDVD.C: 'P1': undefined identifier
                46
                47 #define ReadCommand {LCD_RS = 0; LCD_RW = 1;}
                48 #define WriteCommand {LCD_RS = 0; LCD_RW = 0;}
                49 #define WriteData {LCD_RS = 1; LCD_RW = 0;}
                C51 COMPILER V7.09 LCDVD 12/03/2006 23:38:21 PAGE 2

                50 #define LatchData {LCD_EN = 1; LCD_EN = 0;}
                51
                52 /************************************************** **************************
                53 WaitReady function
                54 Wait while LCD in execution time
                55 ************************************************** ***************************/
                56 void WaitReady(void)
                57 {
                58 1 ReadCommand; // Set Read command mode
                *** ERROR C202 IN LINE 58 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_RS': undefined identifier
                *** ERROR C202 IN LINE 58 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_RW': undefined identifier
                59 1 LCD_D7 = 1;
                *** ERROR C202 IN LINE 59 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_D7': undefined identifier
                60 1 while(LCD_D7){
                *** ERROR C202 IN LINE 60 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_D7': undefined identifier
                61 2 LCD_EN = 0;
                *** ERROR C202 IN LINE 61 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_EN': undefined identifier
                62 2 LCD_EN = 1; // Read bit D7
                *** ERROR C202 IN LINE 62 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_EN': undefined identifier
                63 2 }
                64 1 }
                65
                66 /************************************************** **************************
                67 LCD_PutCmd function
                68 Write a control byte to LCD
                69 Input : control byte
                70 ************************************************** ***************************/
                71 void LCD_PutCmd(unsigned char cmd)
                72 {
                73 1 WaitReady(); // Wait for LCD ready
                74 1 WriteCommand; // set LCD to send mode
                *** ERROR C202 IN LINE 74 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_RS': undefined identifier
                *** ERROR C202 IN LINE 74 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_RW': undefined identifier
                75 1 LCD_PORT = cmd; // Prepare to send
                *** ERROR C202 IN LINE 75 OF D:\KEIL\C51\BIN\LCDVD.C: 'P1': undefined identifier
                76 1 LatchData; // latch data out
                *** ERROR C202 IN LINE 76 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_EN': undefined identifier
                *** ERROR C202 IN LINE 76 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_EN': undefined identifier
                77 1 }
                78
                79 /************************************************** **************************
                80 LCD_PutChar function
                81 Write a ASCII symbol to LCD
                82 Input: ASCII symbol
                83 ************************************************** ***************************/
                84 void LCD_PutChar(unsigned char ch)
                85 {
                86 1 WaitReady();
                87 1 WriteData;
                *** ERROR C202 IN LINE 87 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_RS': undefined identifier
                *** ERROR C202 IN LINE 87 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_RW': undefined identifier
                88 1 LCD_PORT = ch;
                *** ERROR C202 IN LINE 88 OF D:\KEIL\C51\BIN\LCDVD.C: 'P1': undefined identifier
                89 1 LatchData;
                *** ERROR C202 IN LINE 89 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_EN': undefined identifier
                *** ERROR C202 IN LINE 89 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_EN': undefined identifier
                90 1 }
                91
                92 /************************************************** ***************************
                93 LCD_PrString function
                94 Write a string to LCD
                95 Input: string
                C51 COMPILER V7.09 LCDVD 12/03/2006 23:38:21 PAGE 3

                96 ************************************************** ****************************/
                97 void LCD_PrString(char *str)
                98 {
                99 1 while(*str!='\0')
                100 1 {
                101 2 LCD_PutChar(*str);
                102 2 ++str;
                103 2 }
                104 1 }
                105
                106 /************************************************** ***************************
                107 LCD_Position function
                108 Set the position of cursor on LCD
                109 Input: row, column
                110 ************************************************** ****************************/
                111 void LCD_Position(unsigned char row, unsigned char col)
                112 {
                113 1 LCD_PutCmd( (1<<7)|(row<<6)|col );
                114 1 }
                115
                116 /************************************************** ***************************
                117 LCD_Clear function
                118 Clear LCD
                119 ************************************************** ****************************/
                120 void LCD_Clear()
                121 {
                122 1 LCD_PutCmd(LCD_CLEAR);
                *** ERROR C202 IN LINE 122 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_CLEAR': undefined identifier
                123 1 }
                124
                125 /************************************************** ***************************
                126 LCD_Init function
                127 Prepare for display content. Must be called at first
                128 ************************************************** ****************************/
                129 void LCD_Init()
                130 {
                131 1 LCD_PutCmd(0x30); // Data length setting, 8 bits
                132 1 LCD_PutCmd(0x30); // Data length setting, 8 bits
                133 1 LCD_PutCmd(0x30); // Data length setting, 8bits
                134 1
                135 1 LCD_PutCmd(LCD_FONT); // Function set: 8 bits, 2 lines, font 5x7
                *** ERROR C202 IN LINE 135 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_FONT': undefined identifier
                136 1 LCD_PutCmd(LCD_OFF); // Display and cursor OFF
                *** ERROR C202 IN LINE 136 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_OFF': undefined identifier
                137 1 LCD_PutCmd(LCD_CLEAR); // Clear display
                *** ERROR C202 IN LINE 137 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_CLEAR': undefined identifier
                138 1 LCD_PutCmd(LCD_MOVE_CURSOR); // Entry mode set: Increment mode, not shift
                *** ERROR C202 IN LINE 138 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_MOVE_CURSOR': undefined identifier
                139 1 LCD_PutCmd(LCD_DISPLAY_ON); // Display ON
                *** ERROR C202 IN LINE 139 OF D:\KEIL\C51\BIN\LCDVD.C: 'LCD_DISPLAY_ON': undefined identifier
                140 1 // LCD_PutCmd(LCD_BLINK_CURSOR); // Blink cursor
                141 1 }
                142
                143 /************************************************** **************************
                144 LCD_PrInteger function
                145 Display a integer decimal number on LCD
                146 Input: a integer number
                147 ************************************************** ***************************/
                148 void LCD_PrInteger(int num)
                149 {
                150 1 int temp;
                151 1 unsigned char i, c[5];
                C51 COMPILER V7.09 LCDVD 12/03/2006 23:38:21 PAGE 4

                152 1
                153 1 temp = num;
                154 1 if (temp != 0) {
                155 2 if (temp < 0) {
                156 3 LCD_PutChar('-');
                157 3 temp = -temp;
                158 3 }
                159 2 i = 0;
                160 2 while(temp){
                161 3 c[i++] = temp%10;
                162 3 temp /= 10;
                163 3 }
                164 2 while(i) LCD_PutChar(c[--i] + '0');
                165 2 }
                166 1 else LCD_PutChar('0');
                167 1 }
                168
                169 /************************* END OF FILE *******************************/
                170
                171
                172

                C51 COMPILATION COMPLETE. 2 WARNING(S), 26 ERROR(S)

                Comment


                • #98
                  Cảm ơn Quỳnh nhiều nha, mình là dân mới tập tành về VDK nên còn lơ mơ lắm và ỏ chổ minh ở cũng chẳng ai dạy dỗ vấn đề này nên phải tự mò, có gi` hay mong chỉ giáo thêm. binhfordlmt@yahoo.com, cho xin email được ko ? or số cầm tay? THANKS rất nhiều.

                  Comment


                  • #99
                    Anh Bình Anh cho em xin bản demos của chương trình lập trình điều khiển tốc độ động cơ một chiều không ạ? (điều khiển độ rộng xung)

                    Comment


                    • mach do nhiet do dung lcd

                      có ai cho tôi cả mạch nguyên lý và phần lập trình cho nó bằng c để tôi tham khảo chút không.
                      cám ơn nhiều.

                      Comment


                      • chào các bạn, mình đang bước đầu học vi điều khiển mình thấy các bạn thảo luận toàn là cách lập trình ,chả thấy master nào nói về cách làm phần cứng giao tiếp với rom (chương trình) ngoài, ram, ic ngoại vi(8255), bây giờ mình cần kết nối 1 con vdk 89c51 với 3con 8255,1ram16k, 1rom 8k,1 con giải mã bàn phím (con gì mình quên mất rồi), 1 con 8253 thì làm thế nào bây giờ?, nếu làm xong phần này thì mới thực sự làm chủ xong phần cứng của 8051.bài giải mã ở trên mình nhờ bạn Quỳnh giúp cho nhé!( bạn hướng dẫn chi tiết dùm mình)
                        Lại còn vân đề đệm bus địa chỉ , đệm bus dữ liệu,khi giải mã địa chỉ thì lúc chọn trang 2k, lúc chọn trang 8k....(bạn nào nói rõ phần này hộ mình), làm mình đien hết đầu, mình muốn hỏi khi nào cần đệm(bạn nào hiểu rõ hãy cho một ví dụ minh họa càng cụ thể càng tốt)
                        Nếu làm thành thạo việc giao tiếp với các ic như ở trên thì phần mềm có thể tự nghiên cứu cũng được, chứ phần cứng anh làm sai be sai bét thì viết giỏi cõ nào cũng bó tay.
                        Mình nghĩ phương pháp tốt nhất là giới thiệu cái tổng quan, và giúp người học thành thạo cái tổng quan đó, rồi còn đi vào chi tiết thì để người tự học, không hiểu chỗ nào thì hỏi, tự ngâm cứu bao giờ cũng thú vị hơn chứ !
                        mình đọc sách của tống văn on, kể cả sách tiếng anh dày cộp thầy mình đưa cho, thấy vấn đề giao tiếp với ic nhớ, ic ngoại vi không nhiều lắm(hơi qua loa thì phải).
                        mình không tạo thread mới vì sợ mấy master chê cười rằng phần giải mã địa chỉ là phần cơ bản, e rằng lại trả lời vắn tắt quá hoặc tệ hơn là phán một cầu bạn đọc thêm sách hay học lai đi bồ thì toi(ông cuong quậy đã trả lời như rứa đối với một bạn đăt câu hỏi tương tự trong www.3ihut.com,it ra cũng phải giúp người ta chứ, có ngu thì mới hỏi chứ bồ, bồ có giỏi cỡ mấy cũng không thể qua mặt các chú tây béo được,bằng chứng là bồ vẫn xài chùa phần mềm của họ đây thôi,họ giỏi vì có lẽ học hỗ trợ nhau rất tốt, thầy chủ nhiệm mình có nói: 3 thằng châu á rơi xuống một cái hỗ sâu trong rừng thì 3 thằng đứt cả còn 3 thằng tây thì lại sống nhăn rằng, chắc các bạn hiểu là tại sao;
                        Trong sách không nói nhiêu, hỏi thầy thì ôi thôi, lại giáo điều .......nên mình mới diễn đàn hỏi chứ bộ!
                        Bạn quỳnh cho mình xin email để có thể trao đổi thêm.
                        email của mình là: dieungoclongvn@gmail.com

                        Comment


                        • gui cho toi vao Yahoo nhe
                          huycanhaiphong@yahoo.com
                          xin chan thanh cam on ban rat nhieu

                          Comment


                          • bạn quỳnh đâu rồi ,lên tiếng đi chứ bạn?
                            sao moi người im ắng thế?

                            Comment


                            • Bac Quynh co the gui cho em may cuon hoc ve VDK o
                              em moi bat dau hoc nên cam thay kho wa
                              Dia chi cua em la tranmanhtienat@gmail.com
                              thanks bac nhieu
                              |

                              Comment


                              • minh moi down dc cuon final word for 8051 ban nao can mail cho toi theo dia chi tranmanhtienat@gmail.com
                                |

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X