📄 usb232.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 + -