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

  • Nguyên văn bởi ttyanhtu Xem bài viết
    mấy bác giúp em vấn đề trên được ko ạ, xin cảm ơn
    A = A<<1 : biến A dịch trái 1 bit . Giá trị sau khi dịch bit , gán lại cho biến A.
    Chú ý khai báo P1=0x01 , ko phải P1=0x1 .

    tui hỉu í u là mún đẩy bit 1 dịch trái hết P1 đúng ko ?
    phải làm
    Code:
    P1=0x00;
    P1=P1|0x01<<1;
    Last edited by Zz_Bi_zZ; 21-04-2009, 19:53.

    Comment


    • Nguyên văn bởi Zz_Bi_zZ Xem bài viết
      A = A<<1 : biến A dịch trái 1 bit . Giá trị sau khi dịch bit , gán lại cho biến A.
      Chú ý khai báo P1=0x01 , ko phải P1=0x1 .

      tui hỉu í u là mún đẩy bit 1 dịch trái hết P1 đúng ko ?
      phải làm
      Code:
      P1=0x00;
      P1=P1|0x01<<1;
      Cảm ơn bạn Bi nhiều, bạn có thể cho thêm dấu ngoặc để mình biết toán tử nào thực hiện trước ko, | hay <<

      Code:
      P1=0x00;
      P1=P1|0x01<<1;
      có khác

      Code:
      P1 = 0x01;
      P1 = P1 << 1

      Comment


      • Nguyên văn bởi Zz_Bi_zZ Xem bài viết
        A = A<<1 : biến A dịch trái 1 bit . Giá trị sau khi dịch bit , gán lại cho biến A.
        Chú ý khai báo P1=0x01 , ko phải P1=0x1 .

        tui hỉu í u là mún đẩy bit 1 dịch trái hết P1 đúng ko ?
        phải làm
        Code:
        P1=0x00;
        P1=P1|0x01<<1;
        Code:
        P1=0x00;
        P1=P1|0x01<<1;
        Keil dịch ra
        Code:
        ORL  	P1,#02H
        đâu thể dịch bit 1 hết P1 được
        Last edited by ttyanhtu; 21-04-2009, 22:50.

        Comment


        • Cho mình hỏi truy xuất các thanh ghi R0-R7 thì làm cách nào vậy bạn??? thanks

          Comment


          • Chương trình chạy led. 8 led nối qua R, rồi nối vào 8 chân Port1. Mỗi đèn sẽ sáng, tắt, rồi đèn kế tiếp sáng, rồi tắt,... và cứ theo chu trình như vậy.

            code hoàn chỉnh, đã test thành công:

            Code:
            #include <AT89X51.H>
            void delay(unsigned char giay);
            
            void main()
            {
            	char i=5;
            	int a;
            	delay(50);
            	ACC = 0x01;
            	P1=0x01;
            	while(1)		
            	{
            		a = ACC;
            		delay(50);
            		ACC = a;
            		#pragma asm
              		RL	A
            		MOV	P1,A
            		#pragma endasm
            	}	
            }//main
            
            
            void delay(unsigned char giay)
            {
            	unsigned int temp;
            	while(giay--)
            	{
            		temp=1000;
            		while(temp--)
            		{
            			
            		}
            	}//while margin
            }
            Các bác xem rồi cho em ý kiến nha, bác nào có code đơn giản hơn thì chỉ em để em học hỏi thêm nha.

            Comment


            • hi,cái mạch đơn giản vậy đâu cần dùng cả asm nhúng vào C chứ?
              Dùng nguyên C nhanh và đơn giản hơn nhiều bạn ạ!
              Web:
              ->Nhận thiết kế, hoàn thiện dự án, sản phẩm điện tử<-
              -->Giải pháp GSM/GPRS/GPS - Công nghệ RFID<--

              Comment


              • có cao thủ nào từng làm qua việc phát nhạc ra loa chưa cho minh hỏi với.mình muốn phát 1 bản nhạc ra loa thì phải làm như thế nào, hiện tại đang dùng 89s52 và loa tích cực mức 0. thank!!!

                Comment


                • Nguyên văn bởi demon52 Xem bài viết
                  hi,cái mạch đơn giản vậy đâu cần dùng cả asm nhúng vào C chứ?
                  Dùng nguyên C nhanh và đơn giản hơn nhiều bạn ạ!
                  Dù j cũng là chương trình đâu tay của mình mà bạn. Mà bảo bạn dùng C luôn nhanh hơn nhiều thì bạn thử cho code mình xem, xem cái nào nhanh hơn cái nào,. hìì, chủ yếu học hỏi là chính mà

                  Comment


                  • Nguyên văn bởi kidcdt Xem bài viết
                    có cao thủ nào từng làm qua việc phát nhạc ra loa chưa cho minh hỏi với.mình muốn phát 1 bản nhạc ra loa thì phải làm như thế nào, hiện tại đang dùng 89s52 và loa tích cực mức 0. thank!!!
                    cái nì làm lâu quéc roy . tại u ko chịu search đó chứ , nhạc phát ra là bài Happy birthday


                    Code:
                    #include<AT892051.h>
                    
                    sbit R4 = 0x90;
                    sbit R3 = 0x91;
                    sbit R2 = 0x92;
                    sbit R1 = 0x93;
                    sbit L1 = 0x94;
                    sbit L2 = 0x95;
                    sbit L3 = 0x96;
                    sbit L4 = 0x97;
                    
                    sbit L5 = 0xB0;
                    sbit L6 = 0xB1;
                    sbit cente = 0xB2;
                    sbit R6 = 0xB3;
                    sbit R5 = 0xB5;
                    
                    unsigned char preloadTH=0xFF,preloadTL=0xFF,mode=0;
                    unsigned int  pointer=0,i=0,j;
                    const float key_octa0[]={16.35,17.32,18.35,19.45,20.6,21.83,23.12,24.5,25.96,27.5,29.14,30.87};
                    const unsigned int chuan=200;
                    const float crystal=11.0592;
                    
                    code unsigned char array[]=											
                    {"5a#,5a#,5b$,5a$,6d$,6C% \
                    5a#,5a#,5b$,5a$,6e$,6d% \
                    5a#,5a#,6a$,6F$,6d#,6d#,6C$,5b$ \
                    6g#,6g#,6F$,6d$,6e$,6d% \
                    6F#,6g#,6d#,6e#,6d#,5b#,5a$,6F$,6e#,6f#,6g$,6g#,6F=,6e#,6d#,6C%,s"
                    };
                    
                    
                    void delay_ms( unsigned int ms )
                    { unsigned int i,j;
                      for (i=0;i<ms;i++)
                      for (j=0;j<120;j++){};
                    }
                    
                    void doitanso(float tanso)
                    {
                       unsigned int giatrinap;
                          giatrinap=65536-(unsigned int)((1000000*crystal)/(24*tanso));
                          preloadTL=(unsigned char)giatrinap;
                          preloadTH=(unsigned char)(giatrinap>>8);   
                    }
                    void key(unsigned char octa,unsigned char k)
                    {
                       float tanso;
                       switch (k)
                       {
                          case 'c' : tanso=key_octa0[0];  break;
                          case 'C' : tanso=key_octa0[1];  break;
                          case 'd' : tanso=key_octa0[2];  break;
                          case 'D' : tanso=key_octa0[3];  break;
                          case 'e' : tanso=key_octa0[4];  break;
                          case 'f' : tanso=key_octa0[5];  break;
                          case 'F' : tanso=key_octa0[6];  break;
                          case 'g' : tanso=key_octa0[7];  break;
                          case 'G' : tanso=key_octa0[8];  break;
                          case 'a' : tanso=key_octa0[9];  break;
                          case 'A' : tanso=key_octa0[10]; break;
                          case 'b' : tanso=key_octa0[11]; break;
                       }
                       switch (octa)
                       {
                          
                          case '5' : tanso*=32;  break;
                          case '6' : tanso*=64;  break;
                          
                       }
                       doitanso(tanso);
                    }
                    unsigned int trave(unsigned int ms)
                    {
                       unsigned int a;
                       a=preloadTH;
                       a=a<<8|preloadTL;
                       return (ms*crystal*1000)/12/(65536-a);
                    }
                    unsigned int tempo(unsigned char tem)
                    {
                    switch (tem)
                       {  
                    	  case '=' : return trave(chuan*3/4); break;	
                          case '#' : return trave(chuan*3/2); break;	
                          case '$' : return trave(chuan*3);   break;    
                    	  case '%' : return trave(chuan*6);   break;   
                    	 
                       }
                    }
                    void timer0_ISR() interrupt 1
                    {
                       P3_7=!P3_7;
                       TL0=preloadTL;
                       TH0=preloadTH;
                       if(i==0)
                          {
                             if(array[pointer]=='s')
                    		 	{ TR0 = 0;
                    			  pointer = 0; // comeback
                    			 
                    			  TR0 = 1;
                    			};
                    		 key(array[pointer],array[pointer+1]);
                             j=tempo(array[pointer+2]);
                          	 
                    	  }
                       i++;
                       if(i==j)
                          {
                             i=0;
                             pointer+=4;
                          }   
                    }
                    
                    void program1() 
                    {  L1 = R1 = 0 ; delay_ms(100);
                       L2 = R2 = 0 ; delay_ms(100);
                       L3 = R3 = 0 ; delay_ms(100);
                       L4 = R4 = 0 ; delay_ms(100);
                       L5 = R5 = 0 ; delay_ms(100);
                       L6 = R6 = 0 ; delay_ms(100);
                       cente = 0   ; delay_ms(100);
                       
                       L1 = R1 = 1 ; delay_ms(100);
                       L2 = R2 = 1 ; delay_ms(100);
                       L3 = R3 = 1 ; delay_ms(100);
                       L4 = R4 = 1 ; delay_ms(100);
                       L5 = R5 = 1 ; delay_ms(100);
                       L6 = R6 = 1 ; delay_ms(100);
                       cente = 1   ; delay_ms(100);
                    }
                    
                    void program2() 
                    {  L1 = 0 ; delay_ms(100);
                       L2 = 0 ; delay_ms(100);
                       L3 = 0 ; delay_ms(100);
                       L4 = 0 ; delay_ms(100);
                       L5 = 0 ; delay_ms(100);
                       L6 = 0 ; delay_ms(100);
                       cente = 0   ; delay_ms(100);
                       
                       R1 = 0 ; delay_ms(100);
                       R2 = 0 ; delay_ms(100);
                       R3 = 0 ; delay_ms(100);
                       R4 = 0 ; delay_ms(100);
                       R5 = 0 ; delay_ms(100);
                       R6 = 0 ; delay_ms(100);
                       
                       cente = 1   ; delay_ms(300);
                       L6 = R6 = 1 ; delay_ms(300);
                       L5 = R5 = 1 ; delay_ms(300);
                       L4 = R4 = 1 ; delay_ms(300);
                       L3 = R3 = 1 ; delay_ms(300);
                       L2 = R2 = 1 ; delay_ms(300);
                       L1 = R1 = 1 ; delay_ms(300);
                    }
                    void main(void)
                    { 
                       
                       TMOD =0x01; // dung timer0 16 bit
                       TL0  =0xFF;
                       TH0  =0xFF;
                       ET0  =1;
                       EA   =1; // chua cho phep ngat
                       TR0  =1;
                       
                       P1 = 0xFF  ; 
                       P3_0 = P3_1 = P3_3 = P3_5 = 1;
                       
                      
                       while (1) 
                       { program1() ;
                       	 program2() ;
                       }
                    }

                    Comment


                    • nói chung là mình chỉ biết là phải thay đổi tần số ra loa nhưng không biết tần số từng nốt nhạc thì làm sao mà viết. bác Bi có tài liệu về thứ này không. mình không muốn viết bài happybirthday đó. muốn viết bài khác với những nốt khác thì thế nào?

                      Comment


                      • keil c

                        mình có 1 chương trình viết theo kiểu liệt kê dùng cho 89s52 má không hiểu vì sao nó không chạy.mọi người có ai biết giúp mình với.minh đang cần lắm.thank

                        Comment


                        • thì u cứ post chương trinh lên xem nào. như vâyk khó phát hiện lỗi lắm

                          Comment


                          • Ai có thể cho mình biết cách để phát âm thanh ra loa ko, vì âm thanh ngoài tần số còn có âm sắc nữa mà. tiếng đàn, tiếng hát, tiếng sáo, ... làm sao để cho nó kêu được như vậy,, xin chỉ giáo

                            Comment


                            • mọi người đi đâu hết rồi mà chẳng có ai thế này. chắc cái topic này sắp mốc đến nơi rồi!!!!!

                              Comment


                              • ai có bài viết nào về cách ngắt của 89 gửi cho em với. em cảm ơn trước nhe.

                                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

                                • mèomướp
                                  Trả lời cho Công thức điện tử
                                  bởi mèomướp
                                  Dạ thời thế giờ thay đổi theo hướng tích cực hơn rồi chú trung sĩ ạ. Kiến thức được chia sẻ ngày càng nhìu nên làm ăn gian dối ko còn dễ dàng như trước đâu ạ. Những thợ nhỏ rồi sẽ thành công nhân sản xuất đồ mới hết thay vì sửa chữa lặt vặt...
                                  hôm nay, 21:21
                                • mèomướp
                                  Trả lời cho Xin hỏi về màn hình laptop
                                  bởi mèomướp
                                  Dạ cùng chuẩn tín hiệu thì chắc chắn là nhận ạ. Vì bản chất oled hay lcd thì đều phải có mạch chuyển đổi trên thanh gỗ rồi chuyển sang những chip xử lý hàng nghìn chân gắn trên những tab mỏng dính rồi mới ra các điểm ảnh theo hàng...
                                  hôm nay, 20:31
                                • yname11
                                  Trả lời cho Xin hỏi về màn hình laptop
                                  bởi yname11
                                  Ok , thanks bác đã chỉ...
                                  hôm nay, 15:06
                                • nguyendinhvan
                                  Công thức điện tử
                                  bởi nguyendinhvan
                                  Sau bao năm nghiên cứu cái dtvn. Tôi phát hiện công thức này. Các anh em xem đúng bao nhiêu phần trăm nhé !

                                  Chập thì thay. Cháy thì tháo
                                  Làm thì láo. Báo thì hay
                                  May thì khoe. Rủi thì bỏ
                                  Thành tích nhỏ. Báo thành to
                                  Làm cho có. Báo chi li
                                  Sai cả li. Báo
                                  ...
                                  hôm nay, 00:35
                                • yname11
                                  Trả lời cho Xin hỏi về màn hình laptop
                                  bởi yname11
                                  có chắc ko b, màn lcd phải có cao áp mới sáng, màn led thì ko có, ko có cáp chuyển đổi thì lắp thế nào đc ??...
                                  Hôm qua, 22:31
                                • mèomướp
                                  Trả lời cho Xin hỏi về màn hình laptop
                                  bởi mèomướp
                                  Dạ ý chú là màn oled ấy ạ. Cùng chuẩn lvds cùng độ phân giải thì cắm được ạ. Còn nó mà khác thì hơi khó vì oled các điểm ảnh nó tự phát sáng chứ ko dùng đèn nền như lcd. Cháu chỉ biết đến vậy thôi ạ. Chú muốn nghịch phải tự tìm hiểu kỹ trước khi mua thôi, khó mà ông thợ nào tư vấn vụ này...
                                  Hôm qua, 22:14
                                • bactho
                                  Trả lời cho Tự làm máy đo Cuộn cảm
                                  bởi bactho
                                  Hay đấy bạn ạ. Đây có thể hiểu là máy đo cuộn dây. Tiện đây xin cho hỏi bạn có hiểu rõ về máy nạp rôm pcb 45 của hãng thiên minh không giúp mình cách cài fw của nó với vì mình vừa được anh bạn cho nhưng lại không biết cài fw nên chưa dùng được. Nếu có thể thì bạn giúp mình với...
                                  Hôm qua, 21:48
                                • yname11
                                  Trả lời cho Xin hỏi về màn hình laptop
                                  bởi yname11
                                  màn của mình là LCD , giờ m muốn mua màn LED để thay thế (ko muốn dùng màn LCD nữa) , lên muốn hỏi xem có cáp chuyển đổi nào có thể cắm đc màn LED vào ko , tất nhiên phải có cùng số chân pin với màn cũ rồi . VD: màn cũ là lcd mỏng , 40 pin...
                                  Hôm qua, 21:43
                                • bactho
                                  Trả lời cho các bạn giúp mình về file HEX với!!!
                                  bởi bactho
                                  Bạn vào trang phuclanshop.com ,tìm đến góc kỹ thuật. Tác giả vương khánh hưng nói rất rõ về điều bạn tìm...
                                  Hôm qua, 21:21
                                • mèomướp
                                  Trả lời cho Xin hỏi về màn hình laptop
                                  bởi mèomướp
                                  Dạ màn hình lcd đều có thể lai cấy cho nhau được hết ạ. Các loại cáp, bo mạch chuyển đổi lvds rất nhìu, với dòng sony còn phải nhổ cả chip nhớ của main cũ đưa lên gỗ thì mới lắp sang máy khác đc, chưa kể các bệnh về màu... ngay cả...
                                  Hôm qua, 20:43
                                Đang tải...
                                X