搜索
bottom↓
回复: 10

求助中断错误

[复制链接]

出0入0汤圆

发表于 2013-8-3 09:31:14 | 显示全部楼层 |阅读模式
// USART1 发送***************************************************************
SIGNAL(SIG_UART1_TRANS)                                        // USART1 发送中断
{
        if(tx_counter1)
        {
                tx_counter1-=1;                                //发送字节数减一
                UDR1=tx_buffer1[tx_rd_index1];                        //缓存区数据载入发送寄存器
                if((++tx_rd_index1)==TX_BUFFER_SIZE1)
                        tx_rd_index1=0;                                //如果数据发送完读指示指向缓存区头
        }
}

这个是网上下载来的,编译时,一直提示这段程序有错误,请问谁知道是怎么回事吗?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-8-3 09:46:53 | 显示全部楼层
KEIL下测试没有语法错误,不知楼主的编译器是如何提示的?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-8-3 10:13:16 | 显示全部楼层

// USART1 发送***************************************************************
SIGNAL(SIG_UART1_TRANS)                                        // USART1 发送中断

关键字对么?

出0入0汤圆

发表于 2013-8-3 12:35:34 | 显示全部楼层
单片机型号?编译环境?什么错误提示?
标题不合格!小心被封锁ID哦

出0入0汤圆

 楼主| 发表于 2013-8-3 13:29:57 | 显示全部楼层
哦,是iccavr编译器,M64单片机,我是要用串口中断来接收数据的,可是怎么也收不到

出0入0汤圆

发表于 2013-8-3 15:21:06 | 显示全部楼层
yanghuai1023 发表于 2013-8-3 13:29
哦,是iccavr编译器,M64单片机,我是要用串口中断来接收数据的,可是怎么也收不到 ...

串口0应该是正常的吧?估计是兼容模式下的问题,见手册说明

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-8-3 18:58:52 | 显示全部楼层
串口0我已经接了其他东西,已经的串口是接到串口1的


// USART1 发送***************************************************************
SIGNAL(SIG_UART1_TRANS)                                        // USART1 发送中断
关键字不确定怎么写,就是报这里的错误,可能是关键字也不对的

出0入0汤圆

发表于 2013-8-3 21:34:37 来自手机 | 显示全部楼层
关键字错了,看相关头文件里面的定义。

出0入0汤圆

发表于 2013-8-3 21:46:03 | 显示全部楼层
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_COMP  10
#define iv_TIM2_COMP    10
#define iv_TIMER2_OVF   11
#define iv_TIM2_OVF     11
#define iv_TIMER1_CAPT  12
#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_COMP  16
#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_UDRE  20
#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_COMP  24
#define iv_TIMER1_COMPC 25
#define iv_TIM1_COMPC   25
#define iv_TIMER3_CAPT  26
#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_UDRE  32
#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

出0入0汤圆

发表于 2013-8-3 23:01:19 来自手机 | 显示全部楼层
9楼正解

出0入0汤圆

 楼主| 发表于 2013-8-4 09:05:50 | 显示全部楼层
已经修改过,关键字,在中断里边,将收到的数据直接返回,可以,保存到数组,也可以了,谢谢!
代码如下:


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[RX_BUFFER_SIZE] = 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[0]==0x55)
        {
         PORTC=0x0f;
         RX_BUFFER_SIZE=0;
        }   
        if(rx_buffer[0]==0xaa)
        {
         PORTC=0xf0;
         RX_BUFFER_SIZE=0;
        }      
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 23:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表