📄 main.#2
字号:
//头文件
/////////////////////////////
#include "c8051F340.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 48000000 //系统时钟
#define Baud_Rate 9600 //串口波特率
////////////////////////////////////////////////////////////////////////////////////////
//位定义
sbit LED_g = P2^4; //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);
///////////////////////////////////////////////////////////////////////////////////////////////////
extern unsigned char Flash_Erase_Block(unsigned int BlockNum);
//主函数
void main ()
{
unsigned int i;
PCA0MD &= ~0x40; // 关看门狗
Init_Device(); // 单片机初始化
Flash_Init(); // FLASH初始化
Usb_Init(); // USB初始化
//EA = 1; // 开中断中断
for(i=0;i<1984;i++) Flash_Erase_Block(i);
while (1)
{
Time_Delay(1);
LED_g=1;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
//单片机初始化
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;
TL1 = -System_Clock/12/2/Baud_Rate;
TH1 = -System_Clock/12/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 = 0x10;
XBR0 = 0x01;
XBR1 = 0x40;
P4MDOUT = 0x00;
P3MDOUT = 0xDF;
P3=0xff;
P4=0xff;
VDM0CN = 0x80; // Enabal VDD monitor
FLSCL = 0x88; // 一次读两个字节
PFE0CN = 0x20; // 指令预取使能
}
//系统使用内部时钟,频率为48MHz,USB工作在全速,时钟为48MHz
void Oscillator_Init()
{
int i = 0;
OSCICN = 0x83;
CLKMUL = 0x80;
for (i = 0; i < 20; i++); // Wait 5us for initialization
CLKMUL |= 0xC0;
while ((CLKMUL & 0x20) == 0);
CLKSEL = 0x03;
}
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 + -