亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 串口中斷服務程序.txt

?? c51經典子程序代碼全集
?? TXT
字號:
用【 小 | 中 | 大 】字體瀏覽 
C51編程:請聶小猛大蝦幫我! [hnqjl] [34次] 01-11-8 下午 03:47:27
聶小猛大蝦幫忙:我從WWW.MCU51.上下載的串行口程序 SERIAL.C 為何不能用?終端仿真程
序是否設置為波特率19200bps,8bit,1停止位,無校驗,無流控、使用 DEC VT-100[ANSI]
終端仿真協議、com1通訊。另外CPU 為89C52 晶體 11.059M? 謝謝!



如果你是簡單的看數據,那用簡單的軟件比較好,少點麻煩。 [無影腳] [4次] 01-11-8 下午 04:02:54 

我把我現在用的給你吧,修改好了一些小bug,該改的地方就自己改改吧。 [丁丁] [32次] 01-11-8 下午 04:10:51 
//本函數集來自“51單片機世界”,作者斑竹丁丁(聶小猛)。
//主頁地址<a href=http://www.mcu51.com target=_blank>http://www.mcu51.com</a>
//串口中斷服務程序,僅需做簡單調用即可完成串口輸入輸出的處理
//出入均設有緩沖區,大小可任意設置。
//可供使用的函數名:
/*
extern char getbyte(void);//從接收緩沖區取一個byte,如不想等待則在調用前檢測
inbufsign是否為1。
extern getline(uchar *line, uchar n); //獲取一行數據回車結束,必須定義最大輸入字
符數
extern putbyte(char c);//放入一個字節到發送緩沖區
extern putbytes(uchar *outplace,uchar j);//放一串數據到發送緩沖區,自定義長度
extern putstring(uchar  *puts);//發送一個定義在程序存儲區的字符串到串口
extern puthex(uchar c);//發送一個字節的hex碼,分成兩個字節發。
extern putchar(uchar c,uchar j);//輸出一個無符號字符數的十進制表示,必須標示小數
點的位置,自動刪除前面無用的零
extern putint(uint ui,uchar j);//輸出一個無符號整型數的十進制表示,必須標示小數
點的位置,自動刪除前面無用的零

extern putinbuf(uchar c);//人工輸入一個字符到輸入緩沖區
#define CR putstring("\r\n")//發送一個回車換行
extern serial_init ();
//extern unsigned char  outbuf[OLEN];
//extern unsigned char  inbuf[ILEN];
*/

//*************************************************************************
#pragma large

#include <w77e58.h>
#define  uchar  unsigned char
#define  uint   unsigned int

#define  OLEN  16                    /* size of serial transmission buffer   */
idata uchar  outbuf[OLEN];          /* storage for transmission buffer      */
idata uchar idata *outlast=outbuf;    //最后由中斷傳輸出去的字節位置
idata uchar idata *putlast=outbuf;    //最后放入發送緩沖區的字節位置
#define  ILEN  0x80                    /* size of serial receiving buffer      
*/
idata uchar  inbuf[ILEN];
idata uchar idata *inlast=inbuf;  //最后由中斷進入接收緩沖區的字節位置
idata uchar idata *getlast=inbuf;  //最后取走的字節位置
bit   outbufsign0;     //最后一個數據覵BUF發完標志  發完=0
bit   outbufsign;     //輸出緩沖區非空標志   有=1
bit   inbufsign;      //接收緩沖區非空標志   有=1
bit   inbufful;       //輸入緩沖區滿標志  滿=1
#define CR putstring("\r\n")   //CR=回車換行

/*********************** 延時 *****************************/
void Delay_ms(unsigned int ms)
{
       unsigned int IITemp1,IITemp2;
       for(IITemp1=0;IITemp1<ms;IITemp1++)
       {
              IITemp2=222;
              while(IITemp2) IITemp2--;
       }
}
//*****************************
//放入一個字節到發送緩沖區

putbyte(char c)
{
  ES=0;            /*暫停串行中斷,以免數據比較時出錯?     */
    //if (outlast=putlast)
    while ( (((outlast-putlast)==2) && (outlast > putlast )) || ((outlast < 
putlast) && (OLEN-(putlast-outlast)==2)))
    { ES=1; c++;c--;ES=0;
    //    i=(0-TH1);
    //    do{i--;j=39; do {j--;}while(j!=0); }while(i!
=0);     //i=39
    }
    *putlast=c;            //放字節進入緩沖區
     putlast++;          //發送緩沖區指針加一
    if (putlast==outbuf+OLEN) putlast=outbuf;  //指針到了頂部換到底部
    outbufsign=1;
    if (!outbufsign0)  {outbufsign0=1;TI=1;  }   //緩沖區開始為空置為有,啟動發
    ES=1;
}
//******************************
//放一串數據到發送緩沖區
putbytes(unsigned char *outplace,unsigned char j)
 {     int i;
    for(i=0;i<j;i++)
    {putbyte(*outplace);
     outplace++;
    }
}

//******************************
//輸出一個無符號字符數的十進制表示,必須標示小數點的位置,自動刪除前面無用的零
//例如putchar(0x32,2),輸出"4.8".
//putchar(0x32,3),輸出"0.48".
//putchar(0x32,1),輸出"48".
putchar(uchar c,uchar j)
{uchar  free[4];
uchar 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 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);
}

//***************************************
//發送一個定義在程序存儲區的字符串到串口
putstring(uchar  *puts)
{for (;*puts!=0;puts++)   //遇到停止符0結束
putbyte(*puts);
}
//*************************************
//發送一個字節的hex碼,分成兩個字節發。
uchar code hex_[]={"0123456789ABCDEF"};
puthex(unsigned char c)
{int ch;
ch=(c>>4)&0x0f;
putbyte(hex_[ch]);
ch=c&0x0f;
putbyte(hex_[ch]);
}
//*************************************
//從接收緩沖區取一個byte,如不想等待則在調用前檢測inbufsign是否為1。
uchar getbyte (void)
{ char idata c ;
  while (!inbufsign);     //緩沖區空等待

  ES=0;
  c= *getlast;            //取數據
  getlast++;              //最后取走的數據位置加一
  inbufful=0;            //輸入緩沖區的滿標志清零
      if (getlast==inbuf+ILEN) getlast=inbuf; //地址到頂部回到底部
      if (getlast==inlast) inbufsign=0;       //地址相等置接收緩沖區空空標
志,再取數前要檢該標志
  ES=1;
  return (c);        //取回數據
}
//*****************************************
//接收一行數據,必須定義放數據串的指針位置和大小    
del=0x7f,backspace=0x08,cr=0x0d,lf=0x0a
void getline (uchar *line, uchar n)
{ unsigned char cnt = 0;  //定義已接收的長度
  char c;
  do  {
      c = getbyte ();
    //if ((c = getbyte ()) == 0x0d)  c = 0x00;    //讀一個字節,如果是回車換成結
束符
    if (c == 0x08  ||  c == 0x7f)               //BACKSPACE 和 DEL 的處理
    {   if (cnt != 0)                          //已經輸入退掉一個字符
        {cnt--;                              //總數目減一
        line--;                             //指針減一
        putbyte (0x08);                     //屏幕回顯的處理
        putbyte (' ');
        putbyte (0x08);
          }
    }
    else
    { putbyte (*line = c);                 //其他字符取入,回顯
      line++;                               //指針加一
      cnt++;                               //總數目加一
    }
  }  while (cnt < n - 1  &&  c != 0x0d && c!=0x1b); //數目到了,回車或ESC停止
  *line = 0;                                //再加上停止符0
}
//****************************
//人工輸入一個字符到輸入緩沖區
putinbuf(uchar c)
{ES=0;  if(!inbufful)
         {*inlast= c;            //放入數據
        inlast++;                    //最后放入的位置加一
        if (inlast==inbuf+ILEN) inlast=inbuf;//地址到頂部回到底部
        if (inlast==getlast)    inbufful=1;  //接收緩沖區滿置滿標志
         inbufsign=1;
    }
ES=1;
}
//*****************************************
//串口中斷處理

serial () interrupt 4
{   if (TI )
    {     TI = 0;
        if (outbufsign)
        //if (putlast==outlast) outbufsign=0;
        //else
        {SBUF=*outlast; //未發送完繼續發送
        outlast++;            //最后傳出去的字節位置加一
            if (outlast==outbuf+OLEN) outlast=outbuf;//地址到頂部回到
底部
            if (putlast==outlast) outbufsign=0;   //數據發送完置發送緩
沖區空標志
         }
           else outbufsign0=0;
    }
    if (RI)
    {  RI = 0;
        if(!inbufful)
        {
        *inlast= SBUF;            //放入數據
        inlast++;                    //最后放入的位置加一
        inbufsign=1;
        if (inlast==inbuf+ILEN) inlast=inbuf;//地址到頂部回到底部
        if (inlast==getlast)    inbufful=1;  //接收緩沖區滿置滿標志

        }
    }
}

//*****************************
//串口初始化                0xfd=19200,0xfa=9600,0xf4=4800,0xe8=2400,0xd0=1200
serial_init ()
{
//用t1作波特率
/*
SCON  = 0x50;                     // mode 1: 8-bit UART, enable receiver
TMOD |= 0x20;                      // timer 1 mode 2: 8-Bit reload
PCON |= 0x80; TH1 = 0xf4;//fa,          //baud*2    /* reload value 19200 baud
TR1   = 1;                         // timer 1 run
*/
用t2作波特率
T2CON=0x30;
RCAP2H=0xFF;
RCAP2L=0xfa;//b8=9600,dc=19200,ee=38400,f4=57600,fa=115200
TR2=1;ET2=1;
SCON=0xd0;


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;

//putstring("com is ready!");
}
//*****************
//測試用主函數
/*
void main(void)
{char c;
idata  unsigned  char  free[16];
unsigned char idata *freep=free;
serial_init();

putstring("com is ready!");
puthex('a');

//delay(10);
CR;
    while(1)
     {putstring("\r\nHELP:'r':輸出輸入緩沖區的內容,'g':讀取一行字符串。
\r\nC:\\>");
     c=getbyte();

            switch(c)
             {case 'r':
                putstring("\r\n下面是輸入緩沖區的內容:");
          //    putbytes(inbuf,ILEN);
                CR;
               break;
                case 'g':
                putstring("\r\n請讀取一行字符,最大十個,回車結束:");
                getline(freep,10);
                CR;
                putstring(freep);
                CR;
                break;
                default:
         putbyte(c);
                putstring("\r\nbad command or file name.\r\n");
          }
     }
}
*/

 

 
點擊這里回復這篇貼子>>
_____________________________________________________________________________
Copyright?,C51BBS論壇 2000-2002 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
伊人性伊人情综合网| 制服丝袜亚洲精品中文字幕| 麻豆精品在线视频| 日韩精品一二三区| 亚洲大片精品永久免费| 一级日本不卡的影视| 五月天激情综合| 捆绑调教美女网站视频一区| 麻豆一区二区99久久久久| 激情偷乱视频一区二区三区| 国产成人av资源| 91久久一区二区| 精品国产三级电影在线观看| 欧美在线不卡一区| 精品一区二区在线播放| 激情综合网av| 色伊人久久综合中文字幕| 日韩一级视频免费观看在线| 国产片一区二区| 亚洲电影在线免费观看| 国产精品 日产精品 欧美精品| 99精品久久久久久| 精品99久久久久久| 亚洲不卡一区二区三区| 国产剧情av麻豆香蕉精品| 色伊人久久综合中文字幕| 欧美一级在线观看| 精品国产免费人成在线观看| 亚洲制服丝袜一区| 国产在线播放一区三区四| 欧美性猛交xxxx黑人交| 日韩美女在线视频| 亚洲欧美综合在线精品| 日本伊人精品一区二区三区观看方式| 精品一区二区成人精品| 欧美日韩国产影片| 久久久久久久久久看片| 亚洲国产成人av| av影院午夜一区| 国产日韩精品一区二区三区| 精品一区二区在线播放| 69堂成人精品免费视频| 亚洲午夜国产一区99re久久| 欧美亚洲尤物久久| 一区二区在线观看视频在线观看| 国产精品一区二区无线| 精品福利一二区| 日本亚洲三级在线| 欧美美女激情18p| 日本午夜一区二区| 日韩午夜激情av| 美女视频网站黄色亚洲| 欧美一级片免费看| 国产一区二区视频在线| 欧美激情一区二区三区| 成人aaaa免费全部观看| 亚洲在线中文字幕| 欧美成人福利视频| 国产福利91精品一区二区三区| 国产精品久久久久久福利一牛影视 | 国产精品亚洲成人| 久久久精品黄色| 不卡的av电影| 亚洲国产精品一区二区久久| 欧美日韩精品福利| 人人精品人人爱| 欧美不卡在线视频| 色婷婷久久99综合精品jk白丝| 亚洲欧美激情在线| 91久久精品午夜一区二区| 亚洲最大成人网4388xx| 日韩片之四级片| 91在线免费视频观看| 奇米色777欧美一区二区| 亚洲国产精品成人综合| 欧美日韩国产经典色站一区二区三区 | 精品国产一区二区三区久久影院| 91香蕉视频黄| 国产激情一区二区三区桃花岛亚洲| 亚洲在线视频免费观看| 中文字幕日韩av资源站| 国产精品美女久久久久久久 | 亚洲国产精品久久人人爱| 中文字幕电影一区| 精品国产成人在线影院 | 久久在线免费观看| 日韩三级av在线播放| 欧美精品一区二区蜜臀亚洲| 国产拍欧美日韩视频二区| 中文字幕欧美三区| 中文字幕五月欧美| 一区二区三区日本| 午夜国产不卡在线观看视频| 亚洲欧美另类小说| 亚洲男女毛片无遮挡| 亚洲欧洲韩国日本视频| 欧美高清在线一区| 亚洲欧洲99久久| 亚洲欧美激情视频在线观看一区二区三区| 国产性天天综合网| 国产精品久久久99| 亚洲国产视频直播| 亚洲成人777| 久久激五月天综合精品| 蜜桃视频第一区免费观看| 午夜精品久久久久| 久久精品噜噜噜成人av农村| 国产乱码精品一区二区三区忘忧草| 国产老妇另类xxxxx| 国产成人精品三级| 欧美午夜影院一区| 色久综合一二码| 精品国产乱码久久久久久夜甘婷婷| 久久综合九色综合欧美98| 亚洲特级片在线| 精品一区二区三区影院在线午夜| 成人激情文学综合网| 欧美一区二区福利在线| **性色生活片久久毛片| 国产伦精品一区二区三区视频青涩 | 久久久综合九色合综国产精品| 综合激情成人伊人| 激情深爱一区二区| 欧美三级资源在线| 欧美韩国日本综合| 久久精品国产在热久久| 欧美在线综合视频| 日韩一二三区视频| 亚洲美女一区二区三区| 成人免费毛片高清视频| 精品国产一区a| 麻豆精品视频在线观看免费| 欧美午夜精品一区二区蜜桃| 18欧美亚洲精品| 99久久婷婷国产综合精品电影 | 亚洲欧美自拍偷拍色图| 不卡一区二区在线| 自拍偷在线精品自拍偷无码专区| 高清不卡一区二区| 久久精品人人做| 粉嫩高潮美女一区二区三区 | 久久精品99国产国产精| 日韩丝袜美女视频| av中文字幕亚洲| 亚洲日穴在线视频| 色狠狠色狠狠综合| 日韩主播视频在线| 精品福利av导航| 成年人国产精品| 亚洲精品v日韩精品| 欧洲av一区二区嗯嗯嗯啊| 美女网站色91| 国产精品伦一区二区三级视频| 色呦呦一区二区三区| 午夜久久久久久久久| 欧美精品一区二区三区在线| 成人av资源站| 男女性色大片免费观看一区二区 | 久久久久久久久免费| 欧美视频自拍偷拍| 懂色中文一区二区在线播放| 美日韩黄色大片| 香蕉av福利精品导航| 国产精品丝袜在线| 精品成人私密视频| 91亚洲精品久久久蜜桃网站| 久久9热精品视频| 日韩一区在线播放| 久久中文娱乐网| 久久精品亚洲精品国产欧美kt∨| 91碰在线视频| 99精品欧美一区二区三区综合在线| 欧美激情综合五月色丁香| 成人免费电影视频| 日韩激情在线观看| 国产日产欧美一区| 欧美亚洲自拍偷拍| 国产91精品一区二区麻豆网站| 亚洲一级在线观看| 国产网红主播福利一区二区| 欧美电影在哪看比较好| 欧美在线你懂得| 91国产丝袜在线播放| 成人免费福利片| 91久久国产综合久久| 成人av高清在线| 色先锋资源久久综合| 欧美中文字幕一区二区三区| 一道本成人在线| 欧美影院午夜播放| 99精品在线观看视频| 色综合久久99| 欧美日韩免费在线视频| 久久人人97超碰com| 最新欧美精品一区二区三区| 亚洲一区二区av在线| 男女视频一区二区| 国产精品亚洲成人| 91麻豆免费视频| 91精品国产综合久久精品性色|