我这个程序怎么进不了中断,求解?
#include<macros.h>#include<avr/interrupt.h>//#include<iom64.h>/*端口初始化*/voidport_init(...
#include <macros.h>
#include <avr/interrupt.h>
//#include <iom64.h>
/*端口初始化*/
void port_init(void) ;
void uart_init(void);
char rxd_data;
void port_init(void)
{
DDRE|=(1<<DDE0); //配置PE0口为输出
PORTE|=(1<<PE0); //PE0口的初始值为"1"
}
/*串口初始化*/
void uart_init(void)
{
UCSR0A=0x00; //异步正常模式
// SREG = 0x80;
UCSR0B=0x98; //允许发送接受
//UCSR0B = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
UCSR0C = 0x06; //8位数据
UBRR0H=0x00;
UBRR0L=51; //波特率位9600
}
/*串口中断服务程序*/
SIGNAL(SIG_UART0_RECV)
{
rxd_data=UDR0;
UDR0=rxd_data;
}
int main(void)
{
port_init();
uart_init();
{
UDR0=0x55;
}
while(1)
{
}
} 展开
#include <avr/interrupt.h>
//#include <iom64.h>
/*端口初始化*/
void port_init(void) ;
void uart_init(void);
char rxd_data;
void port_init(void)
{
DDRE|=(1<<DDE0); //配置PE0口为输出
PORTE|=(1<<PE0); //PE0口的初始值为"1"
}
/*串口初始化*/
void uart_init(void)
{
UCSR0A=0x00; //异步正常模式
// SREG = 0x80;
UCSR0B=0x98; //允许发送接受
//UCSR0B = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
UCSR0C = 0x06; //8位数据
UBRR0H=0x00;
UBRR0L=51; //波特率位9600
}
/*串口中断服务程序*/
SIGNAL(SIG_UART0_RECV)
{
rxd_data=UDR0;
UDR0=rxd_data;
}
int main(void)
{
port_init();
uart_init();
{
UDR0=0x55;
}
while(1)
{
}
} 展开
2个回答
展开全部
你尝试着在定时器0初始化里面加一句OCR0 = 0x00;试试,另外,在溢出中断函数里面还必须得重装一下计数初值,就是那句TCNT0=0x55;还有,没必要在中断函数里再写一次DDRC=0XFF;
给你说下,在ICC里面可以自己生成初始代码,自己设置一下就可以了,没必要拿着pdf去设置寄存器。
给你说下,在ICC里面可以自己生成初始代码,自己设置一下就可以了,没必要拿着pdf去设置寄存器。
追问
我用的是串口接受中断,没用定时器
追答
......我给你一个标准的吧
这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样
#include
#include
#define INBUF_LEN 4 //数据长度
unsigned char inbuf1[INBUF_LEN];
unsigned char checksum,count3;
bit read_flag=0;
void init_serialcomm(void)
{
SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload
PCON |= 0x80; //SMOD=1;
TH1 = 0xF4; //Baud:4800 fosc="11".0592MHz
IE |= 0x90; //Enable Serial Interrupt
TR1 = 1; // timer 1 run
// TI="1";
}
//向串口发送一个字符
void send_char_com(unsigned char ch)
{
SBUF="ch";
while(TI==0);
TI=0;
}
//向串口发送一个字符串,strlen为该字符串长度
void send_string_com(unsigned char *str,unsigned int strlen)
{
unsigned int k=0;
do
{
send_char_com(*(str + k));
k++;
} while(k 127)
{
count3=0;
inbuf1[count3]=ch;
checksum= ch-128;
}
else
{
count3++;
inbuf1[count3]=ch;
checksum ^= ch;
if( (count3==(INBUF_LEN-1)) && (!checksum) )
{
read_flag=1; //如果串口接收的数据达到INBUF_LEN个,且校验没错,
//就置位取数标志
}
}
}
}
main()
{
init_serialcomm(); //初始化串口
while(1)
{
if(read_flag) //如果取数标志已置位,就将读到的数从串口发出
{
read_flag=0; //取数标志清0
send_string_com(inbuf1,INBUF_LEN);
}
}
2011-07-14
展开全部
这游戏删了重新下一个吧!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询