📄 16c554.c
字号:
{ unsigned char temp;
uc_16c554c_THR=s;
temp=uc_16c554c_LSR;
while((temp&0x40)!=0x40)
{
temp=uc_16c554c_LSR;
}
}
//发送一帧数据
void frame_16c554csend(unsigned char t)//发送数据桢
{ EX0=0;//当RTS 变高时RX1变低16c554认为有数据要接受会产生接受中断,关闭中断
RTS3=ENABLE;
for(i=0;i<t;i++)
{
uart_16C554csend(s_buffer[i]);
}
RTS3=DISABLE;
EX0=1;
}
//发送一个字节
void uart_16C554dsend(unsigned char s)
{ unsigned char temp;
uc_16c554d_THR=s;
temp=uc_16c554d_LSR;
while((temp&0x40)!=0x40)
{
temp=uc_16c554d_LSR;
}
}
//发送一帧数据
void frame_16c554dsend(unsigned char t)//发送数据桢
{ EX0=0;//当RTS 变高时RX1变低16c554认为有数据要接受会产生接受中断,关闭中断
RTS4=ENABLE;
for(i=0;i<t;i++)
{
uart_16C554dsend(s_buffer[i]);
}
RTS4=DISABLE;
EX0=1;
}
void INTA_int(void) interrupt 0 using 1 //串口1中断
{
unsigned char x;
/*if(INTC==0)//串口3接收到数据,原理图本意是用定时器做外部中断,现改为查询
{
uc_554c_isr=uc_16c554c_ISR; //读中断状态寄存器
if(uc_554c_isr_status) //ISR INT STATUS为0表示有中断产生
return;
uc_554c_isr=uc_16c554c_ISR; //读中断状态寄存器
if(uc_554c_isr_status) //ISR INT STATUS为0表示有中断产生
return;
switch(uc_554c_isr)
{
case 0xc1:
case 0x01: //NO INTERRUPT
break;
case 0xc4:
case 0x04: // receive data interrupt
uc_554c_r_buffer[uc_554c_r_number]=uc_16c554c_RHR;
if(uc_554c_r_number==0) //接受到0X7E,开始记数
{
if(uc_554c_r_buffer[0]==FRAME_START)
uc_554c_r_number++;
}
else if((uc_554c_r_buffer[uc_554c_r_number]==FRAME_END)&&(uc_554c_r_number==17))//判断接受帧尾
uc_554c_r_complete=UART_COMPLETE;
else
uc_554c_r_number++;
break;
case 0xc2:
case 0x02: //tranmit data interrupt
break;
case 0xc6:
case 0x06: //lsr interrupt
x=uc_16c554c_LSR; //清除LSR中断
break;
case 0x0c: //receive time out interrupt
case 0xcc:
x=uc_16c554c_RHR; //清除接受超时
break;
case 0x00: //msr interrupt
case 0xc0:
x=uc_16c554c_MSR; //清除msr中断
break;
default:
break;
}
}
else if(INTD==0)
{
uc_554d_isr=uc_16c554d_ISR; //读中断状态寄存器
if(uc_554d_isr_status) //ISR INT STATUS为0表示有中断产生
return;
uc_554d_isr=uc_16c554d_ISR; //读中断状态寄存器
switch(uc_554d_isr)
{ case 0xc1:
case 0x01: //NO INTERRUPT
break;
case 0xc4:
case 0x04: // receive data interrupt
uc_554d_r_buffer[uc_554d_r_number]=uc_16c554d_RHR;
if(uc_554d_r_number==0) //接受到0X7E,开始记数
{
if(uc_554d_r_buffer[0]==FRAME_START)
uc_554d_r_number++;
}
else if((uc_554d_r_buffer[uc_554c_r_number]==FRAME_END)&&(uc_554d_r_number==17))//判断接受帧尾
uc_554d_r_complete=UART_COMPLETE;
else
uc_554d_r_number++;
break;
case 0xc2:
case 0x02: //tranmit data interrupt
break;
case 0xc6:
case 0x06: //lsr interrupt
x=uc_16c554d_LSR; //清除LSR中断
break;
case 0x0c: //receive time out interrupt
case 0xcc:
x=uc_16c554d_RHR; //清除接受超时
break;
case 0x00: //msr interrupt
case 0xc0:
x=uc_16c554d_MSR; //清除msr中断
break;
default:
break;
}
}
else*/
{
uc_554a_isr=uc_16c554a_ISR; //读中断状态寄存器
if(uc_554a_isr_status) //ISR INT STATUS为0表示有中断产生
return;
switch(uc_554a_isr)
{ case 0xc1:
case 0x01: //NO INTERRUPT
break;
case 0xc4:
case 0x04: // receive data interrupt
uc_554a_r_buffer[uc_554a_r_number]=uc_16c554a_RHR;
if(uc_554a_r_number==0) //接受到0X7E,开始记数
{
if(uc_554a_r_buffer[0]==FRAME_START)
uc_554a_r_number++;
}
else if((uc_554a_r_buffer[uc_554a_r_number]==FRAME_END)&&(uc_554a_r_number==17))//判断接受帧尾
uc_554a_r_complete=UART_COMPLETE;
else
uc_554a_r_number++;
break;
case 0xc2:
case 0x02: //tranmit data interrupt
break;
case 0xc6:
case 0x06: //lsr interrupt
x=uc_16c554a_LSR; //清除LSR中断
break;
case 0x0c: //receive time out interrupt
case 0xcc:
x=uc_16c554a_RHR; //清除接受超时
break;
case 0x00: //msr interrupt
case 0xc0:
x=uc_16c554a_MSR; //清除msr中断
break;
default:
break;
}
//uc_16c554a_MCR=0x08; //使能串口中断
}
}
void INTB_int(void) interrupt 2 using 0 //串口2中断
{
unsigned char x;
uc_554b_isr=uc_16c554b_ISR; //读中断状态寄存器
if(uc_554b_isr_status) //ISR INT STATUS为0表示有中断产生
return;
switch(uc_554b_isr)
{
case 0xc1:
case 0x01: //NO INTERRUPT
break;
case 0xc4:
case 0x04: // receive data interrupt
uc_554b_r_buffer[uc_554b_r_number]=uc_16c554b_RHR;
if(uc_554b_r_number==0) //接受到0X7E,开始记数
{
if(uc_554b_r_buffer[0]==FRAME_START)
uc_554b_r_number++;
}
else if((uc_554b_r_buffer[uc_554b_r_number]==FRAME_END)&&(uc_554b_r_number==17))//判断接受帧尾
uc_554b_r_complete=UART_COMPLETE;
else
uc_554b_r_number++;
break;
case 0xc2:
case 0x02: //tranmit data interrupt
break;
case 0xc6:
case 0x06: //lsr interrupt
x=uc_16c554b_LSR; //清除LSR中断
break;
case 0xcc:
case 0x0c: //receive time out interrupt
x=uc_16c554b_RHR; //清除接受超时
break;
case 0xc0:
case 0x00: //msr interrupt
x=uc_16c554b_MSR; //清除msr中断
break;
}
// uc_16c554b_MCR=0x08; //使能串口中断
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -