AVR_128_spi串口通信程序.docVIP

  • 13
  • 0
  • 约5.19千字
  • 约 6页
  • 2016-12-29 发布于重庆
  • 举报
AVR串口通信程序RS232头文件 下面是ATMEGA128的头文件 /*串口0的初始化*/ void Uart0_init(void) { UCSR0B = 0x00; //禁止发送和接收 UCSR0A = 0x02; //倍速异步模式USX0=1 UBRR0L=(Crystal/8/Baud0-1)%256; //根据数据手册的计算法 UBRR0H=(Crystal/8/Baud0-1)/256; //如果不是倍速则(Crystal/16/Baud0-1) UCSR0B=(1RXEN0)|(1TXEN0)|(1RXCIE0);//发送接收使能,接收中断使能 UCSR0C=(1UCSZ01)|(1UCSZ00);//8位数据,UCSZ02,01,00共同确定 DDRE|=BIT(1); //设置发送口为输出 } /*串口0单字符发送,查询方式*/ void Uart0_sendbyte(uchar i) { while (!(UCSR0A (1UDRE0))); /* 等待发送缓冲器为空*/ UDR0 = i; /* 要发送的数据*/ } /*串口0字符串发送*/ void Uart0_sendstring(uchar *p) { while(*p) { Uart0_sendbyte(*p); p++; } } /*串口0接收中断*/ #pragma interrupt_handler Uart0_rx:19 void Uart0_rx(void) { UCSR0B=~BIT(RXCIE0);//先关接收中断 R_dat0=UDR0; //用变量接收串口1收到的数据 Flag0=1; UCSR0B|=BIT(RXCIE0);//重开接收中断 } /***************************这是串口1******************************/ /*串口1的初始化*/ void Uart1_init(void) { UCSR1B = 0x00; //禁止发送和接收 UCSR1A = 0x02; //倍速异步模式USX0=1 UBRR1L=(Crystal/8/Baud1-1)%256; //根据数据手册的计算法 UBRR1H=(Crystal/8/Baud1-1)/256; //如果不是倍速则(Crystal/16/Baud1-1) UCSR1B=(1RXEN1)|(1TXEN1)|(1RXCIE1);//发送接收使能,接收中断使能 UCSR1C=(1UCSZ11)|(1UCSZ10);//8位数据,UCSZ12,11,10共同确定 DDRD|=BIT(3); //设置发送口为输出 } /*串口0单字符发送,查询方式*/ void Uart1_sendbyte(uchar i) { while (!(UCSR1A (1UDRE1))); /* 等待发送缓冲器为空*/ UDR1 = i; /* 要发送的数据*/ } /*串口1字符串发送*/ void Uart1_sendstring(uchar *p) { while(*p) { Uart1_sendbyte(*p); p++; } } /*串口1接收中断*/ #pragma interrupt_handler Uart1_rx:31 void Uart1_rx(void) { UCSR1B=~BIT(RXCIE1);//先关接收中断 R_dat1=UDR1; //用变量接收串口1收到的数据 Flag1=1; UCSR1B|=BIT(RXCIE1);//重开接收中断 } 以下是主机部份 #include iom128v.h #include macros.h #define uchar unsigned char #define uint unsigned int #include delay.h #include lcd.h void port_init(void); //SPI initialize // clock rate: 1843199hz void spi_init(void) { SPCR = 0x74; //setup SPI SPSR = 0x00; //setup SPI DDRB=0X07; PORTB|=0X08; } //call this routine to initialize all per

文档评论(0)

1亿VIP精品文档

相关文档