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

      Đang tải...
      X