📄 usb.c
字号:
#include<AT89X51.h>
/*
char *xdata a;
char xdata *a;
char data *xdata a;
上面3个指针,我概念比较混乱,看了书后也不是特别明白。还请高手帮忙给通俗地解释解释。谢谢!
xdata: 存储在外部RAM
data:存储在内部RAM
要存储的内容:
1.指针char *a指向的Byte串,2.指针本身,一般要3Byte
如果没有指定存储的地方(哪种RAM),按编译模式设定,一般是存储在data (small模式)。这样
char *xdata a
char data *xdata a
是相同的,都是表示指针本身存储在外部RAM,指针指向的数据存储在内部RAM
char xdata *a指指针本身3Byte存储在内部RAM,指针指向的Byte串存储在外部RAM XDATA。
一般尽量用内部RAM,data 数组的数据大,内部RAM放不下,用外部RAM保持数组内容
char xdata *a
这时指针本身的3Byte还是在内部RAM中;内部RAM不够用,可以把这3Byte也放倒外部RAM
char xdata *xdata a
*/
#define CH371_PAGE 0
#define CH371_SYSTEM (unsigned char xdata *)2
#define CH371_CONFIG (unsigned char xdata *)2
#define CH371_INT_SET (unsigned char xdata*)6
#define CH371_STATUS (unsigned char xdata*)6
#define CH371_LENGTH (unsigned char xdata*)7
#define CH371_BUFFER (unsigned char xdata*)8
unsigned char save_status;
unsigned char save_length;
unsigned char save_buffer[8]={0};
unsigned char *temp;
unsigned char counter;
bit ReceiveFlag;
void Init(void)
{
*CH371_LENGTH=15;
save_length=0;
IT0=1;
IE0=0;
PX0=1;
EX0=1;
EA=1;
}
void UpLoad(unsigned char *pBuffer,unsigned len)
{
temp=CH371_BUFFER;
for(counter=0;counter<len;counter++)
{
*temp++=*pBuffer++;
}
*CH371_LENGTH=len;
}
void ExtInt0() interrupt 0
{
save_status=*CH371_STATUS;
if(save_status&0x01)
{
*CH371_LENGTH=15;
}
else{
P1=0xff;
temp=CH371_BUFFER;
save_length=*CH371_LENGTH;
for(counter=0;counter<save_length;counter++)
{save_buffer[counter]=*temp++;
ReceiveFlag=1;
}
}
}
void main(){
temp=0;
counter=0;
ReceiveFlag=0;
P1=0;
Init();
while(1)
{
if(ReceiveFlag==1)
{
if(save_buffer[0]==0x90)
{
save_buffer[0]=~save_buffer[0];
save_buffer[1]=~save_buffer[1];
save_buffer[2]=~save_buffer[2];
UpLoad(save_buffer,8);
}
ReceiveFlag=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -