Thông báo

Collapse
No announcement yet.

Hỏi về reset mềm 8952 bằng C?

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

  • Hỏi về reset mềm 8952 bằng C?

    Có bạn nào biết lệnh reset mềm 8051 bằng C không hướng dẫn hộ mình với.
    Mình lập trình chế độ UART và muốn mỗi lần có ngắt nhận được dữ liệu thì lại cho chương trình chạy lại từ đầu để cập nhật lại cái biến trong lệnh Switch(biến) ..... case... . Mình viết chương trình chạy các hiệu ứng led nên biến đó là để chọn hiệu ứng.
    Tại chương trình trong case điều khiển Led nên có nhiều delay. Mình muốn là mỗi lần ngắt là cách chạy của led được cập nhật ngay chứ không phải chờ tất cả các lệnh trong case chạy xong thì mới cập nhật trạng thái mới. Vậy thì lâu quá.
    Với lại mình muốn lưu cái biến đó vào eeprom hoặc là flash hoặc lưu làm sao để khi khởi động lại thì nó cũng không bị reset, phải khai báo như thế nào nhỉ, trong AVR mình thấy có lệnh "flash char bien" hoặc là "eeprom char bien" mà không biết trong 8952 thì sao nữa.
    Mình làm đề tài môn học, mong mọi người giúp đỡ. Xin cảm ơn.

    Chương trình của mình gần giống thế này:

    Code:
    #include <REGX52.H>
    
    //Bien cuc bo
    char uart_data_receive; //Mình muốn biến này không bay hơi( không bị mất khi reset)
    
    void uart_init()//Khoi tao UART
    {
    	SCON=0x50;//che do 8 bit du lieu,1 bit sart,1 bit stop
    	TMOD&=0x0F;//
        TMOD|=0x20;//timer1 in mode2
        TH1=0xFD;//set baut rate at 9600(11.0592Mhz)
        TL1=0xFD;
        ES=1;//cho phep ngat noi tiep
    	EA=1;//cho fep tat ca cac ngat
    	TR1=1;//chay timer1
    }
    
    //*************Nhan du lieu*********************
    void receive_data() interrupt 4//ngat nhan du lieu
    {
    	if(RI==1)
    		{
    			RI=0;
    			uart_data_receive=SBUF;
                            // Mình muốn đặt lệnh reset tại đây
    		}
    }
    
    
    void main(void)
    {
     uart_init();
     while(1) {
     switch (uart_data_receive)
     {
     case 0x01:
     	{
    	 hieuung1();
    	 break;
    	}
     case 0x02:
     	{
    	 hieuung2();
    	 break;
    	}
     }
     }
    }
    Last edited by vodoika; 25-02-2012, 02:28.

  • #2
    sử dụng watdog timer nếu cần
    Be quan. Plz contact through email:

    Comment


    • #3
      Bạn có thể giúp mình lệnh set Watchdog và làm cho Watchdog tràn được không. Cám ơn bạn nhiều!(^_^)

      Comment


      • #4
        theo mình thì bạn thử nghĩ tới phương án dùng 1 timer liên tục kiểm tra bit RI nhé.nhớ đặt ưu tiên ngát nữa nhé.khi có sự thay đổi thì cho chạy lại từ đầu thôi

        Comment


        • #5
          Mình không hiểu rõ lắm về 8952 nên mọi người có thể giúp mình vài dòng code được không? Tại ngày xưa làm AVR nhưng bữa nay dùng 8952 cho tiết kiệm. (^_^)

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          Đang tải...
          X