導航:首頁 > 操作系統 > 單片機斷電

單片機斷電

發布時間:2022-01-14 01:59:52

㈠ 為什麼單片機斷電以後程序就不能用了

斷電以後程序還是保存在單片機裡面的,核查下 上電下程序和斷電後再運行程序 有什麼不一樣,程序結束的地方放了while(1)沒有?估計程序跑飛了。

㈡ 如何實現單片機讓開關斷電

如果只是控制開關斷電,很容易也很簡單,沒必要用單片機,反倒麻煩了,還需要寫程序。而只用一個繼電器就行,用繼電器的常閉觸點作開關,一旦繼電器吸合就斷電了。

㈢ 單片機斷電後是不是就復原了

你的理解是正確的,只有ROM中的數據還在。
前一次運行程序不會給單片機留下記錄,程序的初始數據不會改變

㈣ 51單片機斷電後數據怎麼存儲

用存儲晶元,比如AT24C0x系列的EEPROM,掉電後可以存儲數據,上電後從斷電時的數開始計算!這些晶元的用法資料很多的,你可以找一下!

㈤ 單片機斷電瞬間引起外中斷如何屏蔽。

進入中斷後,執行nop 幾次(或短暫延時)後再檢查INT輸入的電平,如果確實是低電平,才認為是中斷產生。

㈥ 怎麼實現單片機斷電實現數據

可以用定時器控制,同時每50ms就將數據保存一次。 在主程序的開始再將數據讀取出來就可以了,51單片機內部沒有EEPROM,所以不能夠實現該功能,可以用52。 或者是用外部晶元,用24c02,也可以實現這個功能。

㈦ 單片機斷電之後,管腳狀態

單片機的管腳有三種狀態 高電平 低電平 高阻

斷電後 管腳是高阻態

至於你說的誤動作 很對 最好是低電平動作 不行加個反相器也可以

㈧ 宏晶單片機,如何在斷電程序中,保護數據。請附程序

單片機中有EPROM,我用的是STC12C5A60S2,有1K空間的EPROM,是可以斷電保存用戶數據的,其他型號STC單片機的EPROM大小不一,參考手冊,但程序差不多的,程序如下:

/********************************************************************
* *
* 單片機學習開發板BP-51A - 內部EPROM讀寫演示程序 *
* 版本: V1.0 (2011/10/13) *
* 作者: BestProvider *
* 說明: STC12C5A60S2單片機有1K位元組的內部EPROM,可以用來存放用戶數 *
* 據(斷電不丟失),EPROM分2個扇區,地址為0X0000-0X1FFF和0X2000 *
* -0X3FFF,需要注意的是在進行寫操作時,必須先要進行所在扇區 *
* 的清除操作 *
* 硬體: 本實驗需要液晶屏LCD1602來顯示數據 *
* 參考: 《STC12C5A60S2中文資料》- 第12章 STC12C5A60S2系列單片機 *
* EPROM的應用 *
* *
********************************************************************/

#include <stc12c5a60s2.h>

typedef unsigned char BYTE; // 數據范圍0-255
typedef unsigned int WORD; // 數據范圍0-65535
typedef bit BOOL ; // 數據范圍0-1

#define CMD_IDLE 0
#define CMD_READ 1
#define CMD_WRITE 2
#define CMD_ERASE 3
#define ENABLE_IAP 0X82

BYTE write_data[5]={0,1,2,3,4};
BYTE read_data[5];

BYTE code dis1[ ] = {"EPROM Write/Read"} ;
BYTE code dis2[ ] = {"Data: "} ;

sbit LCD_RS = P2^0; // LCD控制線
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;

/* ms級延時 */
/********************************/
void delay_ms(WORD n)
{
WORD i=0;
WORD j;
while(i<n)
{
for(j=0;j<1000;j++){}
i++;
}
}

/* 測試LCD忙碌狀態 */
/********************************/
BOOL lcd_bz()
{
BOOL result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delay_ms(1);
result = (BOOL)(P0 & 0x80);
LCD_EN = 0;
return result;
}

/* 寫入指令數據到LCD */
/********************************/
void lcd_wcmd(BYTE cmd)
{
while(lcd_bz());
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
delay_ms(1);
P0 = cmd;
delay_ms(1);
LCD_EN = 1;
delay_ms(1);
LCD_EN = 0;
}

/* 設定顯示位置 */
/********************************/
void lcd_pos(BYTE pos)
{
lcd_wcmd(pos | 0x80);
}

/* 寫入字元顯示數據到LCD */
/********************************/
void lcd_wdat(BYTE dat)
{
while(lcd_bz());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P0 = dat;
delay_ms(1);
LCD_EN = 1;
delay_ms(1);
LCD_EN = 0;
}

/* LCD初始化設定 */
/********************************/
void lcd_init()
{
lcd_wcmd(0x38);
delay_ms(10);
lcd_wcmd(0x0c);
delay_ms(10);
lcd_wcmd(0x06);
delay_ms(10);
lcd_wcmd(0x01); // 清除LCD的顯示內容
delay_ms(10);
}

/* EPROM 扇區清除 */
/********************************/
void Iaperasesector(unsigned char addr)
{
IAP_ADDRH=addr;
IAP_ADDRL=0x00;
IAP_CONTR=ENABLE_IAP;
IAP_CMD=CMD_ERASE;

IAP_TRIG=0x5a;
IAP_TRIG=0xa5;
delay_ms(10);
}

/* EPROM 寫操作 */
/********************************/
void Iapwritebyte()
{
BYTE i;
Iaperasesector(0x00); // 在進行內部EPROM寫操作前需進行扇區清除操作
IAP_CONTR=ENABLE_IAP;

for(i=0;i<5;i++)
{
IAP_ADDRH=0x00;
IAP_ADDRL=0x00+i;
IAP_DATA=write_data[i];
IAP_CMD=CMD_WRITE;
IAP_TRIG=0x5a;
IAP_TRIG=0xa5;
delay_ms(10);
}

IAP_CONTR=0x00;

}

/* EPROM 讀操作 */
/********************************/
void Iapreadbyte()
{
BYTE i;

for(i=0;i<5;i++)
{
IAP_DATA=0;
IAP_CONTR=ENABLE_IAP;
IAP_ADDRH=0x00;
IAP_ADDRL=0x00+i;
IAP_CMD=CMD_READ;
IAP_TRIG=0x5a;
IAP_TRIG=0xa5;
delay_ms(10);
read_data[i]=IAP_DATA;
}

IAP_CONTR=0x00;

}

/* 數據顯示 */
/********************************/
void Display()
{
BYTE m ;

lcd_pos(0) ; // 設置顯示位置為第一行的第1個字元
m = 0 ;
while(dis1[m] != '\0')
{
lcd_wdat(dis1[m]) ; // 顯示字元
m++ ;
}

lcd_pos(0x40) ; // 設置顯示位置為第二行第1個字元
m = 0 ;
while(dis2[m] != '\0')
{
lcd_wdat(dis2[m]) ; // 顯示字元
m++ ;
}

lcd_pos(0x46); // 顯示讀取的第1個數據
lcd_wdat(0x30+read_data[0]);

lcd_pos(0x48); // 顯示讀取的第2個數據
lcd_wdat(0x30+read_data[1]);

lcd_pos(0x4a); // 顯示讀取的第3個數據
lcd_wdat(0x30+read_data[2]);

lcd_pos(0x4c); // 顯示讀取的第4個數據
lcd_wdat(0x30+read_data[3]);

lcd_pos(0x4e); // 顯示讀取的第5個數據
lcd_wdat(0x30+read_data[4]);
}

/* 主程序 */
/********************************/
main()
{

delay_ms(200); // 通電後延遲200ms,再進行EPROM操作
Iapwritebyte(); // 將4個數據存入單片機內部EPROM中
delay_ms(10);
Iapreadbyte(); // 從EPROM中讀取數據

lcd_init(); // 初始化LCD
delay_ms(10);

Display(); // 顯示讀取的數據

while(1);
}

㈨ 怎樣保持單片機的斷電後的時間

選一款有EEPROM的單片機,必要時保存就行了,也可以加塊電池,擴展一點SRAM來隨時保存。

㈩ 單片機斷電引腳處於什麼狀態

每個引腳是不一樣的,一般有下面幾種:

  1. 電平輸入腳,一般呈現「高阻」狀態;

  2. 電平輸出腳,呈現「電阻」狀態;

  3. 控制端,呈現「高阻」狀態;

  4. 電源腳,呈現「電阻」狀態;

  5. 晶振端,呈現「高阻」狀態;

  6. 復位腳,呈現「電阻」狀態;

  7. 通訊端,呈現「電阻」狀態;

  8. 讀寫端,呈現「電阻」狀態。

閱讀全文

與單片機斷電相關的資料

熱點內容
精品php源碼 瀏覽:958
自己編寫雲伺服器搶紅包 瀏覽:201
java解壓縮文件加密 瀏覽:886
dlink列印伺服器默認地址 瀏覽:351
php休眠函數 瀏覽:371
金蝶如何打開伺服器 瀏覽:764
e4a手游輔助源碼 瀏覽:776
什麼app可以實時直播 瀏覽:105
蘋果13的app閃退什麼原因 瀏覽:774
尾盤選股源碼公式 瀏覽:449
php日期運算 瀏覽:930
天龍八部長歌伺服器什麼時候開的 瀏覽:198
鬼泣4模型在那個文件夾 瀏覽:228
單片機的串列口 瀏覽:57
phpjson轉化為數組 瀏覽:267
pdf導入excel 瀏覽:427
蘋果xsmax信任app在哪裡設置 瀏覽:52
自動外鏈php源碼 瀏覽:244
我的世界新手獎勵箱命令 瀏覽:145
linux更新vim 瀏覽:997