?? 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 + -