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

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • Zz_Bi_zZ
    Thành viên tích cực
    • Nov 2007
    • 766

    #751
    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, 18:53.

    Comment

    • ttyanhtu
      Thành viên mới
      • Apr 2009
      • 13

      #752
      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

      • ttyanhtu
        Thành viên mới
        • Apr 2009
        • 13

        #753
        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, 21:50.

        Comment

        • ttyanhtu
          Thành viên mới
          • Apr 2009
          • 13

          #754
          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

          • ttyanhtu
            Thành viên mới
            • Apr 2009
            • 13

            #755
            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

            • demon52
              Thành viên tích cực
              • Mar 2009
              • 305

              #756
              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

              • kidcdt
                Thành viên mới
                • Apr 2009
                • 7

                #757
                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

                • ttyanhtu
                  Thành viên mới
                  • Apr 2009
                  • 13

                  #758
                  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

                  • Zz_Bi_zZ
                    Thành viên tích cực
                    • Nov 2007
                    • 766

                    #759
                    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

                    • kidcdt
                      Thành viên mới
                      • Apr 2009
                      • 7

                      #760
                      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

                      • dcn_105
                        Thành viên mới
                        • Apr 2009
                        • 1

                        #761
                        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

                        • kidcdt
                          Thành viên mới
                          • Apr 2009
                          • 7

                          #762
                          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

                          • ttyanhtu
                            Thành viên mới
                            • Apr 2009
                            • 13

                            #763
                            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

                            • kidcdt
                              Thành viên mới
                              • Apr 2009
                              • 7

                              #764
                              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

                              • thao88
                                Thành viên mới
                                • Mar 2009
                                • 10

                                #765
                                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

                                Đang tải...