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

  • bác zemen có chương trình quét led 7doan anode không pót lên cho emn tham khảo với

    Comment


    • cần giúp đở gấp nếu không ai trả lời thì chắc tạm biệt diển đàn luôn thôi vì hỏi nhiều mà chả ai trả lời he
      các bác cho em hỏi cái chương trình em viết chạy mấy con Led đơn thôi mà em không biết sai ở đâu mà mô phỏng mải không được mặc dù nó khá giống với chương trình của bác zemen
      #include<regx51.h>
      extern void delay_ms(unsigned int x);
      ///////////////////////////////////////////////////////////////////////////
      void delay_ms(unsigned int x){
      unsigned char TGIAN_TRE1;
      while(x--)
      {
      TGIAN_TRE1=122;
      while(TGIAN_TRE1--);
      }
      }
      ///////////////////////////////////////////////////////////////////////////
      void main()
      {
      unsigned char solanquay=8;
      P0=0xFE;
      while(solanquay!=0){
      P0=P0<<1;
      delay_ms(1000);
      solanquay=solanquay-1;
      }
      taicho:
      goto taicho;
      }

      Comment


      • muốn chống nhiểu cho 89c51 thì tốt nhất là cách ly phần công suất với phần vi điều khiển cái đó thuộc về phần thiết kế mạch thôi, bạn vào phần diển dàn về thiết kế mạch ấy. còn con 89c51 và 89c52 thì mức độ ổn định như nhau thôi

        Comment


        • Nguyên văn bởi yeubom1 Xem bài viết
          cần giúp đở gấp nếu không ai trả lời thì chắc tạm biệt diển đàn luôn thôi vì hỏi nhiều mà chả ai trả lời he
          các bác cho em hỏi cái chương trình em viết chạy mấy con Led đơn thôi mà em không biết sai ở đâu mà mô phỏng mải không được mặc dù nó khá giống với chương trình của bác zemen
          #include<regx51.h>
          extern void delay_ms(unsigned int x);
          ///////////////////////////////////////////////////////////////////////////
          void delay_ms(unsigned int x){
          unsigned char TGIAN_TRE1;
          while(x--)
          {
          TGIAN_TRE1=122;
          while(TGIAN_TRE1--);
          }
          }
          ///////////////////////////////////////////////////////////////////////////
          void main()
          {
          unsigned char solanquay=8;
          P0=0xFE;
          while(solanquay!=0){
          P0=P0<<1;
          delay_ms(1000);
          solanquay=solanquay-1;
          }
          taicho:
          goto taicho;
          }
          Chương trình trên chỉ dịch một lần rồi thôi, nếu muốn lặp lại nhiều lần thì
          void main()
          {while(1){
          unsigned char solanquay=8;
          P0=0xFE;
          while(solanquay!=0){
          P0=P0<<1;
          delay_ms(1000);
          solanquay=solanquay-1;
          }
          }
          }
          Hê chạy thử coi được không, mình chưa chạy thử nữa

          Comment


          • Có ai rành về i2c help me

            Cái này viết bằng ASM
            Code:
            ;============CHUONG TRINH CON DOC BYTE TU AT24C04
            READ_BYTE_AT:
            	PUSH	B
            	PUSH	ACC
            	PUSH	01
            	MOV	R1,DATAS
            READ_BYTE1:
            	MOV	B,ADDRESS
            	ACALL	READ_BYTE
            	MOV	@R1,A
            	INC	ADDRESS
            	DEC	R1
            	MOV	A,R1
            	CJNE	A,TEMP,READ_BYTE1	
            	POP	01
            	POP	ACC
            	POP	B	
            	RET
            ;=========================================================;============CHUONG TRINH CON GHI BYTE TU AT24C04;=========================================================WRITE_BYTE_AT:
            	PUSH	ACC
            	PUSH	B
            	PUSH	01
            	MOV	R1,DATAS
            WRITE_BYTE1:
            	MOV	A,@R1
            	MOV	B,ADDRESS
            	ACALL	WRITE_BYTE					;
            	INC	ADDRESS
            	DEC	R1
            	MOV	A,R1
            	CJNE	A,TEMP,WRITE_BYTE1
            	POP	01	
            	POP	B
            	POP	ACC
            	RET
            ;=========================================================
            ; CHUONG TRINH DOC MOT BYTE DU LIEU TU ROM 24C04
            ; THANH GHI A CHUA DATA, THANH GHI B CHUA ADDRESS
            ;========================================================
            READ_BYTE:
            	PUSH	01
            	ACALL	START					
            ;-------------------------------------------------------------------------
              	CLR   SCK
              	ACALL DE_100ms
              	SETB  SDA1
              	ACALL	C_PULSE
            ;-------------------------------------------------------------------------  	CLR   SDA    						  	ACALL C_PULSE
            ;-------------------------------------------------------------------------  	SETB  SDA
              	ACALL C_PULSE
            ;-------------------------------------------------------------------------  	CLR   SDA    						 	ACALL C_PULSE
            ;-------------------------------------------------------------------------  	ACALL C_PULSE 					  	ACALL C_PULSE
              	ACALL C_PULSE
            ;-------------------------------------------------------------------------  	ACALL C_PULSE
            ;-------------------------------------------------------------------------  	ACALL C_PULSE 					; ACK
            ;-------------------------------------------------------------------------	MOV	R1,#8
            	MOV	A,B
            READ_BYTE01:
            	RRC	A
             	MOV   SDA,C
            	ACALL	C_PULSE
            	DJNZ	R1,READ_BYTE01
            ;-------------------------------------------------------------------------
              	ACALL C_PULSE 					; ACK
            ;-------------------------------------------------------------------------
            	ACALL	START
            ;-------------------------------------------------------------------------
              	CLR   SCK
              	ACALL DE_100ms
              	SETB  SDA    						  	ACALL C_PULSE
            ;-------------------------------------------------------------------------  	CLR   SDA    						; 
              	ACALL C_PULSE
            ;-------------------------------------------------------------------------
              	SETB  SDA    						
              	ACALL C_PULSE
            ;-------------------------------------------------------------------------
              	CLR   SDA    						  	ACALL C_PULSE
            ;-------------------------------------------------------------------------  	ACALL C_PULSE 				;DIA CHI 000
              	ACALL C_PULSE
              	ACALL C_PULSE
            ;-------------------------------------------------------------------------
              	SETB  SDA
              	ACALL C_PULSE 					;1 : READ
            ;------------------------------------------------------------------------
              	SETB  SDA
              	ACALL C_PULSE 					; ACK
            ;-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
            	MOV	R1,#8
            READ_BYTE02:
              	MOV   	C,SDA
            	RRC	A
              	ACALL C_PULSE
            	DJNZ	R1,READ_BYTE02
            ;-------------------------------------------------------------------------;-------------------------------------------------------------------------
            	ACALL	STOP	
            	POP	01 
             	RET
            ;=========================================================
            ;=======CHUONG TRINH GHI MOT BYTE DU LIEU TU ROM 24C04=========
            ;=======THANH GHI A CHUA DATA, THANH GHI B CHUA ADDRESS=======
            ;=========================================================
            WRITE_BYTE:
            	PUSH	01
            	ACALL	START						
            ;-------------------------------------------------------------------------
              	CLR   SCK
              	ACALL DE_100ms
              	SETB  SDA     						;
              	ACALL C_PULSE
            ;-------------------------------------------------------------------------
              	CLR   SDA         					; 0
              	ACALL C_PULSE 
            ;-------------------------------------------------------------------------
              	SETB  SDA   					; 1
              	ACALL C_PULSE
            ;-------------------------------------------------------------------------
              	CLR   SDA         					; 0
              	ACALL C_PULSE
            ;-------------------------------------------------------------------------
              	ACALL C_PULSE 				; DIA CHI 000
              	ACALL C_PULSE
              	ACALL C_PULSE
            ;-------------------------------------------------------------------------
              	ACALL C_PULSE 					;0 : WRITE
            ;-------------------------------------------------------------------------
              	ACALL C_PULSE 					; ACK
            ;-------------------------------------------------------------------------
            	PUSH	ACC
            	MOV	R1,#8
            	MOV	A,B
            WRITE_BYTE01:
            	RRC	A
             	MOV   	SDA,C
            	ACALL	C_PULSE
            	DJNZ	R1,WRITE_BYTE01
            	POP	ACC
            ;-------------------------------------------------------------------------
              	ACALL C_PULSE 					; ACK
            ;-------------------------------------------------------------------------
            	MOV	R1,#8
            WRITE_BYTE02:
            	RRC	A
              	MOV   	SDA,C
              	ACALL 	C_PULSE
            	DJNZ	R1,WRITE_BYTE02
            ;-------------------------------------------------------------------------
              	ACALL C_PULSE 					; ACK
            ;-------------------------------------------------------------------------
            	ACALL	STOP				; Dieu kien STOP
            	POP	01
            	RET
            ;=========================================================
            ;====================STARTCONDITION========================;=========================================================
            START:
              	SETB  SDA					;
              	SETB  SCK					;
              	ACALL	DE_100ms				;
              	CLR   SDA  					; START
              	ACALL DE_100ms					;
            	RET
            ;=========================================================;=====================STOPCONDITION========================;=========================================================
            STOP:
            	CLR   SDA					;
              	ACALL DE_100ms					;
              	SETB  SCK					;
              	ACALL DE_100ms					;
              	SETB  SDA    					; STOP
              	ACALL DE_1000ms					;
              	RET 
            ;=========================================================
            C_PULSE:
              	ACALL DE_100ms					;
              	SETB  SCK					;
              	ACALL DE_100ms					;
             	CLR   SCK					;
              	ACALL DE_100ms 					;
              	RET
            ;=========================================================
            ;=========================================================
            DE_100ms:
              	PUSH  07
              	MOV   R7,#250
              	DJNZ  R7,$
              	POP   07
              	RET
            ;=========================================================
            ;=========================================================
            DE_1000ms:
              	PUSH  06
              	PUSH  07
              	MOV   R6,#30
            LOOP_DL:
              	MOV   R7,#200 
              	DJNZ  R7,$
              	DJNZ  R6,LOOP_DL
              	POP   07
              	POP   06
            	RET
            Chương trình này chạy rất tốt
            READ_SETPOINT:
            MOV ADDRESS,#100 ; Dia chi o nho trong AT24C04
            MOV DATAS,#SET1 ; Dia chi luu gia tri doc tu AT24C04
            MOV TEMP,#DK1 ; Gia tri so sang de thoat khoi chuong ACALL READ_BYTE_AT ; Chuong trinh con doc loat cac byte
            nhưng khi mình chuyển qua C thì không chạy được, có ai biết chỉ giùm mình với
            Đây là mình viết bằng c
            Attached Files

            Comment


            • mình gọi chương trình đó như sau
              for(j=100,i=0;j<104;j++,i++) // Address ATC24C04 100 -> 103
              SET[i]=READ_BYTE (j);

              Comment


              • Trong keil C mình muốn hiển thị bằng số thứ tự dòng code mà mình viết thì vào đâu để chọn?!( Ví dụ: 1,2 ,3....................n). Mong các bạn chỉ giáo giúp! Mình xin cảm ơn!

                Comment


                • Giúp tôi xem đoạn code này với

                  /************************************************** *******
                  Dem tu 0 toi 9 sau do lap lai voi display 7 doan
                  ************************************************** *******/
                  #include<reg51.h>
                  void wait_a_second()
                  {
                  unsigned int x;
                  for(x=0;x<33000;x++);
                  }
                  main()
                  {
                  int LED=0;
                  int LED_ARRAY(10)={0x3F,0x06,0x5B,0x4F,0x66,
                  0x6D,0x7C,0x07,0x7F,0x67};
                  for(
                  {
                  P1=~LED_ARRAY(LED);
                  wait_a_second();
                  LED++;
                  if(LED==10)LED=0;
                  }
                  }

                  Nhưng không hiểu tại sao nó lại báo lỗi thế này

                  syntax error near '10'
                  'LED_ARRAY':can't initialize, bad type or class

                  Comment


                  • Nguyên văn bởi Imhotep Xem bài viết
                    /************************************************** *******
                    Dem tu 0 toi 9 sau do lap lai voi display 7 doan
                    ************************************************** *******/
                    #include<reg51.h>
                    void wait_a_second()
                    {
                    unsigned int x;
                    for(x=0;x<33000;x++);
                    }
                    main()
                    {
                    int LED=0;
                    int LED_ARRAY(10)={0x3F,0x06,0x5B,0x4F,0x66,
                    0x6D,0x7C,0x07,0x7F,0x67};
                    for(
                    {
                    P1=~LED_ARRAY(LED);
                    wait_a_second();
                    LED++;
                    if(LED==10)LED=0;
                    }
                    }

                    Nhưng không hiểu tại sao nó lại báo lỗi thế này

                    syntax error near '10'
                    'LED_ARRAY':can't initialize, bad type or class
                    const unsigned char LED_ARRAY[10]={0x3F,0x06,0x5B,0x4F,0x66,
                    0x6D,0x7C,0x07,0x7F,0x67};


                    nên dùng unsigned char , đừng dùng kiểu int cho các biến đếm

                    Comment


                    • Nguyên văn bởi baccuc1 Xem bài viết
                      Trong keil C mình muốn hiển thị bằng số thứ tự dòng code mà mình viết thì vào đâu để chọn?!( Ví dụ: 1,2 ,3....................n). Mong các bạn chỉ giáo giúp! Mình xin cảm ơn!
                      bạn nhìn phía dưới góc phải của keil có hiển thị dòng mà

                      Comment


                      • Nguyên văn bởi VNarmy Xem bài viết
                        Phép quay thì trong C ko có. Em có thể dùng inline để cài ASM vào hoặc viết đơn giản như sau:
                        Code:
                        unsigned char RotateRight(unsigned char A, i){
                        unsigned char tmp1, tmp2;
                        tmp1=A;
                        A>>=i;
                        tmp2=A;
                        A=tmp1;
                        A<<=(8-i);
                        A|=tmp2;
                        return(A);
                        }
                        Phép quay trái em có thể tự viết nhé.
                        vô cùng cảm ơn bác giờ thì em mới hiểu được thì ra lệnh dịch nó khác lệnh quay thế mà học lập trình lâu nay lại không biết

                        Comment


                        • Nguyên văn bởi yeubom1 Xem bài viết
                          bạn nhìn phía dưới góc phải của keil có hiển thị dòng mà
                          Nhưng mình biết là nó có hiển thị được số thứ tự dòng code ngay đầu dòng code bạn ạ! Vì nhìn thế khi viết code sai mình dễ theo dõi hơn.
                          Nó hiển thị ví dụ như này bạn ạ:

                          1 Câu lệnh
                          2 Câu lệnh
                          .
                          .
                          .
                          n Câu lệnh

                          Mong các bạn chỉ bảo giúp!
                          Mình cảm ơn

                          Comment


                          • Nguyên văn bởi baccuc1 Xem bài viết
                            Nhưng mình biết là nó có hiển thị được số thứ tự dòng code ngay đầu dòng code bạn ạ! Vì nhìn thế khi viết code sai mình dễ theo dõi hơn.
                            Nó hiển thị ví dụ như này bạn ạ:

                            1 Câu lệnh
                            2 Câu lệnh
                            .
                            .
                            .
                            n Câu lệnh

                            Mong các bạn chỉ bảo giúp!
                            Mình cảm ơn

                            ko hỉu í u , khi u viết xong chương trình, nhấn F7 . Nếu sai , trình dịch đưa ra lỗi , u chỉ cần click vào dòng thông báo lỗi í thì trình dịch tự động đưa u tới chỗ nào bị lỗi , u chữa , thế thui !

                            Comment


                            • #include<reg51.h>
                              #include<stdio.h>
                              #include<math.h>

                              unsigned char M[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
                              unsigned char donvi,chuc,tram,nghin,num;
                              void delay(void)
                              {
                              TMOD = 0x02;
                              TH0 = TL0 = -100;
                              TR0 = 1;
                              while(!TF0);
                              TF0 = 0;
                              TR0 = 0;
                              }
                              void main(void)
                              {
                              nghin=num/1000;
                              tram=(num%1000)/100;
                              chucnum%1000)%100)/10;
                              donvinum%1000)%100)%10;
                              {
                              P3=0xF7;
                              P1=M[donvi];
                              delay();
                              P3=0xEF;
                              P1=M[chuc];
                              delay();
                              P3=0xDF;
                              P1=M[tram];
                              delay();
                              P3=0x7F;
                              P1=M[nghin];
                              delay();
                              }
                              }

                              Tôi muốn hỏi các bạn một chút : với chương trình này, tôi muốn thêm vào một biến đếm tự động từ 0 tới 9999 và quay lại để làm tham số hiển thị cho 4 digit được định nghĩa ở trên thì làm như thế nào

                              Comment


                              • Em dùng ngắt thế này, nhưng chẳng hiểu nó báo lỗi PULLIC

                                #include <regx51.h>
                                void delay(int time)
                                {
                                int i=0;
                                TMOD = 0x01;
                                while(time--)
                                {
                                for(i=0;i<20;i++)
                                {
                                TH0=0x3C;
                                TL0=0xAF;
                                TR0=1;
                                while (!TF0);
                                TF0=0;
                                TR0=0;
                                }
                                }
                                }
                                void inter0(void) interrupt 0 using 2
                                {
                                int i;
                                const unsigned char Font[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6 F};
                                while(1)
                                {
                                for (i=0;i<9;i++)
                                {
                                P2 = Font[i];
                                delay(1);
                                }
                                i=0;
                                }
                                }
                                void main(void)
                                {
                                P2 = 0x3F;
                                EA=1;
                                EX0=1;
                                while(1);
                                }

                                thông báo như sau:

                                Build target 'Target 1'
                                assembling STARTUP.A51...
                                compiling nhay led.c...
                                compiling led 7 seg.c...
                                linking...
                                *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
                                SYMBOL: MAIN
                                MODULE: led 7 seg.obj (LED_7_SEG)
                                *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
                                SYMBOL: _DELAY
                                MODULE: led 7 seg.obj (LED_7_SEG)
                                *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
                                SEGMENT: ?PR?MAIN?LED_7_SEG
                                Program Size: data=27.0 xdata=0 code=468
                                Target not created

                                Các anh chị xem dùm em tí ạ. Chương trình dùng ngắt để đếm và hiển thị ra led 7 đoạn từ 0-->9

                                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