📄 receive_and_send.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 + -