#include<iom128v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
#define mclk 8000000
#pragma interrupt_handler uart rx0:19//定义RX结束中断
//#pragma#pragma interrupt_handler uart_rx1:31
long int rdata0,rdata1,rx_i,flag = 0,flag1=0;
long int wdata[10];
uchar rx_data[6];
long int fre_span = 0,fre_g;
long int fre_m;
void delay(uint ms)
{
uint i,j;
for(i = 0; i < ms;i ++)
{
for(j=0;j <1141;j++)
;
}
}
void uart_init0(uint baud0)
{
UCSR0B = 0X00;
UCSR0A = 0X00; //控制寄存器清零
//UCSR1B = 0X00;
//UCSR1A = 0X00; //控制寄存器清零
UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);8位数据位,其余位默认0,异步模式,奇偶模式:禁止,1位停止位
//UCSR1C = (1<<UCSZ11)|(1<<UCSZ10);
baud0 = mclk / 16/9600-1;//波特率最大为65K , BURR = (Fosc/(16*baud))-1,BURR寄存器值,Fosc时钟,baud波特率
//baud1 = mclk / 16 / baud1-1;
UBRR0L = mclk/16/9600-1;
UBRR0H = (mclk/16/9600-1) >> 8;//设置波特率
UBRR1L = mclk/16/9600-1;
UBRR1H = (mclk/16/9600-1) >> 8;
UCSR0B = (1<<TXEN0) | (1<<RXEN0) | (1<<RXCIE0);//接收,发送使能,接收中断使能
//UCSR1B = (1<<TXEN1) | (1<<RXEN1) | (1<<RXCIE1);
SREG = BIT(7); //全局中断开发
}
void uart_sendB0(long int data0)
{
while(!(UCSROA & (BIT(UDRE0))))//UDRE0=1S说明数据缓冲器为空
;
UDR0 = data0; //UDR数据寄存器
while(!(UCSR0A & (BIT(TXC0))))//缓冲器为空,TXC0置位=1
;
UCSR0A |= BIT(TXC0);写1进行清除,为下次检测准备
}
void uart_rx0()
{
//UCSR0B = ~BIT(RXCIE0);//关闭接收中断
rdata0 = UDR0;
switch(flag)
{
case 0:if(rdata0 == 'Q')
flag = 1;
else
flag = 0;
break;
case 1:Wdata[0] = rdata0; flag = 2;break;
case 2:Wdata[1] = rdata0; flag = 3;break;
case 3:wdata[2] = rdata0; flag = 4;break;
case 4:Wdata[3] = rdata0; flag = 5;break;
case 5:Wdata[4] = rdata0; flag = 6;break;
case 6:Wdata[5] = rdata0; flag = 7;break;
case 7:Wdata[6] = rdata0; flag = 8;break;
case 8:Wdata[7] = rdata0; flag = 9;break;
case 9:if(data0 == 'G')
flag = 10;
else
flag = 0;
break;
default:break;
}
//flag = 1;
//UCSR0B |= BIT(RXCIE0);//启动接收中断
}
void uart_rx1()
{
UCSR1B &= ~BIT(RXCIE1);//关闭接收中断
rdata0 = UDR1;
switch(flag)
{
case 0 :
if(rdata0 == 0x55) flag = 1;
else if (rdata0 == 0x33) flag = 5;
esle if (rdata0 == 0x66) flag =12;
else flag = 0;
break;
case 1:Wdata[0] = rdata0; flag = 2;break;
case 2:Wdata[1] = rdata0; flag = 3;break;
case 3:if(rdata0 == 0xf0) break;
else flag = 0;break;
case 5:Wdata[0] = rdata0; flag = 6;break;
case 6:Wdata[1] = rdata0; flag = 7;break;
case 7:Wdata[2] = rdata0; flag = 8;break;
case 8:Wdata[3] = rdata0; flag = 9;break;
case 9:Wdata[4] = rdata0; flag = 10;break;
case 10:
if(rdata0 == 0xff) break;
else flag = 0;
break;
case 12:rx_data[0] = rdata0;flag = 13;break;
}
}
网友评论