⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 9600.c

📁 ATMEGA64双串口
💻 C
字号:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

#include "delay.h"

#define uchar	unsigned char
#define uint	unsigned int
#define ulong	unsigned long
#define	CHKBIT(x,y) (x&(1<<y))       //check bit y in byte x
volatile uchar rxd;
volatile ulong i,l;
volatile uchar flag;
volatile uchar k1,k2,k3;
volatile uchar t[400]={0};
volatile uint d;

void send0(uchar c)       
{	
//	UCSR0B = 0x48;					//关串口接受
	while( !(UCSR0A & (1<<UDRE0)) );	//等待置位
	UDR0=c;							//c数放入UDR缓冲区发送
}

/*
SIGNAL(SIG_UART0_RECV)
{
    rxd = UDR0;
	send0(rxd);

}*/
/*
SIGNAL(SIG_UART1_RECV)
{
    rxd = UDR1;
	send0(rxd);
}*/

void port_init(void)
{
	PORTD = 0xFF;
	DDRD  = 0x00;
}

//定时T1初始化
void timer1_init(void)
{
	TCCR1B = 0x00;	//停止定时器
	TIMSK|= 0x04;	//中断允许
	TCNT1H = 0xfd;
	TCNT1L = 0x0f;	//初始值
	TCCR1A = 0x00;
//	TCCR1B = 0x02;	//启动定时器
}


SIGNAL(SIG_OVERFLOW1)
{
	TCNT1L = 0x0f;	//初始值
    TCNT1H = 0xfd;
	i++;
}

void USART_Init(void) 
{ 
	cli(); 			//禁止所有中断
//	MCUCR  = 0x00;
//	MCUCSR = 0x80;	//禁止JTAG
//	GICR   = 0x00;
//  DDRE|=(1<<TXD0);  
 // DDRE&=~(1<<RXD0);  

  UCSR0B|=(1<<TXEN0);//(1<<RXEN0)||(1<<RXCIE0);//允许接受,允许发送,开接受中断   
  UCSR0C|=(1<<UCSZ01)|(1<<UCSZ00);//8位数据,1位停止位 
  UBRR0L=11; //baund 8m 51-9600  12-384000   7,3728m 11-384000 
  UBRR0H=0; 
   
 // DDRD|=(1<<TXD1);  
  //DDRD&=~(1<<RXD1);  
/*   
  UCSR1B|=(1<<RXEN1)|(1<<RXCIE1);;//|(1<<TXEN1);   //|(1<<RXCIE1);//允许接受,允许发送,开接受中断   
  UCSR1C|=(1<<UCSZ11)|(1<<UCSZ10);//8位数据,1位停止位 
  UCSR1A = 0x02;	
 // UBRR1L=0x57; //7,3728m  10400bps
  UBRR1L=0x5f;   //7,3728m  9600bps
  UBRR1H=0; 
  */ 
  sei();  //开总中断 
} 




int main()
{ uchar u;
	port_init();
	USART_Init(); 
	timer1_init();
	for(k1=0;k1<200;k1++)
	   {
	   for(k2=0;k2<200;k2++)
	   ;
	   }
	   d=0;
		while(CHKBIT(PIND,2));
		u=CHKBIT(PIND,2);
		TCCR1B = 0x01;
		flag=1;
	while(1)
	{

/*
if(CHKBIT(PIND,2))
{
TCCR1B=0;
send0(i>>24);
send0(i>>16);
send0(i>>8);
send0(i);
send0(TCNT1H);
send0(TCNT1L);
}*/
while(!(u^CHKBIT(PIND,2)));

	u=CHKBIT(PIND,2);
   
	    t[d]=i>>24;
		  d++;
		  t[d]=i>>16;
		  d++;
	    t[d]=i>>8;
		  d++;
		  t[d]=i;
		  d++;
	  	i=0; 


	  if(d>399)
	  {
	  TCCR1B=0;
	  flag=1;
	  
	  for(d=0;d<400;d++)
	    send0(t[d]);
		d=0;
		while(1);
	  }

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -