⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 receive_and_send.c

📁 Dmx512接受与发送.可以用在AVR单片机上
💻 C
字号:
//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 RXB8                               
          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
             {
              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<<TXB8);
}
//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<<TXB8);
    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<<TXB8);    
    //SEND_DATA=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<<TXB8);      
    UDR=LED_RED;
    }
if (JS_DMX_SEND==6){    
while (!(UCSRA&(1<<UDRE)));    //cannel 2
       UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<UDRIE)|(1<<RXEN)|(1<<TXEN)|(1<<UCSZ2)|(1<<TXB8);    
    //SEND_DATA=LED_DISPLAY_V2*100+LED_DISPLAY_V3*10+LED_DISPLAY_V4;
    //UDR=SEND_DATA;
    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<<TXB8);    
    UDR=LED_BLUE;//SEND_DATA;
    }
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<<TXB8);    
    //SEND_DATA=LED_DISPLAY_V2*100+LED_DISPLAY_V3*10+LED_DISPLAY_V4;
    UDR=LED_SHUTER;//SEND_DATA;
    }
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<<TXB8);    
    UDR=0;//SEND_DATA;
    } 
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<<TXB8);    
    UDR=0;//SEND_DATA;
    } 
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<<TXB8);    
    UDR=0;//SEND_DATA;
    }                
if (JS_DMX_SEND==12){ JS_DMX_SEND=0; 
while (!(UCSRA&(1<<UDRE)));    //cannel 8
       UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<UDRIE)|(1<<RXEN)|(1<<TXEN)|(1<<UCSZ2)|(1<<TXB8);    
    UDR=0;//SEND_DATA;
    }         
DMX_SEND_PAN=0;          
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -