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

  • #31
    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.

    Comment


    • #32
      à
      tức là cái timer nó chỉ đếm tăng
      chứ khi bạn dùng biến thì bạn đếm cái gì tăng cái gì giảm là do bạn thôi mà

      Comment


      • #33
        @dtcn_112: khai báo cho timer như vậy là sai rõ ràng vì, mỗi thanh ghi TH và TL chỉ có 8 bít, bạn làm vậy nó thành 16bit rồi. nếu đã làm tăng được thì làm giảm tuơng tự, và cùng hàm lun, bình thường sau 1 khoảng thời gian thì tăng biến hiển thị lên 1 đơn vị kiểu dem=dem+1, bây giờ bạn thay số 1 = 1 biến t : dem=dem+t và 1 cái ngắt ngoài con con là nếu ấn 1 phát thì t=1, ấn phát nữa t=-1, lặp lại quá trình, như vậy chỉ cần 1 phím bạn có thể tăng giảm rồi
        nếu viết chương trình chạy time như bienhou nói, thì như chung1608 nói đúng đó, với ASM nó có thể làm _NOP_ trễ chuẩn 1s, còn vs C thì chỉ áng chừng 1s được thôi. cái này đã thử nghiệm rồi nhé
        Website chính thức đổi địa chỉ website thành
        Mời các bạn ghé thăm !!!

        Comment


        • #34
          em chào bác mast090,em cũng không hiểu tại sao lai như vậy,nhưng đúng là mạch em làm đếm từ 0000 đến 9999 em khai báo như vậy ,mạch vẫn chạy .viết bằng c em không giải thích được vấn đề này,em lấy một câu lệnh như sau:
          MOVC A,@A+DPTR.
          thanh ghi DPTR là thanh ghi 16 bit,vậy thanh ghi A là thanh ghi 8 bit làm sao có thể lưu được 16 bit,cho nên khi lưu trữ dữ liệu thanh ghi A chỉ lưu byte thấp (DPL),còn byte cao(DPH) được bỏ qua,nên em nghĩ khai báo cho timer cũng vậy.vì timer cũng có 1 byte thấp và 1 byte cao.

          Comment


          • #35
            uhm, cũng có thể, vì 1 số thanh ghi khi khai báo quá giá trj thì nó chỉ lấy cho phần thấp và phần cao được bỏ qua, nhưng tốt nhất cứ viết đúng theo quy tắc đi, tự dưng đẻ thêm 8 bit cao nữa vào làm j đâu
            Website chính thức đổi địa chỉ website thành
            Mời các bạn ghé thăm !!!

            Comment


            • #36
              em vừa sửa bài tác giả gửi lên chạy rùi,cần sửa một chút thôi,em không biết cách gửi file từ máy lên diễn đàn nên để em up lên mediafire rùi gửi cả mạch mô phỏng và code,mà em gửi luôn code lên để các bác xem còn sửa chỗ nào:

              #include <reg51.h>
              sbit aled1= P1^0;
              sbit aled2= P1^1;
              sbit aled3= P1^2;
              sbit aled4= P1^3;
              unsigned char i,k;
              unsigned char code maled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};

              void delay()
              {
              TMOD=0x01; //timer0 16 byt
              //TH0=0x2710;
              //TL0=0x2710;
              TH0=0x27a0;
              TL0=0x27a0; //sửa ở đây
              TR0=1;
              while(!TF0);
              TF0=0;
              TR0=0;
              }
              void ngatngoai0()interrupt 0
              {
              while(1)
              {
              for(k=0;k<9999;k++)
              {
              P2=maled[k/1000];
              aled1=1;
              delay();
              aled1=0;
              P2=maled[(k/100)];
              aled2=1;
              delay();
              aled2=0;
              P2=maled[(k/10)];
              aled3=1;
              delay();
              aled3=0;
              P2=maled[k];
              aled4=1;
              delay();
              aled4=0;
              }
              }
              }
              void khoitaongatngoai0()
              {EA=1;
              EX0=1;
              IT0=1;
              }
              void main()
              {khoitaongatngoai0();
              }

              Comment


              • #37
                đây là mạch mô phỏng và code sửa thêm một chút về cách khai báo:009999.rar

                Comment


                • #38
                  Nguyên văn bởi dtcn_112 Xem bài viết
                  em chào bác mast090,em cũng không hiểu tại sao lai như vậy,nhưng đúng là mạch em làm đếm từ 0000 đến 9999 em khai báo như vậy ,mạch vẫn chạy .viết bằng c em không giải thích được vấn đề này,em lấy một câu lệnh như sau:
                  MOVC A,@A+DPTR.
                  thanh ghi DPTR là thanh ghi 16 bit,vậy thanh ghi A là thanh ghi 8 bit làm sao có thể lưu được 16 bit,cho nên khi lưu trữ dữ liệu thanh ghi A chỉ lưu byte thấp (DPL),còn byte cao(DPH) được bỏ qua,nên em nghĩ khai báo cho timer cũng vậy.vì timer cũng có 1 byte thấp và 1 byte cao.
                  MOVC A,@A+DPTR.
                  DPTR là thanh ghi 16 bit nhưng câu lệnh trên đâu lưu 16 bit vào A đâu nhỉ, nó lưu giá trị tại ô nhớ A+DPTR vào A mà
                  còn câu lệnh TH0=0x27a0; TL0=0x27a0; này các bác muốn timer đếm thế nào vậy, tạo trễ bao nhiêu?

                  Comment


                  • #39
                    bác tải file mô phỏng em gủi lên mô phỏng thử xem,cái này em kiểm tra bằng phần mền

                    Comment


                    • #40
                      người ta bảo làm đồng hồ thì lại đưa lên code đếm từ 0000-9999

                      Comment


                      • #41
                        em hiểu ý bác nhưng bạn ấy hỏi về đoạn code chứ có hỏi về đồng hồ đâu,nếu là đồng hồ thì code như vậy thì chưa đủ,em cũng sưu tầm được một số mạch dùng ds1307 để hiển thị thời gian,nhưng bài viết của bạn ấy chỉ muốn thắc mác về code.

                        Comment


                        • #42
                          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;	
                          }
                          Last edited by kidteam; 03-05-2012, 00:58.

                          Comment


                          • #43
                            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;	
                            }
                            thêm chống nảy phím bấm vào đi chứ
                            Ờ mà xí, nhìn cái đoạn quét led thấy nó sao sao ấy. Ko có thời gian delay thì tốc độ nhanh quá, BJT đáp ứng kịp ko nhỉ ?

                            Comment


                            • #44
                              tất nhiên
                              tại không thấy người hỏi quan tâm nên cũng nản
                              không ngờ vẫn còn có người đọc

                              Comment


                              • #45
                                Nguyên văn bởi chung1608 Xem bài viết
                                thêm chống nảy phím bấm vào đi chứ
                                Ờ mà xí, nhìn cái đoạn quét led thấy nó sao sao ấy. Ko có thời gian delay thì tốc độ nhanh quá, BJT đáp ứng kịp ko nhỉ ?
                                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
                                Website chính thức đổi địa chỉ website thành
                                Mời các bạn ghé thăm !!!

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                • vi van pham
                                  Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?
                                  bởi vi van pham
                                  Đồng ý với Bqv.
                                  50 năm làm nghề, tôi đã chứng kiến 3 lần máy x quang mới nhập từ nước ngoài về bị lỗi.
                                  - Lần thứ 1 máy xq của Pháp được ks Pháp lằp đặt bị lỗi 1 con didode, đưa cho ks Pháp con didode khác cùng mã số, ông...
                                  hôm nay, 08:09
                                • mèomướp
                                  Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?
                                  bởi mèomướp
                                  Dạ chú dinh... muốn sửa lỗi cho hãng thì chú cứ gửi những hình ảnh, video cho họ đi ạ, chú có thể tìm thông tin của những lãnh đạo bên ấy để gửi thì sẽ hiệu quả hơn ạ. Về tổng quan thì họ sẽ ko phản hồi rõ ràng đâu ạ, vì nhận...
                                  hôm nay, 06:19
                                • bqviet
                                  Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?
                                  bởi bqviet
                                  Cuối năm bàn thêm chuyện to hơn chút, đấy là 2 vụ rơi đám 737 đời mới và trục trặc ở cả tá chiếc khác. Ngay cả những thứ tưởng như cao siêu sang xịn thật thì vẫn có thể gặp trường hợp oái oăm như thường. Từ hồi đó bqv đã thấy khó hiểu làm sao lại đẻ ra đám MCAS quái thai đến thế được. Rồi...
                                  24-01-2025, 19:40
                                • bqviet
                                  Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?
                                  bởi bqviet
                                  Bqv phải vào ngay để tán đồng với bài viết trên của bạn. Chỉ bàn về kỹ thuật, thiết bị máy móc của hãng dù danh tiếng vẫn có thể xảy ra những chuyện ngoài dự kiến, thậm chí những chuyện tưởng như không bao giờ có thể xảy ra....
                                  24-01-2025, 19:31
                                • dinhthuong80
                                  Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?
                                  bởi dinhthuong80
                                  (ĐT chia sẻ MPPT này, với mong muốn rằng, chúng ta hãy tự tin lên, hãy tự hào là người VN, đừng quá tin vào người khác, đừng quá thần tượng họ, cần kiểm tra thực chứng chứ không nên cứ cho các thiết bị thông minh, cao siêu là hoàn hảo)
                                  24-01-2025, 12:08
                                • dinhthuong80
                                  Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?
                                  bởi dinhthuong80
                                  Dưới đây là hình ảnh thực:

                                  (bị phạm con tụ pi C17 (phía trên IC U3/DIP08: văng mất xác!)

                                  (hàn vào vị trí C17 tụ pi 27nF ( giá trị phỏng đoán từ 10-100nF!), mạch vẫn chạy như trước khi cạy keo)...
                                  24-01-2025, 12:05
                                • dinhthuong80
                                  Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?
                                  bởi dinhthuong80
                                  ĐT đã mạnh dạn mail thử cho hãng SRNE, họ trả lời là nó dùng nhiệt điện trở ở bên trong mạch như sau:

                                  "Our street light controller product triggers high temperature protection based on internal thermistor sampling''

                                  Thấy hơi lo lắng vì kiến thức điện tử...
                                  24-01-2025, 11:39
                                • mèomướp
                                  Trả lời cho tìm mua đồng hồ vạn năng
                                  bởi mèomướp
                                  Dạ chú mua cái kẹp dòng ấy ạ. Chị hàng xóm nhà cháu có 1 cái thấy lâu lâu rùi chưa hỏng ạ. Ví dụ như mẫu này trên shoppee đầy ạ...
                                  https://vn.shp.ee/dWYVgq7
                                  21-01-2025, 12:48
                                • vi van pham
                                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                                  bởi vi van pham
                                  Bác Đinh Vặn sai rồi,bây giờ con nít mẫu giáo đã giải phương trình 2 ẩn số rồi.
                                  Tôi chứng minh bác lên youtube đầy video đơn giản tựa rất hot, chỉ 1 transistor hay 1 con diode và hướng dẩn cách làm, tác giả không vẽ sơ đồ mạch điện...
                                  21-01-2025, 11:55
                                • nguyendinhvan
                                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                                  bởi nguyendinhvan
                                  Bây giờ mới có tháng giêng, bao giờ mới đến tháng mười ?
                                  Các cháu mẫu giáo mới lên lớp 1 được có 4 tháng. Nên đừng lấy lý do chúng nó đã đi học rồi để bắt nó viết một bài luận văn, hay là giải bài toán hàm. Phải kiên nhẫn...
                                  21-01-2025, 00:47
                                Đang tải...
                                X