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

📄 usb232.c

📁 usb232withAT90s2313 trubo C
💻 C
字号:
// ICC-AVR application builder : 02/01/15 22:28:59
// Target : 2313
// Crystal: 11.059Mhz

#include <io2313.h>
#include <macros.h>
#include <stdio.h>

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

//UART0 initialisation
// desired baud rate:115200
// actual baud rate:115198 (0.0%)
void uart0_init(void)
{
 UCR  = 0x00; //disable while setting baud rate
 UBRR = 0x05; //set baud rate
 UCR  = 0x98; //enable
}
#define BUFFER_SIZE 32
char RX_Buff[BUFFER_SIZE];
char next_in = 0;
char next_out = 0;
char cr_flag = 0;

#pragma interrupt_handler uart0_rx_isr:8
void uart0_rx_isr(void)
{
//uart has received a character in UDR
char t;
	t = UDR;
	if(t == 0x0d) cr_flag = 1;
	RX_Buff[next_in]=UDR;
	t=next_in;
	next_in=(next_in+1) % BUFFER_SIZE;
	if(next_in==next_out) next_in=t;  	// Buffer full !!
}

#define bkbhit (next_in!=next_out)

char getc() {
   char c;

   while(!bkbhit) ;
   c=RX_Buff[next_out];
   next_out=(next_out+1) % BUFFER_SIZE;
   return(c);
}



#pragma interrupt_handler int0_isr:2
void int0_isr(void)
{
 //external interupt on INT0
}

#pragma interrupt_handler int1_isr:3
void int1_isr(void)
{
 //external interupt on INT1
}

//call this routine to initialise all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 port_init();
 uart0_init();

 MCUCR = 0x0A;
 GIMSK = 0xC0;
 TIMSK = 0x00;
 SEI(); //re-enable interrupts
 //all peripherals are now initialised
}


//    Display Long Int
//    0 ~ 65535
//
void  itoa(int data, char digit6[6])
{
char   i;

   digit6[0] = data/10000;
   data = data - (int)digit6[0]*10000;
   digit6[1] = data/1000;
   data = data - (int)digit6[1]*1000;
   digit6[2] = data/100;
   data = data - (int)digit6[2]*100;
   digit6[3] = data/10;
   data = data - (int)digit6[3]*10;
   digit6[4] = data;

   for(i=0;i<5;i++) {
      digit6[i] = digit6[i] + '0';
   }
}



void putstr(int data ) {
     char buf_string[6];
     int   i;

     itoa( data, buf_string );

     for(i=2;i<5;i++) {
         putchar(buf_string[i]);
     }
}



void   main()
{
char   cmd[32],token[8];
char	   i,j;

 init_devices();
 
 while(1) {
 	if(cr_flag == 1) {
		for(i=0;i<BUFFER_SIZE;i++) {
 			cmd[i] = getc();
			if(cmd[i] == 0x0d) break;
		}
		
		for(i=0;i<BUFFER_SIZE;i++) {
			if(cmd[i] > ' ') break;	 // Skip LF etc
		}
		
		switch(cmd[i]) {
		case 'I':	   // Input Port
		case 'i':
			 DDRB = 0x00;
			 j = PINB;
			 putstr((int)j);
		break;
		
		case 'O':	   // Output Port
		case 'o':
			 j = atoi(&cmd[i+1]);
			 PORTB = j;
			 DDRB = 0Xff;
		break;
		
		case 'S':	   // Set Port Bit
		case 's':
			 j = cmd[i+1] - '0';
			 PORTB |= (1<<j);
			 DDRB |= (1<<j);
		break;
		
		case 'C':	   // Clear Port Bit
		case 'c':
			 j = cmd[i+1] - '0';
			 PORTB &= ~(1<<j);
			 DDRB |= (1<<j);
		break;
		
		case 'T':	   // Test Port Bit
		case 't':
			j = cmd[i+1] - '0';
			DDRB &= ~(1<<j);
			if(!(PINB & (1<<j))) {
			 	putchar('0');
			}
			else
			{
			 	putchar('1');
			}
		break;
		
		case 'F':	   // Flip Port Bit
		case 'f':
			 j = cmd[i+1] - '0';
			 if(!(PORTB & (1<<j))) {
			 	PORTB |= (1<<j);
			 }
			 else
			 {
			 	PORTB &= ~(1<<j);
			 }
			 DDRB |= (1<<j);
		break;
		
		}
	cr_flag = 0;
	}
 }
}

⌨️ 快捷键说明

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