kuangcheng100 发表于 2014-6-9 14:28
额,不对,贴的代码还是有开全局中断的,只是用的是 sei();
而不是用SREG |=0x80;而已。。。。。。。。。 ...
用这个程序试试,可以进中断的
//ICC-AVR application builder
// Target : M128
// Crystal: 11059200
#include <iom128v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
#define N 10
void uart0_init(void);
void uart1_init(void);
void uart0_send(uchar c);
void uart1_send(uchar c);
//void eep_to_pc(uchar eep_add);
uint sum_aver_adc;
uint sum_adc[10];
uchar k;
uint adc_rst;
uchar flag_adc_end;
/******************端口初始化***************************/
void port_init(void)
{ //端口设置
PORTA = 0x00;//LCD口,总线低八位地址
DDRA = 0x00;
PORTB = 0x00;//SPI接口
DDRB = 0xff;
PORTC = 0x00; //总线高八位地址
DDRC = 0xff;
PORTC= 0xFF; //设为输出口
DDRC =0xFF;
PORTD = 0x00;//USART1接口
DDRD = 0x00;
PORTE = 0x0f;//键盘口
DDRE = 0xf0;
PORTF = 0x00;//LED口
DDRF = 0xff;
PORTG = 0xff;
DDRG = 0xff;
}
/***************串口0初始化********************/
void uart0_init(void)
{
UCSR0B = 0x00; //disable while setting baud rate
UCSR0A = 0x00;
UCSR0C = 0x06;
//UBRR0L = 0x47; //baud rate=115200
UBRR0L = 0x33; //baud rate=9600
UBRR0H = 0x00; //
UCSR0B = 0x98;
}
/********************************************/
/********************************************/
/**************发送采用查询方式**************/
void uart0_send(uchar c)
{
while( !(UCSR0A & (1<<UDRE0)) );
UDR0=c;
}
/********************************************/
void main(void )
{
uint run_cnt=0;
uchar i;
CLI();
port_init();
uart0_init();
SEI();
flag_adc_end=0;
for(i=0;i<8;i++)
{
uart0_send(0x55);
}
SEI();
while(1)
{
run_cnt++;
if(run_cnt>=60000)
{
run_cnt=0;
PORTG^=BIT(4);
}
}
}
/********************************************/
/********************************************/
/**************接收采用中断******************/
#pragma interrupt_handler uart0_rx_isr:19
void uart0_rx_isr(void)
{
uchar temp=0;
temp=UDR0;
uart0_send(temp+1);
PORTC^=BIT(7);
}
|