📄 avr单片机发射.c
字号:
#include <mega8.h>
#include <key.h>
#define IF_STRAT_1m 0xf82f
#define IF_500 0xfe0b
#define IF_1000 0xfc17
#define IF_38K 0x68
// #define IF_38KL 0x95 //0x68
// #define IF_38KH 0xd3 //1:1//0x68
unsigned char CapCnt;
unsigned char Data;
unsigned char IFMode;
unsigned char Mode38K;
unsigned char IFTemp;
bit DataFlag;
unsigned char IFend = 0;
#define IRD_TX PORTB.3
#define I PORTB.4
void InitIF(unsigned char x);
void Open38K();
void Stop38K();
void SendEnd(void);
/*//////////////////////////////////////
// 中断程序
//
///////////////////////////////////////
////////////*/
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
OCR2 = IF_38K;
}
////////////*/
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0x83; //1m
++DebounceCnt;
Time1m = 1;
}
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
if(CapCnt == 9){
IFend = 1;
CapCnt = 0;
}
// DataFlag ^= 1;
if(DataFlag == 1){
DataFlag = 0;
if((IFTemp>>CapCnt)&0x01)
Data = 1;
else
Data = 0;
CapCnt ++;
TCNT1 = IF_500;
Stop38K();
IRD_TX = 0;
}
else{
DataFlag = 1;
switch(Data){
case 0: TCNT1 = IF_500;
break;
case 1: TCNT1 = IF_1000;
break;
}
Open38K();
}
}
void InitIF(unsigned char x)
{
unsigned char temp;
TCCR1A=0x00;
TCCR1B=0x02;
TCNT1 = IF_STRAT_1m;
Open38K();
TIMSK |=(1<<2);
CapCnt = 0;
IFMode = 0;
DataFlag = 1;
IFend = 0;
temp = x&0x0f;
temp <<= 4;
IFTemp = x|temp;
}
void Open38K(void)
{
TCNT2 = 0x00;
OCR2 = IF_38K;
TCCR2=0x19;
TIMSK |=(1<<7);
Mode38K = 1;
}
void Stop38K(void)
{
TCNT2 = 0x00;
TIMSK &= ~(1<<7);
TCCR2 = 0x00;
}
void init(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=0 State2=0 State1=T State0=T
PORTB=0x1e;
DDRB=0xff;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x0f;
DDRC=0x0f;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0xf0;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x03;
TCNT0=0x83;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK |= (1<<0);
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
}
void SendEnd(void)
{
TCCR1B=0x00;
TCCR2=0x00;
TIMSK=0x00;
// TIMSK |= (1<<0);
TIFR |=(1<<2)|(1<<0);
IRD_TX = 0;
}
void main(void)
{
unsigned char temp;
unsigned char i;
init();
#asm("sei")
while (1)
{
// temp = PINB&0x04;
// if( temp == 0){
// for(i=0;i<3;i++)
// InitIF(0x03);
// while(IFend == 0);
// SendEnd();
// }
// temp = PINB&0x02;
// if( temp == 0){
// for(i=0;i<3;i++)
// InitIF(0x06);
// while(IFend == 0);
// SendEnd();
// }
// ScanKey();
KeyCode = PollingKey();
switch(KeyCode){
case KEY_0:
case KEY_1:
case KEY_2:
case KEY_3:
case KEY_4:
case KEY_5:
case KEY_6:
case KEY_7:
case KEY_8:
case KEY_9:
case KEY_10:
case KEY_11:
case KEY_12:
case KEY_13:
case KEY_14:
case KEY_15:
InitIF(KeyCode);
while(IFend == 0);
SendEnd();
break;
default:
break;
}
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -