ADC_DATA = 0; //清除结果
ADC_CONTR = 0x60; //转换速度设置 0x60 最快速度
ADC_CONTR = 0xE0; //1110,0000 清 ADC_FLAG, ADC_START 位和低 3 位
ADC_CONTR |= 0x03; //选择 A/D 当前通道 P1.3 delayus(100); //使输入电压达到稳定 ADC_CONTR |= 0x08; //0000,1000 令 ADCS = 1, 启动A/D转换,
while(!(ADC_CONTR & 0x10)); //!的优先级比&高太多了 /***************
这里while 不能改成while(ADC_CONTR & 0x10==0) ;就错误了,因为优先级 ==比&高 ,所以要加括号
while( (ADC_CONTR & 0x10) ==0) 或者非一下 while(!(ADC_CONTR & 0x10)); //!的优先级比&高太多了 ******************************/
ADC_CONTR &= 0xE7; //1111,0111 清 ADC_FLAG 位, 关闭A/D转换,
voltage=ADC_DATA;
if( vol
k=1; //对应0X000扇区内容 }
if(voltage>=40&&vol
k=2; //对应0X200扇区内容
}
if(voltage>=80&&vol
if(voltage>=110&&vol
if(voltage>=130&&vol
if(voltage>=148&&vol
/******************************************/ /*
--- STC International Limited ---------------- 一个完整的EEPROM 测试程序,用宏晶的下载板可以直接测试 STC12C52xxAD 系列单片机 EEPROM/IAP 功能测试程序演示 STC11xx 系列单片机 EEPROM/IAP 功能测试程序演示 STC10xx 系列单片机 EEPROM/IAP 功能测试程序演示 --- STC International Limited ------------------
--- 宏晶科技 设计 2009/1/12 V1.0 -------------- ***********************************************/
//读一字节,调用前需打开IAP 功能,入口:DPTR = 字节地址,返回:A = 读出字节
uchar Byte_Read(uint add) {
ISP_DATA = 0x00;
ISP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间
ISP_CMD = 0x01; //IAP/ISP/EEPROM 字节读命令
my_unTemp16.un_temp16 = add; //联合体变量赋值 ,这里是俩字节,因为公用内存,所以下面数组也是此内容
ISP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址
ISP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址
EA = 0;
ISP_TRIG = 0x46; //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此
ISP_TRIG = 0xB9; //送完A5h 后,ISP/IAP 命令立即被触发起动 _nop_(); //EA = 1;
IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
return (ISP_DATA); //数据在ISP_DATA寄存器中 }
//字节编程,调用前需打开IAP 功能,入口:DPTR = 字节地址, A= 须编程字节的数据
void Byte_Program(uint add, uchar ch) {
ISP_CONTR = ENABLE_ISP; //打开 IAP 功能, 设置Flash 操作等待时间
ISP_CMD = 0x02; //IAP/ISP/EEPROM 字节编程命令
my_unTemp16.un_temp16 = add; //联合体变量赋值 ,这里是俩字节,因为公用内存,所以下面数组也是此内容
ISP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址
ISP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址
ISP_DATA = ch; //要编程的数据先送进ISP_DATA 寄存器
EA = 0;//必须关中断,不然没法写
ISP_TRIG = 0x46; //先送 46h,再送B9h 到ISP/IAP 触发寄存器,每次都需如此
ISP_TRIG = 0xb9; //送完B9h 后,ISP/IAP 命令立即被触发起动 _nop_(); //EA = 1;
IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关 }
//擦除扇区, 入口:DPTR = 扇区地址 void Sector_Erase(uint add) {
ISP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间
ISP_CMD = 0x03; //IAP/ISP/EEPROM 扇区擦除命令
my_unTemp16.un_temp16 = add;
ISP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址
ISP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址
EA = 0;//必须关中断
ISP_TRIG = 0x46; //先送 46h,再送B9h 到ISP/IAP 触发寄存器,每次都需如此
ISP_TRIG = 0xB9; //送完B9h 后,ISP/IAP 命令立即被触发起动 _nop_(); //EA = 1;
IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关