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

📄 main.#3

📁 源码 : KIEL C 单片机 : C8051F320 功能 : U盘 (64M) 关键字 : C8051F320,U盘,NANDFLASH,FAT,SCH 描述 : 源码完全可运行
💻 #3
字号:

//头文件
/////////////////////////////
#include "c8051F320.h"
#include "stdio.h"
#include "intrins.h"
#include "Usb_FunDec.h"
#include "Usb_Parameter.h"
#include "Usb_Register.h"
#include "Usb_Request.h"
///////////////////////////////////////////////////////////////////////////////////////
// 16-bit SFR declarations
sfr16 DP       = 0x82;                 	// data pointer
sfr16 TMR2RL   = 0xca;                 	// Timer2 reload
sfr16 TMR2     = 0xcc;                 	// Timer2 counter
sfr16 TMR3     = 0x94;                 	// Timer3 counter
sfr16 TMR3RL   = 0x92;                 	// Timer3 reload
sfr16 PCA0CP1  = 0xe9;                 	// PCA0 Module 1 Capture/Compare
sfr16 PCA0CP2  = 0xeb;                 	// PCA0 Module 2 Capture/Compare
sfr16 PCA0CP3  = 0xed;                 	// PCA0 Module 3 Capture/Compare
sfr16 PCA0CP4  = 0xfd;                 	// PCA0 Module 4 Capture/Compare
sfr16 PCA0CP0  = 0xfb;                 	// PCA0 Module 0 Capture/Compare
sfr16 PCA0     = 0xf9;                 	// PCA0 counter
////////////////////////////////////////////////////////////////////////////////////////
//宏定义
#define System_Clock 12000000		   	//系统时钟
#define Baud_Rate    9600			   	//串口波特率
////////////////////////////////////////////////////////////////////////////////////////
//位定义
sbit    LED			= P0^0;				//LED控制脚
////////////////////////////////////////////////////////////////////////////////////////
//函数申明
void	Init_Device(void);				//单片机初始化
void    Reset_Sources_Init(void);		//单片机复位源初始化
void    Timer_Init(void);				//定时器初始化
void    UART_Init(void);				//串口初始化
void    ADC_Init(void);					//AD转换器初始化
void    Voltage_Reference_Init(void);	//电压基准愿初始化
void    Port_IO_Init(void);				//IO口初始化
void    Oscillator_Init(void);			//系统时钟初始化
void    Interrupts_Init(void);			//中断源初始化
void 	Time_Delay(unsigned int time);	//延时函数定义,时间为time毫秒
//////////////////////////////////////////////////////////////////////
//外部函数调用
extern 	void Flash_Init(void);
extern	void Flash_Format16(void);
extern	void Test_Flash(void);
extern  void Flash_Verify(void);
///////////////////////////////////////////////////////////////////////////////////////////////////

//主函数
void main ()
{
	unsigned int i;
   	PCA0MD &= ~0x40;            // 关看门狗
	Init_Device();				// 单片机初始化
	Flash_Init();				// FLASH初始化
	Usb_Init();					// USB初始化
	EA = 1;  					// 开中断中断

	while (1)
   	{
		LED=0;
   	}
}



////////////////////////////////////////////////////////////////////////////////////////////////////
//单片机初始化
void Init_Device(void)
{
    Reset_Sources_Init();
    Timer_Init();
    UART_Init();
    ADC_Init();
    Voltage_Reference_Init();
    Port_IO_Init();
    Oscillator_Init();
    Interrupts_Init();
}

void Reset_Sources_Init()
{
}

//定时器0使用系统时钟,为16位定时器方式;定时器1使用系统时钟的12分频,8位重装载方式,波特率发生器
void Timer_Init()
{
    TCON      = 0x40;
    TMOD      = 0x20;
    CKCON     = 0x01;
	TL1		= -System_Clock/4/2/Baud_Rate;
    TH1     = -System_Clock/4/2/Baud_Rate;
	TR0=0;
	TR1=1;
}

//8位方式,1起始位+8数据位+1停止位,接收容许,并且只有停止位为1时才触发接收中断
void UART_Init()
{
    SCON0     = 0x30;
	TI0=1;				//为printf函数做准备
}

void ADC_Init()
{
}

void Voltage_Reference_Init()
{
}

void Port_IO_Init()
{
    P0MDOUT   = 0x11;
    XBR0      = 0x01;
    XBR1      = 0x40;
	P2MDOUT   = 0xBF;
}

//系统使用内部时钟,频率为12MHz,USB工作在全速,时钟为48MHz
void Oscillator_Init()
{
    int i = 0;
    CLKMUL    = 0x80;
    for (i = 0; i < 20; i++);    // Wait 5us for initialization
    CLKMUL    |= 0xC0;
    while ((CLKMUL & 0x20) == 0);
    OSCICN    = 0x83;

}

void Interrupts_Init()
{
	EIE1 |= 0x02;                   // 允许USB中断
}
//////////////////////////////////////////////////////////////////////////////////////////////////
void Time_Delay(unsigned int time)	
{
	unsigned int i=0,j=0;
	for(i=0;i<time;i++)
	{
		for(j=0;j<1200;j++)
		{_nop_();}	
	}
}

⌨️ 快捷键说明

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