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

                                Đang tải...
                                X