📄 main.c
字号:
/*
USB TO RS-232 program
Program: Mega8 2458 bytes (30.0% Full)
Data: 184 bytes (18.0% Full)
USBASP硬件电路
超简单AVRUSB软件模似串口(COMx)数据发送、接收。
VCC
|
|
R3
|
|
USB D- ----+-------- R1 --+- PB0 /PD3
USB D+ ----|-----+-- R2 ---- PB1+PD2(INT0)/PD2(INT0)
| |
| |
ZD1 ZD2
| |
| |
+--+--+
|
-----
---
-
5V for Red/Green 3.6V for Red
USB 5V ---+----------> VCC USB 5V ---+---|>|--|>|--> VCC
| |
C1 C1
| |
GND ------+ GND ------+
+--------------> XTAL1
|
| XTAL 12MHz
|
+---|[]|---+---> XTAL2
| |
C2 C3
| |
+----------+-- GND
XTAL: 12.000 MHz
ZD1,ZD2 3V3
C1 10uF
C2,C3 12-22p
R1,R2 68/75
R3 1K5/2K2
*/
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/wdt.h>
#include <util/delay.h>
#include "usbcdc.h"
//static uint8_t target_signature[3];
static uint8_t target_pagesize;
#define pgmmode (target_pagesize)
static uint8_t extmode = 0;
#define getc usbcdc_getc
#define putc usbcdc_putc
#define poll usbcdc_poll
#define RED_OFF() PORTC |= (1<<PC1); // 灭灯#define RED_ON() PORTC &=~(1<<PC1); // 亮灯#define GREEN_TOG() PORTC ^= (1<<PC0);#define GREEN_OFF() PORTC |= (1<<PC0); // 灭灯#define GREEN_ON() PORTC &=~(1<<PC0); // 亮灯
/*************************************
int main(void)
{
uint8_t ch;
wdt_enable(WDTO_1S);
usbcdc_init();
PORTC= (1<<PC1)|(1<<PC0);
DDRC = (1<<PC1)|(1<<PC0);
RED_ON();
sei();
for(;;)
{
wdt_reset();
poll();
GREEN_TOG();
ch=getc();//由USB接收到模似串口数据
..........//数据处理程序
putc(ch); //模似串口数据发送到USB
}
return 0;
}
**************************************/
int main(void)
{
uint8_t ch;
wdt_enable(WDTO_1S);
usbcdc_init();
PORTC= (1<<PC1)|(1<<PC0);
DDRC = (1<<PC1)|(1<<PC0);
RED_ON();
GREEN_OFF();
sei();
for(;;)
{
wdt_reset();
poll();
GREEN_TOG();
//AVRprog V1.4 超简单的应用范例
//AVRUSB模似串口一定要在CM1-CM4内
ch = getc(); //由USB接收到模似串口数据
if (ch == 'S') // get Software
{
putc('A'); // AVR ISP
putc('V');
putc('R');
putc(' ');
putc('9');
putc('1');
putc('0');
}
else if (ch == 'p') // get Programmer Type
{
putc('S'); // Serial
}
else if (ch == 'V' || ch == 'v') // get Version 'V':sw 'v':hw
{
extmode = 0;
pgmmode = 0;
putc('2');
putc('4');
}
else if (ch == 'a') // Report autoincrement address
{
extmode = 0;
pgmmode = 0;
putc('Y'); // Yes!
}
else if (ch == 'A') // Set Write Address
{
getc(); //addr_hi=getc();
getc(); //addr_lo=getc();
putc('\r'); // ACK
}
else if (ch == 't') // get supported Device Types
{
putc(0x20); // dummy
putc(0);
}
else if (ch == 'T') // set Device Types: ignore but ACK
{
getc();
putc('\r');
}
else if (ch == 'x' || ch == 'y') // Set/Clear LED
{
putc('\r'); // ACK
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -