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

📄 main.c

📁 采用atmel公司的mega8芯片设计的USB cdc类
💻 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 + -