Thông báo

Collapse
No announcement yet.

các bác xem giúp e code này sai chỗ nào mà nó ko chạy với

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #46
    e cám ơn anh kidteam và tất cả các anh nhé. mấy hôm mải mê vs cái mạch nên e ko ol được.
    Nguyễn Huy Biên - 01649 802 694
    gmail :

    Comment


    • #47
      Nguyên văn bởi dtcn_112 Xem bài viết
      mình có một mạch đếm từ 0000 đến 9999 chạy trên mô phỏng có khai báo là:TMOD=0x01;TH0=0xC350;TL0=0xC350;mạch chỉ đếm tăng không đếm giảm được.vì các bác trên diễn đàn nói khai báo như vậy là sai nên không dám gửi lên nếu bạn thấy cần thì liên lạc với mình qua mail:lamdtk72@gmail.com.mình cảm thấy bài bạn gửi lên ban đầu chỉ sửa một chút là chạy nhưng mình bận quá có gì mình xem lại sau.
      e cũng nghĩ cái khai báo này ko sai. vid e đã 1 lần nào đọc trong tài liệu thấy người ta khai báo như vậy.! hình như là tài liêu của bác Nguyễn Bá Thuận -ĐH Lạc Hồng
      Nguyễn Huy Biên - 01649 802 694
      gmail :

      Comment


      • #48
        e thấy phần quét led của anh khó hiểu quá.@ @.! e đọmafaf ko hiểu gì hết. dù sao cũng rất cám ơn bác.@ @
        Nguyên văn bởi kidteam Xem bài viết
        bạn ấy hỏi cách làm đồng hồ đếm 1/10 hay 1/100 giây gì đó
        sau đó hiển thị ra 4 con led 7 đoạn
        có 2 nút
        1 nút chạy và dừng đồng hồ
        1 nút xóa giờ về 0000
        bạn xem code thế này ok chưa hay sai gì nhé
        Code:
        #include <regx51.h>
        #define uchar unsigned char
        #define uint unsigned int
        #define LedData P1
        #define Pled1 P2_0
        #define Pled2 P2_1
        #define Pled3 P2_2
        #define Pled4 P2_3
        void T0_ISR();//phuc vu viec dem thoi gian
        void EX0_ISR();//phuc vu viec start stop thoi gian
        void EX1_ISR();//phuc vu viec xoa ve 0000
        void init(void);//chuong trinh con khoi tao
        //==================================================
        uchar bRun;
        uchar bCountT0;//dem so lan ngat t0	cu 10 lan thi tang 1 cho num
        uchar num1,num2,num3,num4;
        uchar maled[10]={0x88,0xeb,0x4c,0x49,0x2b,0x19,0x18,0xcb,0x8,0x9};
        //==================================================
        void main(void)
        {
        	init();
        	while(1);
        }
        //==================================================
        void init(void)
        {
        	//khoi tao ngat ngoai theo suon
        	EA=1;
        	EX0=1;//ngat ngoai 0
        	IT0=1;//ngat theo suon
        	ET0=1;
        	EX1=1;
                IT1=1;
        	TMOD=1;
        	TL0=0xf0;//55.536
        	TH0=0xd8;//tuc la cu 10.000 thi xay ra tran
        	bCountT0=0;
        	//num=0;
        	TR0=1;//cho phep bo dinh thoi hoat dong
        	//ET1=1;	
        }
        //==================================================
        void T0_ISR(void) interrupt 1
        {
        	//chuong trinh ngat phuc vu viec dem thoi gian
        	//khoang nho nhat la 0.1 s 100ms
        	TR0=0;
        	TL0=0xf0;
        	TH0=0xd8;
        	Pled2=Pled3=Pled4=0;
                Pled1=1;
        	LedData=maled[num1];
        	Pled1=Pled3=Pled4=0;
                Pled2=1;
        	LedData=maled[num2];
        	Pled2=Pled1=Pled4=0;
                Pled3=1;
        	LedData=maled[num3];
        	Pled2=Pled3=Pled1=0;
                Pled4=1;
        	LedData=maled[num4];
        	if(!bRun)
        	{
        		TR0=1;
        		return;
        	}
        	++bCountT0;
        	if(bCountT0==10)
        	{
        		bCountT0=0;
        		++num4;
        		if(num4==10)
        		{
        			num4=0;
        			++num3;
        		}
        		if(num3==10)
        		{
        			num3=0;
        			++num2;
        		}
        		if(num2==10)
        		{
        			num2=0;
        			++num1;
        		}
        		if(num1==10)
        			num1=0;
        	}
        	//ok sau nay se hien thi len led 7 doan
        	TR0=1;
        }
        //==================================================
        
        //==================================================
        void EX0_ISR(void) interrupt 0
        {
        	if(bRun)
        		bRun=0;
        	else
        		bRun=1;
        }
        void EX1_ISR(void) interrupt 2
        {
        	num1=num2=num3=num4=0;	
        }
        Nguyễn Huy Biên - 01649 802 694
        gmail :

        Comment


        • #49
          Nguyên văn bởi mast090 Xem bài viết
          quét led = ngắt timer kiểu này k cần thiết phải delay, ngày xưa mình cũng thắc mắc nhưng có 1 điều cơ bản mà đôi lúc ko để ý đó là thời gian chờ tới vòng ngắt timer tiếp theo chính là thời gian delay ^^
          góp ý cái là chuơng trình ngắt nó có thể chạy mà k cần khai báo tên hàm trước main. bình thường trong C nếu chuơng trình con viết dưới main thì muốn sử dụng trong main thì cần khai báo tiêu đề của nó ở trên kiểu
          void chuơng trình con(....)//tiêu đề
          void main
          void chươn trình con(...)//nội dung chuơng trình
          còn nếu viết luôn nội dung chương trình trước main thì k cần khai báo tiêu đề các ctc trong code
          còn với các chuơng trình ngắt k cần khai báo tiêu đề như code trên đưa
          tất nhiên
          tùy phong cách viết code của mỗi người thôi
          tại quen bên lập trình C/C++ nên cứ dùng thế thôi
          đoạn quét led ở trên sai mà

          Comment


          • #50
            quét led lại:
            Code:
            #include <regx51.h>
            #define uchar unsigned char
            #define uint unsigned int
            #define LedData P1
            #define Pled1 P2_0
            #define Pled2 P2_1
            #define Pled3 P2_2
            #define Pled4 P2_3
            void T0_ISR();//phuc vu viec dem thoi gian
            void EX0_ISR();//phuc vu viec start stop thoi gian
            void EX1_ISR();//phuc vu viec xoa ve 0000
            void init(void);//chuong trinh con khoi tao
            //==================================================
            uchar bRun;
            uchar bCountT0;//dem so lan ngat t0	cu 10 lan thi tang 1 cho num
            uchar num1,num2,num3,num4;
            uchar maled[10]={0x88,0xeb,0x4c,0x49,0x2b,0x19,0x18,0xcb,0x8,0x9};
            uchar bCntLed;
            //==================================================
            void main(void)
            {
            	init();
            	while(1);
            }
            //==================================================
            void init(void)
            {
            	//khoi tao ngat ngoai theo suon
            	EA=1;
            	EX0=1;//ngat ngoai 0
            	IT0=1;//ngat theo suon
            	ET0=1;
            	EX1=1;
                    IT1=1;
            	TMOD=1;
            	TL0=0xf0;//55.536
            	TH0=0xd8;//tuc la cu 10.000 thi xay ra tran
            	bCountT0=0;
            	//num=0;
            	TR0=1;//cho phep bo dinh thoi hoat dong
            	//ET1=1;
            	bCntLed=0;	
            }
            //==================================================
            void T0_ISR(void) interrupt 1
            {
            	//chuong trinh ngat phuc vu viec dem thoi gian
            	//khoang nho nhat la 0.1 s 100ms
            	TR0=0;
            	TL0=0xf0;
            	TH0=0xd8;
            	++bCntLed;
            	//if(bCntLed==)
            	Pled2=Pled3=Pled4=0;
                    if(bCntLed==1)
            	{
            		Pled1=1;
            		LedData=maled[num1];
            	}
            	if(bCntLed==2)
            	{
            		Pled2=1;
            		LedData=maled[num2];
            	}
            	if(bCntLed==3)
            	{
            		Pled3=1;
            		LedData=maled[num3];
            	}
            	if(bCntLed==4)
            	{
            		Pled4=1;
            		LedData=maled[num4];
            	}
            	if(bCntLed==4)
            		bCntLed=0;
            	if(!bRun)
            	{
            		TR0=1;
            		return;
            	}
            	++bCountT0;
            	if(bCountT0==10)
            	{
            		bCountT0=0;
            		++num4;
            		if(num4==10)
            		{
            			num4=0;
            			++num3;
            		}
            		if(num3==10)
            		{
            			num3=0;
            			++num2;
            		}
            		if(num2==10)
            		{
            			num2=0;
            			++num1;
            		}
            		if(num1==10)
            			num1=0;
            	}
            	//ok sau nay se hien thi len led 7 doan
            	TR0=1;
            }
            //==================================================
            
            //==================================================
            void EX0_ISR(void) interrupt 0
            {
            	if(bRun)
            		bRun=0;
            	else
            		bRun=1;
            }
            void EX1_ISR(void) interrupt 2
            {
            	num1=num2=num3=num4=0;	
            }

            Comment


            • #51
              Nguyên văn bởi kidteam Xem bài viết
              quét led lại:
              Code:
              #include <regx51.h>
              #define uchar unsigned char
              #define uint unsigned int
              #define LedData P1
              #define Pled1 P2_0
              #define Pled2 P2_1
              #define Pled3 P2_2
              #define Pled4 P2_3
              void T0_ISR();//phuc vu viec dem thoi gian
              void EX0_ISR();//phuc vu viec start stop thoi gian
              void EX1_ISR();//phuc vu viec xoa ve 0000
              void init(void);//chuong trinh con khoi tao
              //==================================================
              uchar bRun;
              uchar bCountT0;//dem so lan ngat t0	cu 10 lan thi tang 1 cho num
              uchar num1,num2,num3,num4;
              uchar maled[10]={0x88,0xeb,0x4c,0x49,0x2b,0x19,0x18,0xcb,0x8,0x9};
              uchar bCntLed;
              //==================================================
              void main(void)
              {
              	init();
              	while(1);
              }
              //==================================================
              void init(void)
              {
              	//khoi tao ngat ngoai theo suon
              	EA=1;
              	EX0=1;//ngat ngoai 0
              	IT0=1;//ngat theo suon
              	ET0=1;
              	EX1=1;
                      IT1=1;
              	TMOD=1;
              	TL0=0xf0;//55.536
              	TH0=0xd8;//tuc la cu 10.000 thi xay ra tran
              	bCountT0=0;
              	//num=0;
              	TR0=1;//cho phep bo dinh thoi hoat dong
              	//ET1=1;
              	bCntLed=0;	
              }
              //==================================================
              void T0_ISR(void) interrupt 1
              {
              	//chuong trinh ngat phuc vu viec dem thoi gian
              	//khoang nho nhat la 0.1 s 100ms
              	TR0=0;
              	TL0=0xf0;
              	TH0=0xd8;
              	++bCntLed;
              	//if(bCntLed==)
              	Pled2=Pled3=Pled4=0;
                      if(bCntLed==1)
              	{
              		Pled1=1;
              		LedData=maled[num1];
              	}
              	if(bCntLed==2)
              	{
              		Pled2=1;
              		LedData=maled[num2];
              	}
              	if(bCntLed==3)
              	{
              		Pled3=1;
              		LedData=maled[num3];
              	}
              	if(bCntLed==4)
              	{
              		Pled4=1;
              		LedData=maled[num4];
              	}
              	if(bCntLed==4)
              		bCntLed=0;
              	if(!bRun)
              	{
              		TR0=1;
              		return;
              	}
              	++bCountT0;
              	if(bCountT0==10)
              	{
              		bCountT0=0;
              		++num4;
              		if(num4==10)
              		{
              			num4=0;
              			++num3;
              		}
              		if(num3==10)
              		{
              			num3=0;
              			++num2;
              		}
              		if(num2==10)
              		{
              			num2=0;
              			++num1;
              		}
              		if(num1==10)
              			num1=0;
              	}
              	//ok sau nay se hien thi len led 7 doan
              	TR0=1;
              }
              //==================================================
              
              //==================================================
              void EX0_ISR(void) interrupt 0
              {
              	if(bRun)
              		bRun=0;
              	else
              		bRun=1;
              }
              void EX1_ISR(void) interrupt 2
              {
              	num1=num2=num3=num4=0;	
              }
              a có thể giải thích giúp e về phần quét led của a ko ạ, e thấy cách viết của a rất hay, nhưng cond băn khoăn phần quét đó, mong bác giúp đỡ
              Nguyễn Huy Biên - 01649 802 694
              gmail :

              Comment


              • #52
                Build target 'Target 1'
                linking...
                BL51 BANKED LINKER/LOCATER V6.02 - SN: Eval Version
                COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2006
                "pho.obj"
                TO "pho"
                RAMSIZE(256)
                ************************************************** ****************************
                * RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 081DH BYTE (101%) *
                ************************************************** ****************************
                Program Size: data=60.0 xdata=0 code=2221
                LINK/LOCATE RUN COMPLETE. 0 WARNING(S), 0 ERROR(S)
                *** FATAL ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED
                MODULE: D:\PHO\5X5X5\C51\LIB\C51S.LIB (-----)
                LIMIT: 0800H BYTES
                Target not created

                mình đang tập lập trinh keilc cho led cube 5x5x5 nhưng nó báo lỗi này thì sao zay
                pro nào biết giúp mình với

                Comment


                • #53
                  Code:
                  RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 081DH BYTE (101%) *
                  vượt quá 8kb bộ nhớ của chíp, code bạn viết lớn hơn khả năng của nó, xóa bớt vài hiệu ứng đi là nhẹ
                  Website chính thức đổi địa chỉ website thành
                  Mời các bạn ghé thăm !!!

                  Comment


                  • #54
                    em thấy thay chip có ROM lớn hơn cũng có thể khác phục được lỗi này,bác mast090 có sành lập trình đa nhiệm cho vi điều khiển không cho em xin ít tài liệu em mới học cái này chẳng biết phải bắt đầu từ đâu mà em chỉ lập trình với hệ điều hành kernel thôi vì đây là yêu cầu của thầy giáo em không có yahoo của bác nên không biết liên lạc với bác thế nào.

                    Comment


                    • #55
                      sao không tạo luồng mới mà lại nhảy dù kiểu này
                      đề nghị mod xem xét

                      Comment


                      • #56
                        bạn down kell mới về xài đi !, đã có lic bản mới nhất rồi mà, xài eval bị giới hạn bộ nhớ, sao chạy !
                        vi điều khiển =>

                        Comment


                        • #57
                          Nguyên văn bởi bienhou Xem bài viết
                          a có thể giải thích giúp e về phần quét led của a ko ạ, e thấy cách viết của a rất hay, nhưng cond băn khoăn phần quét đó, mong bác giúp đỡ
                          thì cũng có gì đâu
                          bạn chú ý trong hàm ngắt T0_ISR
                          mỗi khi được gọi thì biến bCntLed được tăng lên 1
                          nếu nó =1 thì cho led 1 sáng và tắt các led còn lại
                          nếu nó bằng 2,3,4 thì tương tự
                          vì mỗi khi T0_ISR được gọi thì bCntLed lại tăng lên 1 và quay vòng nên các led tuần tự sáng, tắt
                          -> quét led

                          Comment


                          • #58
                            Nguyên văn bởi mast090 Xem bài viết
                            quét led = ngắt timer kiểu này k cần thiết phải delay, ngày xưa mình cũng thắc mắc nhưng có 1 điều cơ bản mà đôi lúc ko để ý đó là thời gian chờ tới vòng ngắt timer tiếp theo chính là thời gian delay ^^
                            góp ý cái là chuơng trình ngắt nó có thể chạy mà k cần khai báo tên hàm trước main. bình thường trong C nếu chuơng trình con viết dưới main thì muốn sử dụng trong main thì cần khai báo tiêu đề của nó ở trên kiểu
                            void chuơng trình con(....)//tiêu đề
                            void main
                            void chươn trình con(...)//nội dung chuơng trình
                            còn nếu viết luôn nội dung chương trình trước main thì k cần khai báo tiêu đề các ctc trong code
                            còn với các chuơng trình ngắt k cần khai báo tiêu đề như code trên đưa
                            phân tích code ta thấy, thời gian ngắt là 10mS, thời gian tích cực của mỗi led chỉ khoảng vài uS, cho là BJT có khả năng dẫn nhanh đi thì duty cycle của mỗi LED cũng chỉ khoảng 0. mấy % ấy, thì làm sao sáng đc.

                            Comment


                            • #59
                              Nguyên văn bởi chung1608 Xem bài viết
                              phân tích code ta thấy, thời gian ngắt là 10mS, thời gian tích cực của mỗi led chỉ khoảng vài uS, cho là BJT có khả năng dẫn nhanh đi thì duty cycle của mỗi LED cũng chỉ khoảng 0. mấy % ấy, thì làm sao sáng đc.
                              e có chung suy nghĩ như anh chung đó. timer ngắn quá, ko đủ để led sáng
                              Nguyễn Huy Biên - 01649 802 694
                              gmail :

                              Comment


                              • #60
                                Nguyên văn bởi kidteam Xem bài viết
                                thì cũng có gì đâu
                                bạn chú ý trong hàm ngắt T0_ISR
                                mỗi khi được gọi thì biến bCntLed được tăng lên 1
                                nếu nó =1 thì cho led 1 sáng và tắt các led còn lại
                                nếu nó bằng 2,3,4 thì tương tự
                                vì mỗi khi T0_ISR được gọi thì bCntLed lại tăng lên 1 và quay vòng nên các led tuần tự sáng, tắt
                                -> quét led
                                ok huynh, e hiểu rồi.! tks bác
                                Nguyễn Huy Biên - 01649 802 694
                                gmail :

                                Comment

                                Về tác giả

                                Collapse

                                bienhou Tìm hiểu thêm về bienhou

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X