基于STC12C2052AD单片机的红外遥控器源代码.doc
文本预览下载声明
基于STC12C2052AD单片机的红外遥控器源代码
基于STC12C2052AD单片机的红外遥控器源代码
// 中断函数注意养成指定寄存器组的习惯
//不同优先级的中断程序绝对不能使用同一组寄存器
/*****编程时防止中断把寄存器中的数据改变的解决方法是给中断指定寄存器,
?? ? ? 同优先级的使用同一组没事。
?? ?1、写中断程序一定要用using语句指定寄存器组。第1、2、3组都可以,不能是0.
?? ?2、51单片机的中断有两个优先级。一个中断不会打断另一个相同优先级的中断。?
?? ? ? 这样相同级别中断可以使用同一个组。比如:低优先级的中断函数都
?? ? ? 用 using 1,高优先级的中断都用 using 2 。这样不会冲突。?
?? ?下面是一个正常的例子: ?
?? ?C程序: void int0() interrupt 0 using 1
?默认5个中断时同级的,不会冲突,但是最好养成好习惯
?不指定中断要使用的寄存器,每次都要入栈保护数据,中断完还要出栈,代码会增加32字节
?完整代码下载:/f/hwxx52.rar
********************************************************************/
#include stc12c2052ad.h
#include intrins.h
#define uchar unsigned char
#define uint unsigned int
//少占鱼制作 ?河北正定欢迎您 ? 长沙航空职业技术学院 ?2010 年QQ//
//定义Flash 操作等待时间及允许IAP/ISP/EEPROM 操作的常数
//#define ENABLE_ISP 0x80 //系统工作时钟30MHz 时,对ISP_CONTR 寄存器设置此值?
//#define ENABLE_ISP 0x81 //系统工作时钟24MHz 时,对ISP_CONTR 寄存器设置此值?
#define ENABLE_ISP 0x82 //系统工作时钟20MHz 时,对ISP_CONTR 寄存器设置此值 ?
//#define ENABLE_ISP 0x83 //系统工作时钟12MHz 时,对ISP_CONTR 寄存器设置此值 ?
//#define ENABLE_ISP 0x84 //系统工作时钟6MHz 时,对ISP_CONTR 寄存器设置此值?
//#define ENABLE_ISP 0x85 //系统工作时钟3MHz 时,对ISP_CONTR 寄存器设置此值 ?
//#define ENABLE_ISP 0x86 //系统工作时钟2MHz 时,对ISP_CONTR 寄存器设置此值 ?
//#define ENABLE_ISP 0x87 //系统工作时钟1MHz 时,对ISP_CONTR 寄存器设置此值 ?
?
union ? union ?_temp16
{
?? ?uint un_temp16;
?? ?uchar ?un_temp8[2];
}my_unTemp16;
?
uchar Byte_Read(uint add); ? ? ? ? ? ? ?//读一字节,调用前需打开IAP 功能?
void Byte_Program(uint add, uchar ch); ?//字节编程,调用前需打开IAP 功能 ?
void Sector_Erase(uint add); ? ? ? ? ? ?//擦除扇区?
void IAP_Disable(); ? ? ? ? ? ? ? ? ? ? ? //关闭IAP 功能 ?
?
sbit JIESHOU=P1^0; //接收指示灯
sbit FASHE=P1^1; //发射指示灯
sbit KEY=P3^5;
sbit cin=P3^2; //接收端
sbit contrl=P3^0;//发射控制端
sbit khz=P3^1;//38KHZ产生 ,由T1设置
/****************************************************************/
void delayms(uint); ?? ???void ADC();
void InitADC();
void init1();
void init2();
void fashe();
void jieshou();
void delayus(uchar i);
void led(uchar x);
/******************************************************/
uint voltage;
bit 爎ecei
显示全部