Thông báo

Collapse
No announcement yet.

xin giúp đỡ về ngắt, khó hiểu quá ! xin gúp giúp

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

  • xin giúp đỡ về ngắt, khó hiểu quá ! xin gúp giúp

    Code:
       /*==================Bo tien xu li===================*/
    	#include<AT89x51.h>   // Dinh kem file thu vien
    	/*=================Khai bao bien toan cuc=============*/
    	sfr  dataP = 0x90; // du lieu la P1
    	// ma 7 thanh tu 0 den 9 la
    	// 0x81h,0xcfh,0x92h,0x86h,0xcch,0xa4,0xa0h,0x8fh,0x80h,0x84h.
    	
    	sbit ctac = P3^4; 
    	unsigned char dem=0;
    	unsigned int i=0;
    	/*====================Khai bao ham==================*/
    	/*----------------------------ham delay========================*/
    	void  delay(char time)
    	{  	while(time--)
    		{
    		TH0=0x3C;
    		TL0=0xAF;
    		TR0=1;
    		while(TF0==0); 	
    		TF0=0;
    		TR0=0;	 
    	
    		}
    	}
    	/*----------------------chuong trinh con kiem tra co phim nhan-------------*/
    	void phim_an(void)
    	{
    		if(ctac==0)   //co phim nhan
    		{
    			delay(1); //chong rung phim
    			while(ctac==0); //Cho nha phim
    			delay(1); // chong rung phim
    			dem++; //tang bien dem
    			if(dem==10) dem=0;
    		}
    	}
    	/*----------------hien thi so lan an phim------------------------------------------*/
    	void  solan_an(void)
    	 {
    		switch(dem)
    		  {
    			case 0: {dataP=0x81;break;}
    			case 1: {dataP=0xcf;break;}
    			case 2: {dataP=0x92;break;}
    			case 3: {dataP=0x86;break;}
    			case 4: {dataP=0xcc;break;}
    			case 5: {dataP=0xa4;break;}
    			case 6: {dataP=0xa0;break;}
    			case 7: {dataP=0x8f;break;}
    			case 8: {dataP=0x80;break;}
    			case 9: {dataP=0x84;break;}
    		  };
    	 } 
    	 void auto_time(void)
    	   {
    	  	   
    			if(dem==10)dem=0;
    			dem++;
    		}
    		
    	  
    	 /*-------------------------chuong trinh chinh-------------------------------------------*/
    // ngat
    void ngat(void) interrupt 1 using 2
    {	
    	
    	TR0=0;	
    	TH0=0x3C;
    	TL0=0xAF;
    	dataP=0x84;
    	TR0=1;
    }
    	void main(void)
    	  { 
    	  	
    		dataP = 0x81; // ban dau la so 0
    	
    		TMOD=0x01;
    
    		while(1){
    		//	phim_an();
    			IE=0x82;
    			auto_time();		 
    			solan_an();	
    			delay(50);	
    		}
    	}
    - Mô tả ý đồ: cho hiển thị led 7 thanh từ 1-9. nhưng để hiểu ngắt thì em muốn cho nó hiển 1 số thì nhảy ra ngắt hiện số 9 (dataP=0x84) khi xong sẽ tiếp tục nhảy ra hiển thị tiếp số kế tiếp.
    - và với việc làm đơn giản thế, em đã code ra đoạn trên, nhưng mà không chạy được, nó cứ hiện số 9 hoài không nhảy ra ngoài tiếp được.
    mong a e giúp đỡ. (vì chưa hiểu rõ về các khai báo sử dụng ngắt nên sai xót gì a e bỏ qua ). thank all!

  • #2
    Bạn khai báo ngắt đúng rồi và ngắt đã hoạt động. nhưng liên tục hiện số 9 là vì.
    Bạn thử tính xem giả sử tần số thạch anh là 12MHz thì sau 1 micro giây thì giá trị của timer0 tăng lên 1 đơn vị. với chương trình của bạn thì giá trị timer0 tăng từ 0x3CAF(15535 Dec) tới 0xFFFF (65535 Dec) tức là 50000 đơn vị trong khoảng thời gian là 1 micro giây * 50000 = 50000 Micro giây = 0.05s có nghĩa là cứ sau 0.05s thì lại hiện số 9 một lần thì số 9 sáng liên tục là đúng rồi. để 1s số 9 sáng một lần thì bạn dùng 1 biến đếm mỗi lần xảy ra ngắt bạn đếm tăng 1 lần nếu giá trị biến đếm bằng 20 (0.05 micro giây * 20 = 1s) thì cho biến đếm bằng 0 và cho led hiển thị số 9.
    Phone No: 0989.437.312
    Email:
    Live in: Ha noi

    Comment


    • #3
      thank bạn nha, đã chạy được rùi
      Last edited by jerrythanh; 15-04-2012, 15:36.

      Comment

      Về tác giả

      Collapse

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

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

      Collapse

      • nguyendinhvan
        Trả lời cho Vấn đề về tốc độ quay
        bởi nguyendinhvan
        Sử dụng động cơ servor, hoặc lắp thêm một cái encoder vào động cơ bước. Encoder sẽ kiểm soát động cơ có quay hoặc đứng im.
        Hôm qua, 19:50
      • Andrea14
        Vấn đề về tốc độ quay
        bởi Andrea14
        Chào mọi người,

        Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
        12-12-2025, 12:42
      • bqviet
        Trả lời cho Đấu tắt điện cho máy tính bảng
        bởi bqviet
        Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
        06-12-2025, 17:17
      • nguyendinhvan
        Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
        bởi nguyendinhvan
        Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
        05-12-2025, 19:59
      Đang tải...
      X