📄 usb.c
字号:
#include "C8051F340.h"
#include "intrins.h"
#include <PORTDEFINE.H>
#include <MCU.H>
unsigned char xdata CH375_CMD_PORT _at_ CH375_CMD_PORT_ADDR;
unsigned char xdata CH375_DAT_PORT _at_ CH375_DAT_PORT_ADDR;
void Delayus(unsigned char n)
{ // 48Mhz 1us
unsigned char i,j;
for(j=0; j<n; j++)
{
for(i=0; i<5; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void Delayms(unsigned char n)
{
unsigned int i;
unsigned char j;
for(j=0;j<n;j++)
{
for(i=0;i<3000;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void Selectchip(unsigned char ch,unsigned char mode) //ch为高位地址
{
switch(mode)
{
case 0: P2=ch&0x3f; //选择液晶,高两位为00
STRCLK=0;
STRCLK=1;
break;
case 1: P2=(ch&0x7f)|0x40; //选择FLASH,高两位为01
STRCLK=0;
STRCLK=1;
break;
case 2: P2=(ch|0x80)&0xbf; //选择USB,高两位为10
STRCLK=0;
STRCLK=1;
break;
case 3: P2=ch|0xc0; //选择跳线,高两位为11
STRCLK=0;
STRCLK=1;
break;
default: break;
}
}
void xWriteCH375Cmd(unsigned char cmd)
{ //* 向CH375的命令端口写入命令,周期不小于4uS,如果单片机较快则延时
Delayus(5);
SelExRam();
CH375_CMD_PORT=cmd;
SelInRam();
Delayus(5);
}
void xWriteCH375Data(unsigned char dat)
{ //* 向CH375的数据端口写入数据,周期不小于1.5uS,如果单片机较快则延时
Delayus(5);
SelExRam();
CH375_DAT_PORT=dat;
SelInRam();
Delayus(5); //* 如果是MCS51单片机,因其较慢,所以实际上无需延时
}
unsigned char xReadCH375Data(void)
{ //* 从CH375的数据端口读出数据,周期不小于1.5uS,如果单片机较快则延时
unsigned char uc1;
Delayus(5); //* 如果是MCS51单片机,因其较慢,所以实际上无需延时
SelExRam();
uc1=CH375_DAT_PORT;
SelInRam();
Delayus(5);
return uc1;
}
void USB_RESET()
{
USBRST=1; //高电平复位
Delayus(5);
USBRST=0;
Delayms(40); //40ms完成硬件复位
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -