求助中断错误
// USART1 发送***************************************************************SIGNAL(SIG_UART1_TRANS) // USART1 发送中断
{
if(tx_counter1)
{
tx_counter1-=1; //发送字节数减一
UDR1=tx_buffer1; //缓存区数据载入发送寄存器
if((++tx_rd_index1)==TX_BUFFER_SIZE1)
tx_rd_index1=0; //如果数据发送完读指示指向缓存区头
}
}
这个是网上下载来的,编译时,一直提示这段程序有错误,请问谁知道是怎么回事吗? KEIL下测试没有语法错误,不知楼主的编译器是如何提示的?
// USART1 发送***************************************************************
SIGNAL(SIG_UART1_TRANS) // USART1 发送中断
关键字对么? 单片机型号?编译环境?什么错误提示?
标题不合格!小心被封锁ID哦 哦,是iccavr编译器,M64单片机,我是要用串口中断来接收数据的,可是怎么也收不到 yanghuai1023 发表于 2013-8-3 13:29 static/image/common/back.gif
哦,是iccavr编译器,M64单片机,我是要用串口中断来接收数据的,可是怎么也收不到 ...
串口0应该是正常的吧?估计是兼容模式下的问题,见手册说明 串口0我已经接了其他东西,已经的串口是接到串口1的
// USART1 发送***************************************************************
SIGNAL(SIG_UART1_TRANS) // USART1 发送中断
关键字不确定怎么写,就是报这里的错误,可能是关键字也不对的 关键字错了,看相关头文件里面的定义。 iom64v.h 里面有
/* Interrupt Vector Numbers */
#define iv_RESET 1
#define iv_INT0 2
#define iv_EXT_INT0 2
#define iv_INT1 3
#define iv_EXT_INT1 3
#define iv_INT2 4
#define iv_EXT_INT2 4
#define iv_INT3 5
#define iv_EXT_INT3 5
#define iv_INT4 6
#define iv_EXT_INT4 6
#define iv_INT5 7
#define iv_EXT_INT5 7
#define iv_INT6 8
#define iv_EXT_INT6 8
#define iv_INT7 9
#define iv_EXT_INT7 9
#define iv_TIMER2_COMPA 10
#define iv_TIMER2_COMP10
#define iv_TIM2_COMP 10
#define iv_TIMER2_OVF 11
#define iv_TIM2_OVF 11
#define iv_TIMER1_CAPT12
#define iv_TIM1_CAPT 12
#define iv_TIMER1_COMPA 13
#define iv_TIM1_COMPA 13
#define iv_TIMER1_COMPB 14
#define iv_TIM1_COMPB 14
#define iv_TIMER1_OVF 15
#define iv_TIM1_OVF 15
#define iv_TIMER0_COMPA 16
#define iv_TIMER0_COMP16
#define iv_TIM0_COMP 16
#define iv_TIMER0_OVF 17
#define iv_TIM0_OVF 17
#define iv_SPI_STC 18
#define iv_USART0_RX 19
#define iv_USART0_RXC 19
#define iv_USART0_DRE 20
#define iv_USART0_UDRE20
#define iv_USART0_TX 21
#define iv_USART0_TXC 21
#define iv_ADC 22
#define iv_EE_RDY 23
#define iv_EE_READY 23
#define iv_ANA_COMP 24
#define iv_ANALOG_COMP24
#define iv_TIMER1_COMPC 25
#define iv_TIM1_COMPC 25
#define iv_TIMER3_CAPT26
#define iv_TIM3_CAPT 26
#define iv_TIMER3_COMPA 27
#define iv_TIM3_COMPA 27
#define iv_TIMER3_COMPB 28
#define iv_TIM3_COMPB 28
#define iv_TIMER3_COMPC 29
#define iv_TIM3_COMPC 29
#define iv_TIMER3_OVF 30
#define iv_TIM3_OVF 30
#define iv_USART1_RX 31
#define iv_USART1_RXC 31
#define iv_USART1_DRE 32
#define iv_USART1_UDRE32
#define iv_USART1_TX 33
#define iv_USART1_TXC 33
#define iv_TWI 34
#define iv_TWSI 34
#define iv_SPM_RDY 35
#define iv_SPM_READY 35
/* */
#endif 9楼正解 已经修改过,关键字,在中断里边,将收到的数据直接返回,可以,保存到数组,也可以了,谢谢!
代码如下:
void uart1_init(void) //USART1初始化
{
UCSR1B = 0x00; //关闭USART1
UCSR1A = 0x00; //不适使用倍速发送
UCSR1C = (1<<UCSZ11)|(1<<UCSZ10);//数据位为八位
UBRR1L=(fosc/16/(baud+1))%256;//异步正常模式下,UBRR的计算公式
UBRR1H=(fosc/16/(baud+1))/256;
UCSR1B =(1<<RXEN1)|(1<<TXEN1); //接收使能,传送使能
}
//#pragma interrupt_handler uart1_rx_isr:iv_USART1_RX
#pragma interrupt_handler uart1_rx_isr:31
void uart1_rx_isr(void)
{
//uart has received a character in UDR
unsigned char temp;
temp = UDR1;
//putchar1(temp);//直接返回,串口可以接收到,
rx_buffer = temp;//保存到数组,也可以了
RX_BUFFER_SIZE++;
//UCSR0B=0xD8 ;
}
void putchar1(uchar c)//串口1发送字符
{
while (!(UCSR1A&(1<<UDRE1)));//表明发送器一准备就绪
UDR1=c;
}
void main(void)
{
CLI(); //disable all interrupts
//port_init();
PORTD = 0x06;
DDRD= 0x0a;
PORTC = 0xFF;
DDRC= 0xFF;
uart1_init();
RX_BUFFER_SIZE=0;
SEI(); //re-enable interrupts
while(1)
{
//delay_nms(100);
if(rx_buffer==0x55)
{
PORTC=0x0f;
RX_BUFFER_SIZE=0;
}
if(rx_buffer==0xaa)
{
PORTC=0xf0;
RX_BUFFER_SIZE=0;
}
}
页:
[1]