?? main.#2
字號:
//頭文件
/////////////////////////////
#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 //系統(tǒng)時鐘
#define Baud_Rate 9600 //串口波特率
////////////////////////////////////////////////////////////////////////////////////////
//位定義
sbit LED = P0^0; //LED控制腳
////////////////////////////////////////////////////////////////////////////////////////
//函數(shù)申明
void Init_Device(void); //單片機初始化
void Reset_Sources_Init(void); //單片機復位源初始化
void Timer_Init(void); //定時器初始化
void UART_Init(void); //串口初始化
void ADC_Init(void); //AD轉(zhuǎn)換器初始化
void Voltage_Reference_Init(void); //電壓基準愿初始化
void Port_IO_Init(void); //IO口初始化
void Oscillator_Init(void); //系統(tǒng)時鐘初始化
void Interrupts_Init(void); //中斷源初始化
void Time_Delay(unsigned int time); //延時函數(shù)定義,時間為time毫秒
//////////////////////////////////////////////////////////////////////
//外部函數(shù)調(diào)用
extern void Flash_Init(void);
extern void Flash_Format16(void);
extern void Test_Flash(void);
extern void Flash_Verify(void);
///////////////////////////////////////////////////////////////////////////////////////////////////
//主函數(shù)
void main ()
{
unsigned int i;
PCA0MD &= ~0x40; // 關(guān)看門狗
Init_Device(); // 單片機初始化
Flash_Init(); // FLASH初始化
Usb_Init(); // USB初始化
EA = 1; // 開中斷中斷
while (1)
{
Time_Delay(1000);
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使用系統(tǒng)時鐘,為16位定時器方式;定時器1使用系統(tǒng)時鐘的12分頻,8位重裝載方式,波特率發(fā)生器
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數(shù)據(jù)位+1停止位,接收容許,并且只有停止位為1時才觸發(fā)接收中斷
void UART_Init()
{
SCON0 = 0x30;
TI0=1; //為printf函數(shù)做準備
}
void ADC_Init()
{
}
void Voltage_Reference_Init()
{
}
void Port_IO_Init()
{
P0MDOUT = 0x11;
XBR0 = 0x01;
XBR1 = 0x40;
P2MDOUT = 0xBF;
}
//系統(tǒng)使用內(nèi)部時鐘,頻率為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 + -