52单片机做的红外学习遥控器-学了按键可以发射(4)

2019-02-16 13:53

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 功能,不需要每次都关


52单片机做的红外学习遥控器-学了按键可以发射(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:劳动作文之提前签订劳动合同

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: