dmx512灯光控制协义 ICCAVR 接收和发送程序
发布时间:2024-10-11
发布时间:2024-10-11
基于AVE单片机的,DMX512的信号接收与发送程序
//UART0 initialisation
// desired baud rate: 250000
// actual: baud rate:250000 (0.0%)
// char size: 9 bit
// parity: Disabled
void uart0_init(void)
{
UCSRB = 0x00; // RXEN //disable while setting baud rate
UCSRA= 0x00; // RXC=0 RXC TXC UDRE FE DOR PE U2X MPCM
UCSRB = 0xDC; //0XF8 RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8 UCSRC = 0x06; // 9 bit URSEL UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL UBRRH = 0x00; //set baud rate hi
UCSRC = 0x86; // 9 bit 86
UBRRL = 0x01; //set baud rate lo ( 0x01 u2x=0)
}
#pragma interrupt_handler uart0_rx_isr:12
void uart0_rx_isr(void)
{ unsigned char status, resh, resl;
while ( !(UCSRA & (1<<RXC)) ); // from buffer
status = UCSRA; ////if ( status & (1<<FE)|(1<<DOR)|(1<<PE) ) //return ;
resh = UCSRB;
resl = UDR;
resh = (resh >> 1) & 0x01; // TAKE RX B8
if (resh==1)//(1<<RXB8))
{
if (CUR_BYTE_A==0)
{ CODE_Data=resl;
if (CODE_Data==0) //UDR_empty=0;
++CUR_BYTE_A; //TEST ok
}
else
{
if (CUR_BYTE_A==IADDRESS_A+0) DMX_data_0=resl; //001
if (CUR_BYTE_A==IADDRESS_A+1) DMX_data_1=resl;
if (CUR_BYTE_A==IADDRESS_A+2) DMX_data_2=resl;
if (CUR_BYTE_A==IADDRESS_A+3) DMX_data_3=resl;
if (CODE_Data==0) ++CUR_BYTE_A;
}
}
else
基于AVE单片机的,DMX512的信号接收与发送程序
{
CUR_BYTE_A = 0; //test OK
CODE_Data = 0xff;
}
}
//DMX512发送程序自己研发原创作品
//****************************************
void DMX_SEND() //100US /TIMES
{
++JS_DMX_SEND;
DMX_SEND_PAN=1;
DMX_PORTD|=DMX_control_send;
if (JS_DMX_SEND==1){
UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<UDRIE)|(1<<RXEN)|(1<<TXEN)|(1<<UCSZ2)|(0<<TX B8);
}
//delay_us(200); //BREAK ucsrb RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8 if (JS_DMX_SEND==3){
while (!(UCSRA&(1<<UDRE))); //start code
UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<UDRIE)|(1<<RXEN)|(1<<TXEN)|(1<<UCSZ2)|(0<<TX B8);
UDR=0;
}
if (JS_DMX_SEND==4){
while (!(UCSRA&(1<<UDRE))); //cannel 0
UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<UDRIE)|(1<<RXEN)|(1<<TXEN)|(1<<UCSZ2)|(1<<TX B8);
//SEND_DA TA=LED_DISPLAY_V2*100+LED_DISPLAY_V3*10+LED_DISPLAY_V4;
UDR=0;
}
if (JS_DMX_SEND==5){
while (!(UCSRA&(1<<UDRE))); //cannel 1
UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<UDRIE)|(1<<RXEN)|(1<<TXEN)|(1<<UCSZ2)|(1<<TX B8);
UDR=LED_RED;
}
if (JS_DMX_SEND==6){
while (!(UCSRA&(1<<UDRE))); //cannel 2
基于AVE单片机的,DMX512的信号接收与发送程序
UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<UDRIE)|(1<<RXEN)|(1<<TXEN)|(1<<UCSZ2)|(1<<TX B8);
//SEND_DA TA=LED_DISPLAY_V2*100+LED_DISPLAY_V3*10+LED_DISPLAY_V4;
//UDR=SEND_DA TA;
UDR=LED_GREEN;
}
if (JS_DMX_SEND==7){
while (!(UCSRA&(1<<UDRE))); //cannel 3
UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<UDRIE)|(1<<RXEN)|(1<<TXEN)|(1<<UCSZ2)|(1<<TX B8);
UDR=LED_BLUE;//SEND_DA TA;
}
if (JS_DMX_SEND==8){
while (!(UCSRA&(1<<UDRE))); //cannel 4
UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<UDRIE)|(1<<RXEN)|(1<<TXEN)|(1<<UCSZ2)|(1<<TX B8);
//SEND_DA TA=LED_DISPLAY_V2*100+LED_DISPLAY_V3*10+LED_DISPLAY_V4;
UDR=LED_SHUTER;//SEND_DA TA;
}
if (JS_DMX_SEND==9){
while (!(UCSRA&(1<<UDRE))); //cannel 5
UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<UDRIE)|(1<<RXEN)|(1<<TXEN)|(1<<UCSZ2)|(1<<TX B8);
UDR=0;//SEND_DA TA;
}
if (JS_DMX_SEND==10){
while (!(UCSRA&(1<<UDRE))); //cannel 6
UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<UDRIE)|(1<<RXEN)|(1<<TXEN)|(1<<UCSZ2)|(1<<TX B8);
UDR=0;//SEND_DA TA;
}
if (JS_DMX_SEND==11){
while (!(UCSRA&(1<<UDRE))); //cannel 7
UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<UDRIE)|(1<<RXEN)|(1<<TXEN)|(1<<UCSZ2)|(1<<TX B8);
UDR=0;//SEND_DA TA;
}
if (JS_DMX_SEND==12){ JS_DMX_SEND=0;
while (!(UCSRA&(1<<UDRE))); //cannel 8
基于AVE单片机的,DMX512的信号接收与发送程序
UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<UDRIE)|(1<<RXEN)|(1<<TXEN)|(1<<UCSZ2)|(1<<TX B8);
UDR=0;//SEND_DA TA;
}
DMX_SEND_PAN=0;
}
参考链接:http://www.77cn.com.cn/show.aspx?id=2334&cid=14