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

  • xin giúp tôi 1 bài mẫu về ngắt ngoài (P3_2 hoặcP3_3) để điều khiển P1_0 và 3 led ở P1_2;
    P1_3;P1_4;
    #define led1 P1^2
    #define led2 P1^3
    #define led3 P1^4
    #define cotac P3^2
    yêu cầu: P3^2 kich cạnh âm, khởi động led1 sáng báo duy chì P1^0 =1 trong 15 phút
    khi nhấn nút contac led2 sáng(1và 3 tắt) và duy chì P1^0=1 trong 30 phút
    nhấn contac lần nữa led3 sáng(2&1=tắt) duy chì P1_0=1; time=45 phút
    các vụ ngắt này mình chưa làm đc, khi bấm contac led sáng lung tung, xin nhờ các cao nhân giúp đỡ. Cảm ơn nhiều nhiều!
    Tôi thích cái cầu kỳ của kỹ thuật
    Nhưng ghét mọi phức tạp trong tính cách con người

    Comment


    • Nguyên văn bởi daominhchien Xem bài viết
      xin giúp tôi 1 bài mẫu về ngắt ngoài (P3_2 hoặcP3_3) để điều khiển P1_0 và 3 led ở P1_2;
      P1_3;P1_4;
      #define led1 P1^2
      #define led2 P1^3
      #define led3 P1^4
      #define cotac P3^2
      yêu cầu: P3^2 kich cạnh âm, khởi động led1 sáng báo duy chì P1^0 =1 trong 15 phút
      khi nhấn nút contac led2 sáng(1và 3 tắt) và duy chì P1^0=1 trong 30 phút
      nhấn contac lần nữa led3 sáng(2&1=tắt) duy chì P1_0=1; time=45 phút
      các vụ ngắt này mình chưa làm đc, khi bấm contac led sáng lung tung, xin nhờ các cao nhân giúp đỡ. Cảm ơn nhiều nhiều!
      Thực ra không cần phải dùng ngắt ngoài làm gì cho phí sức, bạn chỉ cần lấy một chân bất kì là được. Mình mới tập viết C được vài hôm, bạn xem thử có được không nhé?

      #include <REGX51.H>
      sbit led1 = P1^2;
      sbit led2 = P1^3;
      sbit led3 = P1^4;
      sbit cotac = P1^5;
      unsigned char dem=0;
      unsigned int i=0;
      void t0_int(void) interrupt 1
      {
      i++;
      TH0=0;
      TL0=0;
      TR0=1;
      }
      void delay(unsigned char time)
      { while(time--); }
      void kiem_tra_contac(void) // chong rung cho contac
      {
      if(!cotac)
      {delay(10);
      while(cotac==0)
      delay(10);
      dem++;
      if (dem==3) dem=0;

      }}
      void hien_thi(void)
      {
      switch(dem)
      {
      case 0: {if(i>=13500) {P1=0x20; i=0;} else {led1=1;led2=0;led3=0;} break;}// 13500=15*60*15
      case 1: {if(i>=27000) {P1=0x20; i=0;} else {led2=1;led1=0;led3=0;} break;}
      case 2: {if(i>=40500) {P1=0x20; i=0;} else {led3=1;led1=0;led2=0;} break;}
      }
      }
      void main(void)
      {
      P1=0x20;
      TMOD=0x01;
      EA=1;
      ET0=1;
      TH0=0; //65536*15~1s
      TL0=0;
      TR0=1;
      while(1)
      {
      kiem_tra_contac();
      hien_thi();
      }
      }
      Vũ xuân Lợi
      YM!:

      Comment


      • Xin chào, đây là tài liệu Keil tiếng Việt của nhóm DKS, hy vọng có ích cho các bạn mới làm quen với Keil:
        http://www.mediafire.com/?oi3hdl22hwv
        Chúc vui!
        ThươngPhạm
        MT05 - HCM UTE - EDU - VN

        Comment


        • File tiếng Việt mà tôi giới thiệu khá đầy đủ về Keil C, có cả các project đơn giản, các bạn chịu khó vọc nhé!
          ThươngPhạm
          MT05 - HCM UTE - EDU - VN

          Comment


          • các bạn chèn asm vào trong C như thế nào vậy. tui chèn bằng code #pragma asm và #pragma endasm nhưng bị báo lỗi khi biên dịch : "eror C272: asm/endasm requires src-control to be active"
            có bạn nào giúp với!!!

            Comment


            • Nguyên văn bởi phunghieu Xem bài viết
              Chào các Bạn..!
              Mình cũng đang tập tọe học lập trình và được Anh nguyenminhieu viết cho một chương trình ví dụ điều khiển hiển thị qua 8 con led.và đây là vd:
              #include<regx51.h>

              void nhay_3_lan(void);
              void dich_phai(void);
              void delay(unsigned int ms)


              {

              unsigned int i;

              unsigned char j;

              for(i=0;i<=ms;i++)

              for(j=0;j<120;j++);

              }

              void main(void)

              {

              while(1)

              {
              nhay_3_lan();
              dich_phai();
              }



              }

              void nhay_3_lan(void)

              {
              char i;

              P1 = 0;

              for(i = 0;i<6;i++)

              {

              P1 = ~P1;delay(300);




              }

              }


              void dich_phai(void)

              {

              char i;

              P1=0xff;


              for(i=0;i<=8;i++)

              {

              P1 = P1>>1;delay(200);



              }

              }
              Vậy cho mình hỏi nếu mình muốn viết chương trình cho 8con led này---
              - Một là sáng dồn(tức là tại một thời điểm chỉ có một led sáng chạy từ led0 --led7t thì dừng lại tại Led 7 ,Led7 lúc này luôn sáng.tiếp theo cũng như thế và đến led6 thì led6 luôn sáng..........cứ như thế cho đến cuối cùng là Led0)
              - Hai là sáng dần lên(tức là sáng dần lên từ led0 ----Led7)
              Rất mong được các bạn giúp đỡ..!
              unsigned char e=0x01, b,i,j;
              void sang_don(void)
              {
              for (j=8;j>0;j--)
              { for(i=0;i<j;i++)
              {
              P1=e<<i|b;
              delay(200);
              }
              b=P1;
              }
              }
              void sang_dan(void)
              {
              P1=0;
              for(i=0;i<8;i++)
              {
              P1=P1<<1|0x01;
              delay(200);
              }
              }
              Last edited by vuxuanloi; 04-05-2009, 18:26.
              Vũ xuân Lợi
              YM!:

              Comment


              • Nguyên văn bởi ttyanhtu Xem bài viết
                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.
                unsigned char i, j=0x01;

                void sang(void)
                {
                for (i=0;i<8;i++)
                {
                P1=j<<i;
                delay(50);
                P1=0x00;
                delay(50);
                }
                }
                Vũ xuân Lợi
                YM!:

                Comment


                • Mình mới học keilC được vài hôm, chỉ viết được cho 89xx, chưa biết AVR và PIC thế nào? mong các bạn giúp đỡ.
                  Vũ xuân Lợi
                  YM!:

                  Comment


                  • em chưa hiểu về cách quét led ai biết chỉ giúp em với. em cảm ơn trước nhe.

                    Comment


                    • Nguyên văn bởi thao88 Xem bài viết
                      em chưa hiểu về cách quét led ai biết chỉ giúp em với. em cảm ơn trước nhe.
                      Giả sử quét 2 led nhé !
                      Nguyên lý quét: Bật Led1 delay(x)-> tắt Led1 -> bật Led2 delay(x) -> tắt Led2. Quá trình bật tắt đó mình cho nó diễn ra nhanh (delay với giá trị x nhỏ thôi), cho nó vào vòng lặp. Như vậy là quét led.

                      Comment


                      • cac dai ca than men!
                        em đang bức vao 89c51, đung phần mềm ao để lập trình và nạp cho nó vậy.
                        cac anh cho em xin 1 vài vì dụ lập trình cho 8 cổng ra sáng dôn, sang đuổi...
                        cam on cac anh truoc!
                        mail cua em: manhngoc.a4k5@yahoo.com.vn

                        Comment


                        • khi muốn viền chạy chậm mà nội dung chữ chạy nhanh thì quét thế nào hả các bác. ai có code nào gửi em xem với.

                          Comment


                          • Nguyên văn bởi manhngoc88 Xem bài viết
                            cac dai ca than men!
                            em đang bức vao 89c51, đung phần mềm ao để lập trình và nạp cho nó vậy.
                            cac anh cho em xin 1 vài vì dụ lập trình cho 8 cổng ra sáng dôn, sang đuổi...
                            cam on cac anh truoc!
                            mail cua em: manhngoc.a4k5@yahoo.com.vn
                            Nếu bạn viêt bằng assembly thì dùng raisonance IDE.
                            Nếu bạn viết bằng C thì dùng keilC.
                            Phần mềm mô phỏng là proteus.
                            Bạn tải file dưới về mà xem nhé, ct hơi dài nên mình ngại port nên, sợ khó nhìn.
                            Attached Files
                            Last edited by vuxuanloi; 09-05-2009, 19:34.
                            Vũ xuân Lợi
                            YM!:

                            Comment


                            • Nguyên văn bởi vdtk3 Xem bài viết
                              Bác nào giúp em với em lập trình với con 89v51rd2 bằng keilC mặc dù em đã chép file 89v51rd.h vào inc trong ổ cài mà khi dịch chương trình vẫn báo lỗi ?????
                              C:\KEIL\C51\INC\REG52.H(15): error A10: ATTEMPT TO DEFINE AN ALREADY DEFINED SYMBOL
                              ban copy cai 89v51rd.h vào trong project khi làm với keil c. Rồi trong phần khai bao : include"p89v51rd.h" là ok liền,tất cả những việc còn lại thì làm bình thường

                              Comment


                              • Nguyên văn bởi hoang_hai Xem bài viết
                                nhưng mà mình chưa được học về kĩ thuật số
                                đng năm t2 ,ko biết j về mấy con IC đấy hết nên ko biết măc thế nào cả
                                nên chỉ dùng chân 8051 thôi .con đâu là dung tranzitor .khuếch đại
                                bạn co thể gửi cho mình phần cứng của nó ko.
                                cảm ơn nhiều nhé.
                                bạn mua con J103 nó là trở thanh 9 chân: chân 1(dấu chấm trắng)vào 5V, 8 chân còn lại vào port0, nếu lập trình 1=sáng thì cần có khuếc đại dòng đấy
                                Tôi thích cái cầu kỳ của kỹ thuật
                                Nhưng ghét mọi phức tạp trong tính cách con người

                                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