?? music1car.c
字號:
/* Interrupt mode driver for UART.2006/1/21日增加看門狗
*/
#include <iom8515v.h>
#include <macros.h>
#include <uart.h>
#pragma interrupt_handler Time_ovf:8
#pragma interrupt_handler UART_RX_interrupt:10
//UART_TX_interrupt:11
static unsigned char buferdata[2]={255,254};
static char cnt_rxinit=0;
//static char a_data,c_data;
/* initialize UART */
void InitUSART( unsigned char baudrate )
{
//UCSRC=0;
UBRRH = (unsigned char)(baudrate>>8);
UBRRL = (unsigned char)baudrate; /* set the baud rate 設置波特率9600*/
WDR(); //先喂狗
WDTCR=11; //看門狗
UCSRB =0X18;//禁止中斷 0x98;//接收中斷/發送禁止
UCSRC=0X86;//異步/1停止位/8位數據
PORTA=0XFF;
DDRA=0XFF;
PORTC=0XFF;
DDRC=0XFF;
TCCR0=5;
TCNT0=168;
TIMSK=0;
OCR0=255;
SEI();
DDRB=0;
PORTD=0;
DDRD=0X80;
}
unsigned char receivemit(void)
{
while(!(UCSRA&(1<<RXC))){WDR();}
return UDR;
}
void Transmit( unsigned char data )
{
while(!(UCSRA&(1<<UDRE))){WDR();}
UDR=data;
}
/* interrupt handlers */
void UART_RX_interrupt( void )
{
char temp;
if(cnt_rxinit<=1)
{
WDR();
temp=buferdata[cnt_rxinit] = UDR; /* read the received data */
cnt_rxinit++;
Transmit(temp);
}
else
{
WDR();
cnt_rxinit=0;
temp=buferdata[cnt_rxinit] = UDR;
cnt_rxinit++;
Transmit(temp);
}
}
void Time_ovf( void )//時間中斷0
{
//_CLI();
//TIMSK=0;
//WDR();
//TCCR0=5;
TCNT0=168;
if(PINB&0X04)
{
Transmit(57);//確認標志(ok)
while(PINB&0X04){WDR();}
}
else
{
if(PIND&0X04)
{
Transmit(71);//選歌標志
while(PIND&0X04){WDR();}
}
else
{
if(PIND&0X08)
{
Transmit(19);//音量+標志
//while(PIND&0X08);
}
else
{
if(PIND&0X10)
{
Transmit(11);//音量-標志
// while(PIND&0X10);
}
else
{
if(PIND&0X20)
{
Transmit(144);//關機-標志
// while(PIND&0X10);
}
else;
}
}
}
}
TIMSK=2;
//_SEI();
}
/*void out_zx(void)
{
PORTA=buferdata[0];
PORTC=buferdata[1];
}
*/
void main( void )
{
reset: InitUSART( 51 );
Transmit(99);
Transmit(99);
for(;;)
{
WDR();
//InitUSART( 51 );
//Transmit(99);
// Transmit(99);
InitUSART( 51 ); /* set the baudrate to 9600 bps using a 8MHz crystal */
//_CLI();
//UCSRB=0X18;禁止中斷
//PORTD |= 0X80;
if(receivemit()==218)
{
WDR();
Transmit(218);
UCSRB=0X98;
DDRD|=0X80; //要增加關機時對開機按鈕的控制(開,關機按鈕復用)
PORTD|= 0X80;//播放系統打開后切斷開機按鈕的連接(硬件加繼電器)
TIMSK=2;
SEI(); /* enable interrupts => enable UART interrupts */
while(buferdata[0]!=155 || buferdata[1]!=155)//判斷關機信號buferdata[0]!=155 && buferdata[1]!=155
{
PORTA=buferdata[0];
PORTC=buferdata[1] & 253; //功放開關控制
WDR();
//out_zx();
/* if(PINB&0X04)
{
Transmit(57);//確認標志(ok)
while(PINB&0X04);
}
else
{
if(PIND&0X04)
{
Transmit(71);//選歌標志
while(PIND&0X04);
}
else
{
if(PIND&0X08)
{
Transmit(19);//音量+標志
while(PIND&0X08);
}
else
{
if(PIND&0X10)
{
Transmit(11);//音量-標志
while(PIND&0X10);
}
else;
}
}
} */
}//
buferdata[0]=255;
buferdata[1]=255;
PORTA=255;
PORTC=255;
goto reset;//強制復位
}
else
{
Transmit(99);
PORTA=255;
PORTC=255;
}
/* while ( 1 )forever
{*/
/*//Transmit(88); echo the received character
}*/
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -