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:
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; } } } }
Comment