芯片复制FT61F022A单片机使用红外遥控控制
芯片复制IC:FT61F022A
* 功能:芯片复制使用红外遥控控制LED灯的亮度
* 芯片复制
****************************************/
#include "SYSCFG.h";
/***********************宏定义**************************/
#define unchar unsigned char
#define unint unsigned int
#define unlong unsigned long
#define LED_S2 RA6
#define LED_S1 RC3
#define IR_Input RC1
/******************************************************/
void Ir_work(void);
volatile bit bit_bit;
volatile bit IR_Input_Old;
volatile bit REC_DATA_OK;
volatile bit REC_BIT_OK;
volatile unsigned char bit_count;
volatile unsigned char byte_count;
volatile unsigned char irdata[4];
volatile unsigned char irtime;
/*-------------------------------------------------
* 函数名:POWER_INITIAL
* 功能: 上电系统初始化
* 输入: 无
* 输出: 无
--------------------------------------------------*/
void POWER_INITIAL (void)
{
OSCCON = 0B01110001; //WDT 32KHZ IRCF=111=16MHZ/2=8MHZ,0.125US/T
//Bit0=1,系统时钟为内部振荡器
//Bit0=0,时钟源由FOSC<2:0>决定即编译选项时选择
INTCON = 0; //暂禁止所有中断
PORTA = 0B00000000;
TRISA = 0B10111111; //PA输入输出 0-输出 1-输入
//PA6->输出
PORTC = 0B00000000;
TRISC = 0B11110111; //PC输入输出 0-输出 1-输入
WPUA = 0B00000000; //PA端口上拉控制 1-开上拉 0-关上拉
WPUC = 0B00000010; //PC端口上拉控制 1-开上拉 0-关上拉
OPTION = 0B00001000; //Bit3=1 WDT MODE,PS=000=1:1 WDT RATE
//Bit3 预分频器分配位 0-Timer0 1-WDT
//Bit7(PAPU)=0 ENABLED PULL UP PA
MSCKCON = 0B00000000; //Bit6->0,禁止PA4,PC5稳压输出
//Bit5->0,TIMER2时钟为Fosc
//But4->0,禁止LVR
CMCON0 = 0B00000111; //关闭比较器,CxIN为数字IO口
ANSEL=0X0B00000000;
}
/*-------------------------------------------------
* 函数名称: TIMER1_INITIAL
* 功能: 初始化设置定时器1
* 相关寄存器: T1CON TMR1H TMR1L TMR1IE TMR1ON PEIE GIE
-------------------------------------------------*/
void TIMER1_INITIAL (void)
{
//需要在中断里重新赋初始值
T1CON = 0B00000000; //B[5:4]=00,T2时钟分频 1:1
//B1=0,T1时钟源选择内部时钟
//T1SYNC=16M/2T=8M=0.125US
TMR1L = 0XC0; //定时500US=>TMR1=8000*0.125US=1MS
//初值=65536-8000=57,536=>0XE0C0
TMR1H = 0XE0; //赋初值=>TMR1H=E0;TMR1L=0XC0
// TMR1L = (65536 - 40000) % 256;
// TMR1H = (65536 - 40000) / 256;
// TMR1L =0XA0;
// TMR1H =0XFF;
TMR1IE = 1; //使能TMER1的中断
TMR1ON = 1; //使能TMER1启动
PEIE = 1; //使能外设中断
GIE = 1; //使能全局中断
}
/**************中断处理**********************************/
void interrupt ISR(void) //PIC_HI-TECH使用
{
if(TMR1IF)
{
TMR1IF = 0;
TMR1L = 0XE0; //定时500US=>TMR1=8000*0.125US=1MS
//初值=65536-8000=57,536=>0XE0C0
TMR1H = 0XFC; //100US
//LED_S1=1;
if(IR_Input&&irtime<100)
{
irtime++;
}
if(IR_Input==0)
{
if(IR_Input_Old==1)
{
if(irtime>1&&irtime<10)
{bit_bit=0;REC_BIT_OK=1;}
else if(irtime>9&&irtime<21)
{bit_bit=1;REC_BIT_OK=1;}
else if(irtime>40)
{
REC_BIT_OK=0;
bit_count=0;
byte_count=0;
}
}
irtime=0;
}

芯片解密