导航:首页 > 操作系统 > 单片机断电

单片机断电

发布时间: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. 读写端,呈现“电阻”状态。

阅读全文

与单片机断电相关的资料

热点内容
程序员真的累吗 浏览:323
学信网app为什么刷脸不了 浏览:871
天蝎vs程序员 浏览:991
单片机下载口叫什么 浏览:186
程序员的道 浏览:924
云服务器不实名违法吗 浏览:556
怎样查看文件夹图片是否重复 浏览:993
文件怎么导成pdf文件 浏览:806
打开sql表的命令 浏览:101
安卓手机如何面部支付 浏览:37
天元数学app为什么登录不上去 浏览:822
明日之后为什么有些服务器是四个字 浏览:102
安卓系统l1是什么意思 浏览:24
服务器一直崩应该用什么指令 浏览:923
cm202贴片机编程 浏览:729
php构造函数带参数 浏览:179
解压电波歌曲大全 浏览:345
为啥文件夹移到桌面成word了 浏览:860
命令符的安全模式是哪个键 浏览:760
编程中学 浏览:957