久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2548|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

51單片機匯編程序——飛機游戲

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:136590 發(fā)表于 2016-8-12 11:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <serial.c>    //包含串行處理模塊
bit showclocksign;
bit showblocksign;
bit showfensign;
uchar count;
uint second;
uchar paoplace;
uint zongfen;
uchar speed=32;
idata    uint  free[16];     //定義行首處理空間
unsigned char idata *freep;    //定義指向該數(shù)組的指針
//****
gotoxy(uchar x,y)
{putbyte(0x1b);putbyte('['
);
putbyte((y%100)/10+0x30);
putbyte((y%10)+0x30);
putbyte(';');
putbyte((x%100)/10+0x30);
putbyte((x%10)+0x30);
putbyte('H');
}
//******************
clrscr()
{gotoxy(0,0); putbyte(0x1b); putstring("[J"); }

//**************
showpao()
{gotoxy(1,16); putbyte(0x1b); putstring("[K");
gotoxy(paoplace,16); putbyte('|');
gotoxy(1,17); putbyte(0x1b); putstring("[K");
gotoxy(paoplace-1,17);
putbyte('/');putbyte('H');putbyte('\\');
      
gotoxy(0,24);                              
}                                                
//***************
uint bdata showp;
sbit outblock=showp^15;
showblock()             //showblock
{uchar i,j;uint bdata p;
uint st;

gotoxy(0,0);
for(i=15;i!=0;i--)
{putbyte('|');
   showp=free[i];
  st=0x8000;
  for(j=0;j!=16;j++)                           
   { if ((showp&st)!=0) putbyte('@');   
     else putbyte(' ');
      st>>=1;                                    
                     //showp=showp>>1;                          
     
    }
putbyte('|');CR;     
}
gotoxy(0,24);
showblocksign=0;
}
//*************
showfen()
{gotoxy(6,19);
//putstring("得分: ");
putint(zongfen,1);
showfensign=0;
//putbyte(' ');
//puthex(free[15]/256); puthex(free[15]%256);
//gotoxy(0,24);
}
//******************************************************
void main(void)
{uchar idata c,i,j;bit k;
uint temp,notype;

serial_init();              // ET0=0;
putstring("\r\nSerial ready!\r\n");
start: ET0=1;clrscr();
putstring("飛機游戲"
   "\r\n     
   "\r\n游戲控制方法:"
   "\r\n   操作者不動鍵盤10秒鐘進入演示狀態(tài),按'a'或'4'飛機"
   "\r\n   左移,按'd'或'6'右移,按's'或'0'發(fā)彈,按'-'降低難度,"
   "\r\n   按'+'提高難度,按'p'立即進入演示狀態(tài)。"
   "\r\n   按任何鍵開始游戲。");
while(!inbufsign);  
zongfen=0;showblock();showfen();notype=1000;
gotoxy(0,19);        //putstring("lever: h-hard e-easy\r\n5-left 6-right 0-shot");
putstring("得分:\r\n級別: +:高 -:低\r\n5:左移 6:右移 0:發(fā)射");
gotoxy(7,20);putchar(speed,1);
for(i=0;i!=16;i++)
{free[i]=0;
}
        paoplace=9;showpao();
while(1) {      
if (showblocksign) showblock();
  if (showfensign) showfen();
  if (free[0]!=0)
   {ET0=0;notype=1000;free[0]=0;gotoxy(0,22);putstring("結(jié)束!再玩一遍?(y/n)");
   while(getbyte()!='y');goto start;
   }
  notype--;if(notype==10){notype=1000;goto autoplay;}
  delay(100);
  if (notype>900) {gotoxy(0,22);putbyte(0x1b); putstring("[K");}
  if (inbufsign)
   { c=getbyte();notype=1000;
      switch (c)
   {case '5':                   //left move
   case 'a':
    paoplace--; if (paoplace==1) paoplace=2;
     showpao();
     break;
    case '6':                    //right move
   case 'd':
     paoplace++; if (paoplace==18) paoplace=17;
      showpao();
      break;
     case '=':
                        case '+':
speed--;
if (speed==0)speed=1;
gotoxy(7,20);
putchar(speed,1);
    break;
   case '_':   
   case '-':
speed++;
if (speed==255)speed=254;
gotoxy(7,20);
putchar(speed,1);  
    break;
   case 's':
     case '0':                        //shot
       for(i=15,j=1;i!=0;i--,j=16-i)
         {gotoxy(paoplace,i); putbyte('o');delay(50);
           putbyte(8);putbyte(' ');
                                       //free[i]=0xffff;
                         temp=0x0001<<(17-paoplace);
                         if((free[j]&temp)!=0)
{free[j]&= (temp^0xffff);zongfen+=10;showfensign=1;break;}
     
           }
             break;
                        case 'y': goto start;
       case 'p':
autoplay:  gotoxy(0,22);putbyte(0x1b); putstring("[K");putstring("游戲自動演示中。");
    ET0=1;speed=20;gotoxy(7,20);putchar(speed,1);
    do
          {
if (showblocksign) showblock();
     if (showfensign) showfen();

           for(i=15,j=1;i!=0;i--,j=16-i)
          {gotoxy(paoplace,i); putbyte('o');delay(50);
            putbyte(8);putbyte(' ');
                          temp=0x0001<<(17-paoplace);
                          if((free[j]&temp)!=0)
{free[j] &= (temp^0xffff);zongfen+=10;showfensign=1;goto again;}
            }   
                         again:
     if (!(((free[5]&temp)!=0)||((free[4]&temp)!=0)))  
                                        {if (k) {paoplace--;}
                                 else {paoplace++;}
     }
                                 if (paoplace==1){ paoplace=2; k=0;}
                                 if (paoplace==18) {paoplace=17;k=1;}
     if (free[0]!=0)  //if dead?
     {ET0=0;notype=1000;free[0]=0;
                                  //while(getbyte()!='y');goto start;
     break;
     }
                                 showpao();
    }while(!inbufsign);
      }
  }
}
}
//freep=free;
//putbytes(freep,1);
//getline(freep,1);
  
uint code *getcode;
//******************
void timer0(void) interrupt 1
{
uchar i;
TH0=31;TL0=00;
                      //1/32S
count++;
if (count==speed)    //11059200   
{count=0;          //1s

         for(i=0;i<16;i++)
               {free[i]=free[i+1];
         }
            free[15]=*getcode;
        getcode++;if (getcode==1000) getcode=0;
                showblocksign=1;
                showclocksign=1;
         second++;               //1S
      if (second==3600) {second=0;showclocksign=1;}
                                // if (iftimeover) timeovercount++;
                                   //else timeovercount=0;
}
}
//serial.c 代碼
//串口中斷服務(wù)程序,僅需做簡單調(diào)用即可完成串口輸入輸出的處理
//出入均設(shè)有緩沖區(qū),大小可任意設(shè)置。
//可供使用的函數(shù)名:
//char getbyte(void);從接收緩沖區(qū)取一個byte,如不想等待則在調(diào)用前檢測inbufsign是否為1。
//putbyte(char c);放入一個字節(jié)到發(fā)送緩沖區(qū)
//putbytes(unsigned char *outplace,j);放一串數(shù)據(jù)到發(fā)送緩沖區(qū),自定義長度
//putstring(unsigned char code *puts);發(fā)送一個定義在程序存儲區(qū)的字符串到串口
//puthex(unsigned char c);發(fā)送一個字節(jié)的hex碼,分成兩個字節(jié)發(fā)。
//putchar(uchar c,uchar j);發(fā)送一個字節(jié)數(shù)據(jù)的asc碼表達方式,需要定義小數(shù)點的位置
//putint(uint ui,uchar j);發(fā)送一個整型數(shù)據(jù)的asc碼表達方式,需要定義小數(shù)點的位置
//delay(unsigned char d); 延時n x 100ns
//getline(char idata *line, unsigned char n); 獲取一行數(shù)據(jù)回車結(jié)束,必須定義最大輸入字符數(shù)
//CR;發(fā)送一個回車換行
//*************************************************************************
#include <w77e58.h>  
#define  uchar  unsigned char
#define  uint   unsigned int
#define  OLEN  10                      //size of serial transmission buffer   
idata   unsigned char  outbuf[OLEN];      // storage for transmission buffer      
unsigned char idata  *outlast=outbuf;       //最后由中斷傳輸出去的字節(jié)位置            
unsigned char idata  *putlast=outbuf;       //最后放入發(fā)送緩沖區(qū)的字節(jié)位置         
#define  ILEN  2                      //size of serial receiving buffer      
idata   unsigned char  inbuf[ILEN];  
unsigned char idata *inlast=inbuf;          //最后由中斷進入接收緩沖區(qū)的字節(jié)位置
unsigned char idata *getlast=inbuf;         //最后取走的字節(jié)位置                  
bit   outbufsign;                       //輸出緩沖區(qū)非空標志有=1               
bit   inbufsign;                        //接收緩沖區(qū)非空標志 有=1
bit   inbufful;                         //輸入緩沖區(qū)滿標志 滿=1
#define CR putstring("\r\n")              //CR=回車換行
unsigned char code comready[]="com is ready!";
//*****************************
//延時n x 100ns
void delay(unsigned char d)          //在源程序開頭定義是否用w77e58或22。1184M晶振
{unsigned char j;
do{ d--;
//110592 & 89c52
#ifndef cpuw77e58
    #ifndef xtal221184
j=21;                       //k=38 cpu80320  100us k=21 cpu 8052
#else              
j=42;  
#endif
#else
#ifndef xtal221184
j=38;
#else
j=76;   
#endif
#endif
do {j--;} while(j!=0);
}while(d!=0);
}
//*****************************
//放入一個字節(jié)到發(fā)送緩沖區(qū)
putbyte(char c)      
{uchar i,j;
  ES=0;                            //暫停串行中斷,以免數(shù)據(jù)比較時出錯?     
if (outlast==putlast )
{      i=(0-TH1);
do{i--;j=36; do {j--;}while(j!=0); }while(i!=0);   //延時一個字節(jié)發(fā)送時間
}                       
    *putlast=c;                                //放字節(jié)進入緩沖區(qū)
     putlast++;                                //發(fā)送緩沖區(qū)指針加一
    if (putlast==outbuf+OLEN) putlast=outbuf;      //指針到了頂部換到底部
    if (!outbufsign)  {outbufsign=1;TI=1;  }       //緩沖區(qū)開始為空置為有,啟動發(fā)送
    ES=1;
}
//******************************
//放一串數(shù)據(jù)到發(fā)送緩沖區(qū)
putbytes(unsigned char *outplace,unsigned char j)
{  
int i;
for(i=0;i<j;i++)
{putbyte(*outplace);
  outplace++;
}
}
//******************************
putchar(uchar c,uchar j)
{
uchar  idata free[4];uchar data i;
i=0;  
free[i++]=(c/100+0x30);
if (j==3) free[i++]='.';
free[i++]=(c%100)/10+0x30;
if (j==2) free[i++]='.';
if (j==2 && free[i-3]==0x30) free[i-3]=0x20;
free[i++]=(c%10)+0x30;
if (j==1 && free[i-3]==0x30) free[i-3]=0x20;
if (j==1 && free[i-3]==0x20 && free[i-2]==0x30) free[i-2]=0x20;
putbytes(free,i);
}
//******************************
putint(uint ui,uchar j)
{uchar idata free[6];
uchar data i;
i=0;
free[i++]=(ui/10000+0x30);
if (j==5) free[i++]='.';
free[i++]=((ui%10000)/1000+0x30);
if (j==4) free[i++]='.';
if (j==4 && free[i-3]==0x30) free[i-3]=0x20;
free[i++]=((ui%1000)/100+0x30);
if (j==3) free[i++]='.';
if (j==3 && free[i-4]==0x30) free[i-4]=0x20;
if (j==3 && free[i-4]==0x20 && free[i-3]==0x30) free[i-3]=0x20;
free[i++]=((ui%100)/10+0x30);
if (j==2) free[i++]='.';
if (j==2 && free[i-5]==0x30) free[i-5]=0x20;
if (j==2 && free[i-5]==0x20 &&  free[i-4]==0x30) free[i-4]=0x20;
if (j==2 && free[i-5]==0x20 &&  free[i-4]==0x20 && free[i-3]==0x30) free[i-3]=0x20;
free[i++]=(ui%10+0x30);
if (j==1 && free[i-5]==0x30) free[i-5]=0x20;
if (j==1 && free[i-5]==0x20 &&  free[i-4]==0x30) free[i-4]=0x20;
if (j==1 && free[i-5]==0x20 &&  free[i-4]==0x20 && free[i-3]==0x30) free[i-3]=0x20;
if (j==1 && free[i-5]==0x20 &&  free[i-4]==0x20 && free[i-3]==0x20 && free[i-2]==0x30) free[i-2]=0x20;
putbytes(free,i);
}
//***************************************
//發(fā)送一個定義在程序存儲區(qū)的字符串到串口
putstring(unsigned char  *puts)
{for (;*puts!=0;puts++)             //遇到停止符0結(jié)束
putbyte(*puts);
}
//*************************************
//發(fā)送一個字節(jié)的hex碼,分成兩個字節(jié)發(fā)。
unsigned char code hex_[]={"0123456789ABCDEF"};
puthex(unsigned char c)
{int ch;
ch=(c>>4)&0x0f;
putbyte(hex_[ch]);
ch=c&0x0f;
putbyte(hex_[ch]);
}
//*************************************
//從接收緩沖區(qū)取一個byte,如不想等待則在調(diào)用前檢測inbufsign是否為1。
uchar getbyte (void)      
{ char idata c ;
  while (!inbufsign);                  //緩沖區(qū)空等待
  ES=0;  
  c= *getlast;                        //取數(shù)據(jù)
  getlast++;                         //最后取走的數(shù)據(jù)位置加一
  inbufful=0;                        //輸入緩沖區(qū)的滿標志清零   
  if (getlast==inbuf+ILEN) getlast=inbuf; //地址到頂部回到底部
  if (getlast==inlast) inbufsign=0;   //地址相等置接收緩沖區(qū)空空標志,再取數(shù)前要檢該標志
  ES=1;
  return (c);                         //取回數(shù)據(jù)
}
//*****************************************
//接收一行數(shù)據(jù),必須定義放數(shù)據(jù)串的指針位置和大小
    del=0x7f,backspace=0x08,cr=0x0d,lf=0x0a
void getline (uchar idata *line, unsigned char n)  
{ unsigned char cnt = 0;                     //定義已接收的長度
  char c;
  do  {
    if ((c = getbyte ()) == 0x0d)  c = 0x00;    //讀一個字節(jié),如果是回車換成結(jié)束符
    if (c == 0x08  ||  c == 0x7f)            //BACKSPACE 和 DEL 的處理
    {   if (cnt != 0)                       //已經(jīng)輸入退掉一個字符
        {cnt--;                           //總數(shù)目減一
        line--;                            //指針減一
        putbyte (0x08);                    //屏幕回顯的處理
        putbyte (' ');
        putbyte (0x08);
       }
    }
    else   
{
putbyte (*line = c);                     //其他字符取入,回顯
      line++;                             //指針加一
      cnt++;                              //總數(shù)目加一
    }
  }  
while (cnt < n - 1  &&  c != 0x00 && c!=0x1b); //數(shù)目到了,回車或ESC停止   
  *line = 0;                                 //再加上停止符0
}
//****************************
putinbuf(uchar c)
{ES=0;  if(!inbufful)
      {*inlast= c;                          //放入數(shù)據(jù)            
     inlast++;                            //最后放入的位置加一  
     if (inlast==inbuf+ILEN) inlast=inbuf;     //地址到頂部回到底部
     if (inlast==getlast) inbufful=1;          //接收緩沖區(qū)滿置滿標志
      inbufsign=1;     
}
ES=1;
}
//*****************************************
//串口中斷處理
serial () interrupt 4
{   
if (TI )
    {  TI = 0;     
     if (outbufsign)              
                                       //if (putlast==outlast) outbufsign=0;
                                       //else
     {
SBUF=*outlast; //未發(fā)送完繼續(xù)發(fā)送
     outlast++;                          //最后傳出去的字節(jié)位置加一
    if (outlast==outbuf+OLEN) outlast=outbuf;   //地址到頂部回到底部
    if (putlast==outlast) outbufsign=0;          //數(shù)據(jù)發(fā)送完置發(fā)送緩沖區(qū)空標志                    
      }   
    }
    if (RI)  
{  
RI = 0;
     if(!inbufful)
     {
     *inlast= SBUF;                    //放入數(shù)據(jù)            
     inlast++;                         //最后放入的位置加一
        inbufsign=1;
     if (inlast==inbuf+ILEN) inlast=inbuf;  //地址到頂部回到底部
     if (inlast==getlast) inbufful=1;       //接收緩沖區(qū)滿置滿標志
      
     }
    }
}
//*****************************
//串口初始化
0xfd=19200,0xfa=9600,0xf4=4800,0xe8=2400,0xd0=1200
serial_init ()  
{
  SCON  = 0x50;                      // mode 1: 8-bit UART, enable receiver   
  TMOD |= 0x20;                      //timer 1 mode 2: 8-Bit reload         
  PCON |= 0x80; TH1 = 0xfd;//fa,         //baud*2  reload value 19200 baud      
  TR1   = 1;                         //timer 1 run                           
  ES    = 1; REN=1; EA=1; SM2=1;     //SM2=1時收到的第9位為1才置位RI標志
TMOD |=0x01;                        //th1 auto load 2X8,th0 1X16
TH0=31; TL0=0; //X 32 =1S
TR0=1; ET0=1;
}
//*****************
//測試用主函數(shù)  

void main(void)
{
char c;
idata  unsigned  char  free[16];  
unsigned char idata *freep=free;
serial_init();
putstring(crlf);
putstring(comready);
putstring("jdioptuejls;j;klja");
delay(10);
while(1)
  {
  c=getbyte();
  putbyte(0x20);
puthex(c);
          switch(c)
          {case 'r':
           putbytes(inbuf,ILEN);  
            break;
                case 'g':
                getline(freep,10);
                putbyte(0x20);
                putstring(freep);  
                break;
                default:
   putbyte(c);
    }
  }
}                                       
W77E58.H代碼
#ifndef true
#define true 1
#define false 0
#endif
#ifndef byte
#define byte unsigned char
#define word unsigned int
#define dword unsigned long
#endif
#define clr_bit(bit_name) bit_name=0
#define set_bit(bit_name) bit_name=1
typedef union
{
word w;
byte bh;
byte bl;
}     WordType;
typedef union
{
dword dw;
byte b[4];
word  w[2];
}     DwordType;
//--BYTE Registers-------------------------------------------------
sfr P0   = 0x80;
sfr P1   = 0x90;
sfr P2   = 0xA0;
sfr P3   = 0xB0;
#define p0 P0
#define p1 P1
#define p2 P2
#define p3 P3

sfr PSW   = 0xD0;
sfr ACC   = 0xE0;
sfr B     = 0xF0;
sfr SP    = 0x81;
sfr DPL   = 0x82;
sfr DPH   = 0x83;
sfr PCON  = 0x87;//PCON.7(SMOD)撥特率加倍,PCON.1(PD)掉電方式,PCON.0(IDL)凍結(jié)方式
    //PCON.6(SMOD0)幀錯檢測允許,PCON.3(GF1)PCON.2(GF0)
sfr TCON  = 0x88;//定時控制寄存器
sfr TMOD  = 0x89;//"gate,c/t,m1,m0"x2定時器方式GATE=1時只有intx=1時才可以開放定時器x;
               //c/t =1時計書數(shù)方式,=0時定時方式。m1m0=00時13位計數(shù),=01時16位=10時自裝入8位,
               //11時定時器0分兩個,定時器1停止。
sfr TL0   = 0x8A;
sfr TL1   = 0x8B;
sfr TH0   = 0x8C;
sfr TH1   = 0x8D;
sfr IE    = 0xA8;
sfr IP    = 0xB8;  //中斷優(yōu)先級
sfr SCON  = 0x98; //串口控制與狀態(tài)
sfr SBUF  = 0x99;
//--W77E58 Extensions---------------------------------------------
sfr T2CON = 0xC8;
sfr T2MOD = 0xc9;//HC5,HC4,HC3,HC2,T2CR,-,T2OE,DCEN
             //hc5-hc2 =1時外中斷5-2標志硬件自動清除。
             //t2cr=1 捕獲完成時自動復(fù)位
             //t2oe=1 定時器2輸出允許
             //dcen=1 減計數(shù)允許,結(jié)合外部輸入t2ex使用,16位自裝入模式
sfr RCAP2L= 0xCA;//重裝的預(yù)置數(shù),捕獲的輸出
sfr RCAP2H= 0xCB;
sfr TL2   = 0xCC;
sfr TH2   = 0xCD;
sfr DPL1  = 0x84;
sfr DPH1  = 0x85;
sfr DPS   = 0x86;
sfr CKCON = 0x8e;//wd1,wd0,t2m,t1m,t0m,md2,md1,md0
    //wd1wd0:看門狗計數(shù)00=2^17,01=2^20,10=2^23,11=2^26
    //t2m,t1m,t0m等于1時時鐘4分頻
    //md2,md1,md0 MOVX執(zhí)行機器周期000=2,001=3。。。111=9
sfr EXIF  = 0x91;//ie5,ie4,ie3,ie2,XT/RG,RGMD,RGSL,-
    //ie5,ie3=1外中斷下跳變中斷標志
    //ie4,ie3=2外中斷上跳變中斷標志
sfr P4    = 0xa5;//低四位有效
sfr SADDR = 0xa9;//從機串口0地址
sfr SADDR1= 0xaa;//從機串口1地址
sfr SADEN = 0xb9;//串口0地址屏蔽,等于0時所有地址都會引起中斷
sfr SADEN1= 0xba;//串口0地址屏蔽,等于0時所有地址都會引起中斷
sfr SCON1 = 0xc0;
sfr SBUF1 = 0xc1;
sfr ROMMAP= 0xc2;//ROMMAP.7為等待信號使能,用movx指令時,wait腳為p4.0
sfr PMR   = 0xc4;//CD1,CD0,SWB,-,XTOFF,ALE-OFF,-DME0
                //cd0cd1=0時鐘不變,=1-1/4,=2-1/64,=3=1/1024
                //swb=1強制4分頻,外中斷或串口中斷喚醒
                //aleoff =1時ale信號終止,外部內(nèi)存訪問時自動喚醒
                //dme0 =1時內(nèi)部1kram使能
sfr STATUS= 0xc5;//-,HIP,LIP,XTUP,SPTA1,SPRA1,SPTA0,SPRA0
                //hip=1正在處理高優(yōu)先級中斷
                //lip=1正在處理低優(yōu)先級中斷
                //spta1串口0正在發(fā)送數(shù)據(jù)
                //spra1串口0正在接收數(shù)據(jù)
                //spta0串口0正在發(fā)送數(shù)據(jù)
                //spra0串口0正在接收數(shù)據(jù)
sfr TA    = 0xc7;//保護位
sfr WDCON = 0xd8;//SMOD_1,POR,-,-,WDIF,WTRF,EWT,RWT
               //smod1 加倍串口1的撥特率,pro電源復(fù)位標志
               //por 電源復(fù)位標志
              //wdif看門狗定時中斷標志,軟清
              //wtrf看門狗定時器復(fù)位標志,看門狗引起復(fù)位后,該位置1
             //ewt 允許看門狗定時器自動復(fù)位
             //rwt復(fù)位看門狗定時器,如果看門狗溢出還沒有被復(fù)位計數(shù)器,將會引
//起中斷,再過512周期將復(fù)位
sfr EIE   = 0xe8;//-,-,-,EWDI,EX5,EX4,EX3,EX2
    //ewdi=1,允許看門狗中斷?
    //ex5-ex2;外部中斷允許
sfr EIP   = 0xf8;//-,-,-,pwdi,px5,px4,px3,px2
    //pwdi=1 看門狗中斷優(yōu)先
    //px5-px2=1 外部中斷優(yōu)先
//--BIT Registers-------------------------------------------------
//PSW  
sbit CY    = 0xD7;
sbit AC    = 0xD6;
sbit F0    = 0xD5;
sbit RS1   = 0xD4;
sbit RS0   = 0xD3;
sbit OV    = 0xD2;
sbit P     = 0xD0;
//TCON
sbit TF1   = 0x8F;     //定時器1溢出標志,自動清零
sbit TR1   = 0x8E;     //timer1運行控制位
sbit TF0   = 0x8D;     //定時器0溢出標志,自動清零
sbit TR0   = 0x8C;     //timer0運行控制位
sbit IE1   = 0x8B;     //外中斷1跳變中斷請求標志,自動清零
sbit IT1   = 0x8A;     //中斷1跳變檢測使能
sbit IE0   = 0x89;     //外中斷0跳變中斷請求標志,自動清零
sbit IT0   = 0x88;     //中斷0跳變檢測使能
//IE  
sbit EA    = 0xAF;
sbit ES    = 0xAC;
sbit ET1   = 0xAB;
sbit EX1   = 0xAA;
sbit ET0   = 0xA9;
sbit EX0   = 0xA8;
//IP  
sbit PS    = 0xBC;   //串口0中斷優(yōu)先設(shè)定
sbit PT1   = 0xBB;  //定時器1中斷優(yōu)先
sbit PX1   = 0xBA;  //外中斷1
sbit PT0   = 0xB9;   //定時器0中斷優(yōu)先
sbit PX0   = 0xB8;   //外中斷0
//P3  
sbit RD   = 0xB7;
sbit WR   = 0xB6;
sbit T1   = 0xB5;
sbit T0   = 0xB4;
sbit INT1 = 0xB3;
sbit INT0 = 0xB2;
sbit TXD  = 0xB1;
sbit RXD  = 0xB0;
//SCON
sbit SM0   = 0x9F;   //SM0/FE  串口0方式0選擇或幀錯標志,人工清零
sbit SM1   = 0x9E;  //串口1工作方式選擇0-4/12tclk同步,1-10位可設(shè)bps異步,2-64/32tclk
//異步,3-11位可變bps異步
sbit SM2  = 0x9D;      //允許方式2和3的多機通訊控制位。方式2、3中=1時接收到的
//第9位為0時不啟動接收中斷ri標志
             //方式1中,=1時只有收到有效停止時才啟動ri,方式0中=1將撥
//特率提高3倍。
sbit REN   = 0x9C;     //允許接收標志
sbit TB8   = 0x9B;     //方式23中要發(fā)送的第9位。
sbit RB8   = 0x9A;     //方式23中接收到的第9位。
sbit TI    = 0x99;      //發(fā)送中斷標志
sbit RI    = 0x98;      //接收中斷標志
//--W77E58 Extensions--------------------------------------------
// PSW  
sbit F1  = 0xd1;
//IE  
sbit ET2  = 0xAD;      //定時器2允許
sbit ES1   = 0xae;      //串口1優(yōu)先
//IP  
sbit PT2   = 0xBD;     //定時器2優(yōu)先
sbit PS1   = 0xbe;      //串口1優(yōu)先
//P1  
sbit T2    = 0x90;      //計數(shù)器2輸入端口
sbit T2EX  = 0x91;     //計數(shù)器捕獲觸發(fā)
sbit RXD1  = 0x92;    //串口1入
sbit TXD1  = 0x93;    //串口2出
sbit INT2  = 0x94;     //外中斷2,上跳變觸發(fā)
sbit INT3  = 0x95;     //外中斷3,下跳變觸發(fā)
sbit INT4  = 0x96;     //外中斷4,上跳變觸發(fā)
sbit INT5  = 0x97;    //外中斷5,下跳變觸發(fā)
            
//T2CON
sbit TF2   = 0xCF;   //定時器2溢出標志,軟清除
sbit EXF2  = 0xCE;  //定時器2外部標志,當exen2=1且t2ex引腳負跳變引起捕獲或重載
//時置位,軟清。
sbit RCLK  = 0xCD;  //接收時鐘標志,=1時串口0用定時器2溢出做時鐘。
sbit TCLK  = 0xCC;  //發(fā)送時鐘標志,=1時串口0用定時器2溢出做時鐘。
sbit EXEN2 = 0xCB;   //定時器2外部允許標志,=1時若未用作撥特率發(fā)生器,t2ex腳的負
跳變引起捕獲
sbit TR2   = 0xCA;   //定時器2運行控制位
sbit C_T2  = 0xC9;   //計數(shù)/定時選擇,=1時計數(shù)
sbit CP_RL= 0xC8;   //捕獲/重載標志,=1時,外部允許時,vt2ex負跳變發(fā)生捕獲
                   //=0時 溢出或外部允許時,vt2ex負跳變發(fā)生重載
//SCON1
//注釋參考SCON
sbit SM0_1 = 0xC7;
sbit SM1_1 = 0xC6;
sbit SM2_1 = 0xC5;
sbit REN_1 = 0xC4;
sbit TB8_1 = 0xC3;
sbit RB8_1 = 0xC2;
sbit TI_1  = 0xC1;
sbit RI_1  = 0xC0;
//WDCON
sbit SMOD_1= 0xDF;             //加倍串口1的撥特率,pro電源復(fù)位標志
sbit POR   = 0xDE;              //電源復(fù)位標志
sbit WDIF  = 0XDB;             //看門狗定時中斷標志,軟清
sbit WTRF  = 0xDA;             //看門狗定時器復(fù)位標志,看門狗引起復(fù)位后,該位置1
sbit EWT   = 0xD9;              //允許看門狗定時器自動復(fù)位
sbit RWT   = 0xD8;              //復(fù)位看門狗定時器,如果看門狗溢出還沒有被復(fù)位計
//數(shù)器,將會引起中斷,再過512周期將復(fù)位
//EIE  
sbit EWDI  = 0xec;               //允許看門狗中斷
sbit EX5   = 0xeb;               //ex5-ex2;外部中斷允許
sbit EX4   = 0xea;
sbit EX3   = 0xe9;
sbit EX2   = 0xe8;
//EIP  
sbit PWDI  = 0xfc;               //pwdi=1 看門狗中斷優(yōu)先
sbit PX5   = 0xfb;             //px5-px2=1 外部中斷優(yōu)先
sbit PX4   = 0xfa;
sbit PX3   = 0xf9;
sbit PX2   = 0xf8;

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2016-8-12 13:42 | 只看該作者
缺少頭文件 建議打包上傳整個工程
回復(fù)

使用道具 舉報

板凳
ID:136575 發(fā)表于 2016-8-12 14:33 | 只看該作者
在這看挺……
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 午夜理伦三级理论三级在线观看 | 午夜寂寞影院在线观看 | 91亚洲精品在线 | 黄色一级免费观看 | 国产视频1区2区 | 国产精品欧美一区二区 | 九九爱这里只有精品 | 日本一区二区视频 | 中文字幕在线一区 | 97福利在线 | 一区二区三区四区在线 | 欧美成人h版在线观看 | 久久久亚洲一区 | 成人国产精品久久久 | 精品一区二区久久 | 真人女人一级毛片免费播放 | 狠狠涩| 日韩综合一区 | 九九精品在线 | 国产xxxx在线 | 久久一区二区视频 | 日韩一区二区久久 | 国产日韩一区二区 | 国产1区2区 | 国产欧美日韩在线播放 | 精品久久香蕉国产线看观看亚洲 | 亚洲深夜福利 | 羞羞网站在线观看 | 福利二区 | 超碰操| 色www精品视频在线观看 | 日韩精品视频在线免费观看 | 午夜免费视频 | 国产露脸对白88av | 久久手机在线视频 | 欧美成人精品在线观看 | 一区二区三区国产好 | av成人在线观看 | 国产中文字幕在线观看 | 99久久免费精品国产免费高清 | 欧美精品影院 |