?? main.#2
字號:
#include <c8051F020.h>
#include "MAIN.H"
#include "host_811.H"
#include <stdio.h>
//#include "ufi.h"
//#include "file.h"
//#include "api.h"
#define Clr_WDT() WDTCN=0xa5
#define SYSCLK 12000000 // SYSCLK frequency in Hz
#define BAUDRATE 9600 // Baud rate of UART in bps
extern Control bdata USB_Control;
BYTE UsbEvent;
//-----------------------------------------------------------------------------
// 16-bit SFR Definitions for 'F02x
//-----------------------------------------------------------------------------
sfr16 DP = 0x82; // data pointer
sfr16 TMR3RL = 0x92; // Timer3 reload value
sfr16 TMR3 = 0x94; // Timer3 counter
sfr16 ADC0 = 0xbe; // ADC0 data
sfr16 ADC0GT = 0xc4; // ADC0 greater than window
sfr16 ADC0LT = 0xc6; // ADC0 less than window
sfr16 RCAP2 = 0xca; // Timer2 capture/reload
sfr16 T2 = 0xcc; // Timer2
sfr16 RCAP4 = 0xe4; // Timer4 capture/reload
sfr16 T4 = 0xf4; // Timer4
sfr16 DAC0 = 0xd2; // DAC0 data
sfr16 DAC1 = 0xd5; // DAC1 data
sfr16 T0 = 0x8a; // Timer0 counter
sbit WR=P0^6; //寫信號
sbit RD=P0^7;
sbit nRest=P3^1; //讀信號
// 函數聲明
//----------------------------------
void SYSCLK_Init (void);
void PORT_Init (void);
void SYS_Init (void);
void WDT_Init(void);
void Reset_Sources_Init(void);
void EMIF_Init (void);
void Deivce_Init(void);
void delay(unsigned int t);
void Deivce_Init(void);
void UART0_Tnit(void);
char getchar (void);
char putchar (char a);
void Init_Interrupt(void);
void main()
{
BYTE i;
Deivce_Init();
DelayMs(6);
nRest=1;
Init_Interrupt();
ENABLE_INTERRUPTS;
//sl811h_init();
i=SL811Read(IntStatus);
USBReset();
while(TRUE)
{
UsbEvent=TRUE;
i=SL811Read(IntStatus);
if(UsbEvent)
{
UsbEvent=FALSE;
SL811Write(IntStatus,0XFF);
i=SL811Read(IntStatus);
if((USB_RESET&i)) //沒有接入設備;
{
if(USB_Control.SLAVE_ONLINE ==TRUE)
{
USB_Control.SLAVE_REMOVED=TRUE;
USB_Control.SLAVE_ONLINE =FALSE; //顯而易見;
}
}
else
{
if(USB_Control.SLAVE_ONLINE == FALSE&&(i|0x7F))
{
USB_Control.SLAVE_FOUND=TRUE;
USB_Control.SLAVE_ONLINE =TRUE; //顯而易見;
}
}
if(USB_Control.SLAVE_FOUND)
{
DISABLE_INTERRUPTS;
USB_Control.SLAVE_FOUND=FALSE;
if(EnumUsbDev(1))
USB_Control.SLAVE_ENUMERATED = TRUE;
ENABLE_INTERRUPTS;
}
if(USB_Control.SLAVE_REMOVED)
{
DISABLE_INTERRUPTS;
USB_Control.SLAVE_REMOVED=FALSE;
USB_Control.SLAVE_ENUMERATED = FALSE;
ENABLE_INTERRUPTS;
}
}
}
}
void delay(unsigned int t)
{
unsigned int i;
for(i=0;i<1000;i++)
{
while(t--)
{
t++;
t--;
}
Clr_WDT();
}
}
void SYS_Init()
{
EA =0; //關中斷
}
void Init_Interrupt(void)//?????????????????????????????????????????
{
IT0 = 0;//中斷方式;
EX0 = 1;//外部中斷0;
}
/*
***********************************************************
*程序名 WDT_Init
*作用 :看門狗初始化
*參數 :無
*返回值 :無
*作者 :李本齋
*日期 : 2008.12.20
*版權聲明:
***********************************************************
*/
void WDT_Init(void)
{
WDTCN = 0xDE;
WDTCN = 0xAD;
}
/*
***********************************************************
*程序名 SYSCLK_Init
*作用 :時鐘初始化
*參數 :無
*返回值 :無
*作者 :李本齋
*日期 : 2008.12.20
*版權聲明:
***********************************************************
*/
void SYSCLK_Init (void)
{
int i; // delay counter// start external oscillator with
OSCXCN = 0x67; // 22.1184MHz crystal
for (i=0; i < 256; i++) ; // Wait for osc. to start up
while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle
OSCICN = 0x88; // select external oscillator as SYSCLK
// source and enable missing clock // detector
}
// Configure the Crossbar and GPIO ports
/*
***********************************************************
*程序名 PORT_Init
*作用 :端口初始化
*參數 :無
*返回值 :無
*作者 :李本齋
*日期 : 2008.12.20
*版權聲明:
***********************************************************
*/
void PORT_Init (void)
{
XBR0 = 0x05;
XBR1 = 0x14;
XBR2 = 0x40;
// Enable crossbar and weak pull-ups
P3MDOUT = 0xFF;
P2MDOUT = 0xFF;
P1MDOUT = 0xFF;
P0MDOUT = 0xFF;
P74OUT = 0xFF;
}
//-----------------------------------------------------------------------------
// EMIF_Init
//-----------------------------------------------------------------------------
//
// Configure the external memory interface to use upper port pins in
// non-multiplexed mode to a mixed on-chip/off-chip configuration without
// Bank Select.
//
void EMIF_Init (void)
{
EMI0CF = 0x38; // upper ports; non-muxed mode; // split mode w/o bank select
EMI0TC = 0x20; // fastest timing (4-cycle MOVX)
}
void Deivce_Init(void)
{
WDT_Init(); //看門狗初始化
EMIF_Init(); //外部存儲器訪問初始化
PORT_Init(); //端口配置
SYSCLK_Init(); //系統時鐘配置
SYS_Init();
UART0_Tnit(); //系統數據初始化
}
void UART0_Tnit(void)
{
SCON0 = 0x50; // SCON0: mode 1, 8-bit UART, enable RX
TMOD = 0x21; // TMOD: timer 1, mode 2, 8-bit reload
TH1 = -(SYSCLK/BAUDRATE/16); // set Timer1 reload value for baudrate9600
TR1 = 1; // start Timer1
CKCON |= 0x10; // Timer1 uses SYSCLK as time base
PCON |= 0x80; // SMOD00 = 1
ES0 = 0; // disable UART0 interrupts
TI0 = 0; // Indicate TX0 ready
}
char getchar (void)
{
char a;
while(!RI0)
Clr_WDT();
RI0 =0;
a = SBUF0;
return a;
}
char putchar (char a)
{
SBUF0 = a;
while(!TI0);
Clr_WDT();
TI0 =0;
return 0;
}
/*void ISR_INT0(void) interrupt 0
{
EA = 0;
SL811Write(IntStatus,INT_CLEAR);
UsbEvent=TRUE;
EA = 1;
}*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -