|
用超级终端能能正常发送,就是MCU好象收不到一样,接收中断好象没有响应。请对此有经验的朋友帮忙看看,是不是我什么地方写的不正确。
#include
#include
#include "show_def.h"
#define fosc 16000000 //晶振16MHZ
#define baud 9600 //波特率
void Port_init(void)
{
CLI();
DDRA =0xFF;
PORTA=0x00;
DDRB =0xFF;
PORTB=0x00;
DDRD =0xF7;
PORTD=0x08;
SJA1000_CS_HI();//片选无效
GICR |= (1 << INT1);
MCUCR=0x08;
SEI();
}
void uart_init(void)
{
CLI();
UBRRL=(fosc/16/(baud+1))%256;
UBRRH=(fosc/16/(baud+1))/256;
UCSRC=(1<
UCSRB=(1<
SEI();
}
#pragma interrupt_handler Int1: 3 /*外部中断INT1*/
void Int1(void)
{
CLI();
Show_TX_Data+=1; //计数单元加1
TXD_flag = 1;
SEI();
}
#pragma interrupt_handler Usart_RXC:12
void Usart_RXC(void)
{//接收数据函数,在中断服务程序中调用
CLI();
RX_data=UDR;
RXD_flag = 1;//置接收到数据标志
NOP();
SEI();//打开中断
}
/*void RS232_RXD( void )
{
CLI();//关闭所有中断
while(!(UCSRA&(1<
RX_data=UDR;
SEI();//打开中断
}*/
void RS232_TXD( uchar data )
{
CLI();//关闭所有中断
while (!(UCSRA&(1<
UDR = data;
SEI();//打开中断
}
void main(void)
{ Port_init();
uart_init();
NOP();
while(1)
{
NOPS;
if( RXD_flag )//接收处理程序
{
CLI();//关闭CPU中断
RXD_flag = 0;//清除标志
Show_RX_Data = RX_data;//接收对方发送的数据
SEI();
}
if( TXD_flag )//发送处理程序
{
CLI();
TXD_flag = 0;
TX_data = Show_TX_Data;//给发送的数据赋值
RS232_TXD(TX_data);
SEI();
}
led_seg7(1,Show_TX_Data);
led_seg7(3,Show_RX_Data);
}//while 结束
}//main结束
void Delay(uchar delay_time)
{//延时程序
while(delay_time--)
{}
}
|
|