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

📄 main.c

📁 单片机读写U盘方案开发指南
💻 C
字号:
#include <iom16v.h>
#include "D:\ICC_H\CmmICC.H"

#define DISP_PORT PORTB
#define DISP_DDR  DDRB
char a1[]={0X3A,0X71,0X00};                     //检测U盘
char a2[]={0X3A,0X64,0X06,0X5C,0X31,0X2E,0X54,0X58,0X54};      // 打开1.TXT
char a3[]={0X3A,0X7A,0X04,0X00,0X00,0X00,0XCF};                       //字节定位
char a4[]={0X3A,0X7C,0X09,0X5C,0X31,0X32,0X33,0X34,0X35,0X36,0X37,0X38}; //写入数据
char a5[]={0X3A,0X67,0X00};                     //关闭文件


void delayms(unsigned int i)
{
  unsigned int j,k;
  for (j =0; j < i; j++)
  {
    for(k = 0; k < 100; k++)
	  ;
  }

}
void delays(unsigned int i)
{
  unsigned int j,k,d;
  for(j=0;j<i;j++)
  {
    for(k=0;k<1000;k++)
	  {
	    for(d=0;d<100;d++)
		;
	  }	
  }

}



void uart0_init(void)
{
   
    UCSRB = 0x00;   //disable while setting baud rate
    UCSRA = 0x00;
    UCSRC = 0x86;
    UBRRL = 47;     //set baud rate lo,波特率为9.6K
    UBRRH = 0x00;   //set baud rate hi
    UCSRB = 0x98;   //接收中断允许,接收缓冲自动清空,接收允许
    
   
   
}



 #pragma interrupt_handler uart0_rx_isr:12 //中断程序  
    void uart0_rx_isr(void)
    { 
	  
	  DISP_PORT = UDR;
    }




	
void mcu_init(void)
{
    CLI();           //全局中断标志禁止
    uart0_init();
    MCUCR = 0x00;
    GICR  = 0x00;
    TIMSK = 0x00;   //timer interrupt sources 
    SEI();          //re-enable interrupts 全局中断标志使能 
}


//检测U盘
void CMD_DiskReady()
{
  char i=0;
  for(i=0;i<3;i++)
  {
    UDR=a1[i];
	delayms(10);
  }
    delays(1);
}

//打开文件      1.TXT
void CMD_FileOpen()
{
  char j=0;
  for(j=0;j<9;j++)
  {
     UDR=a2[j];
	 delayms(10);
  }
     delays(1);
}

//字节定位  移动文件指针到原始文件中数据的末尾
void CMD_ByteLocate()
{
  char m=0;
  for(m=0;m<7;m++)
  {
    UDR=a3[m];
	delayms(10);  
  }
    delays(1);
}


//写入字节     
void CMD_ByteWrite()
{
  char d=0;
  for(d=0;d<12;d++)
  {
     UDR=a4[d];
	 delayms(10);
  }
     delays(1);
}


//关闭文件       1.TXT
void CMD_FileClose()
{
   char k=0;
   for(k=0;k<3;k++)
  {
     UDR=a5[k];
	 delayms(10);
  }
     delays(1);
}


void main()
{
    DDRB=0xff;
	PORTB=0x0f;
	mcu_init();
	
	CMD_DiskReady();
	delays(40);
	
	CMD_FileOpen();
	delays(40);
	
	CMD_ByteLocate();	
	delays(40);
	
	CMD_ByteWrite();
	delays(40);
		
	CMD_FileClose();
		
	while(!(UCSRA&0x40));    //等待发送结束
    UCSRA|=0x40;            //清除发送结束标志位
	delays(40);
	while(1)	
	{
	 //主程序
	 delayms(50);	
	}
}

⌨️ 快捷键说明

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