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

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

?? 單片機串口通信.txt

?? 串口控制程序一般分為查詢和中斷兩者方式。查詢方式適用于簡單的應用
?? TXT
字號:
單片機串口通信
                                                                                                      串口控制程序一般分為查詢和中斷兩者方式。查詢方式適用于簡單的應用,簡單可靠,但是缺點是需要占用處理器資源,在發送或者接收數據的時候不能做其它的事情,處理器利用率低。中斷方式下,在發送或者接受數據的時候處理器還可以做其它的工作,效率較高。
        對于稍微復雜的系統來說,中斷方式管理串口程序將會更加有效。中斷處理方式也可分為幾種,其中采用循環緩沖區的方式比較高效。循環緩沖區為定義的一定長度的RAM區間,對于接受數據來說,中斷中收到的數據將存入RAM中,然后等待主程序來讀取。其中會涉及到數據見的協調問題,寫數據的時候不能把還沒有讀取的數據覆蓋掉,讀數據的時候應該讀取的是緩沖區中最老的數據。當緩沖區已滿的時候,寫入的新數據應該覆蓋掉最老的數據。這些問題的處理可以使用兩個指針來實現。

  

        初始化時兩個指針均指向RAM區間的底部,如圖1所示。當中斷中接收到一個數據的時候,將這個數據寫入寫指針WPTR指向的存儲單元,然后調整寫指針指向下一個空余的RAM區間,程序上處理就是把寫指針加一,如圖2所示。同理,寫入N個數據后寫指針同步更新,如圖3所示。

  

        當讀數據的時候,首先判斷緩沖區中是否有數據,方法是判斷讀指針和寫指針是否相等,如果相等表明沒有數據,如圖5所示。如果讀指針和寫指針不等,那么讀取緩沖區中的數據,然后調整讀指針,當寫指針和讀指針相等的時候,表明緩沖區中的有效數據已經讀取完,此時讀指針和寫指針相等。

  

        當有數據再次寫入的時候,繼續緊接著上次寫入的地址后寫入新的數據,如果數據長度超過緩沖區的長度,寫指針重新返回緩沖區的底部重新開始(這是循環緩沖的由來),如圖6所示。此時如果有數據讀出,讀指針做同樣的更新。如果沒有數據讀出,一直有數據寫入,可能會出現緩沖區寫滿的情況,如圖7所示。此時如果仍然沒有數據讀取,繼續有數據寫入的時候,為了保留新的數據,必須丟棄老的數據,即寫指針可能超過讀指針,此時,讀指針必須和諧指針同步更新,這樣才能保證讀取的是沒有被覆蓋的最老的數據,如圖8所示。

  

        需要注意的是,讀指針在中斷過程中也可能被更改,因此,讀數據的子程序需要對讀指針的更改進行保護,方法是在讀數據的時候關閉串行口中斷。下面是循環緩沖區接收數據的程序實例。
        FT, 盡然連文本都不能上傳,代碼只好貼出來吧。
/*
 * FileName:    uart.h
 * Description: header file for SerialPort
 * Author:      SangWei, HUST-CEEE-2004
 * Contact:     swkyer@163.com, swkyer@hotmail.com
 * Date:        2005-09-22
 *
 * Platform:    P89C6102(Philips), KeilC51(ver: 7.20)
 * 
 * (C)All Rights Reserved.
*/    
#ifndef __UART_H__
#define __UART_H__

#define UARTBUFFLEN    64     /* 串口緩沖區64個字節 */

void UartInit(void);
void SendChar(unsigned char ch);
unsigned char IsUartReceived(void);
unsigned char ReadChar(unsigned char idata *buf);

#endif /* __UART_H__ */


/*
 * FileName:    uart.c
 * Description: Implementation of SerialPort
 * Author:      SangWei, HUST-CEEE-2004
 * Contact:     swkyer@163.com, swkyer@hotmail.com
 * Date:        2005-09-22
 * 
 * Platform:    P89C6102(Philips), KeilC51(ver: 7.20)
 * 
 * (C)All Rights Reserved.
*/
#i nclude <intrins.h>
#i nclude "hardware.h"
#i nclude "uart.h"

unsigned char data ramuse;
static unsigned char idata uartbuf;
static unsigned char idata bufwptr, bufrptr;
extern unsigned char xdata uartbuff[UARTBUFFLEN];

/*
 * 初始化串口, 波特率9600
 */
void UartInit(void)
{
 CLR_DOG;
 status = 0;
 bufwptr = 0;     // 寫指針
 bufrptr = 0;     // 讀指針
 MAX485CTL = 0;     // 接收數據
 PCON = 0x00;     // 設置串口波特率, 時鐘頻率30MHZ
 T2CON = 0x30;     // 定時器2作為波特率發生器
 SCON = 0x50;     // 模式1
         // n = 65536 - [fosc/baud*32]
         // n = 65536 - 30000000/(19200*32) = 65536 - 49 = 65490 = 0xffd2
         // n = 65536 - 22118400/(19200*32) = 65536 - 36 = 65500 = 0xffdc
#ifdef _DEBUG_AT_HOME
 RCAP2H = 0xff;     
 RCAP2L = 0xb8;     // baud rate 9600
 TH2 = 0xff;
 TL2 = 0xb8;
#else
 RCAP2H = 0xff;     
 RCAP2L = 0x9e;     // baud rate 9600   
 TH2 = 0xff;
 TL2 = 0x9e;
#endif

 IP = 0x10;      // 串口中斷優先級高
 REN = 1;
 TI = 0;
 RI = 0;
 TR2 = 1;      // 啟動定時器2
 ES0 = 1;      // 使能串口中斷

 CLR_DOG;
}

/*
 *  發送一個字節數據
 */
void SendChar(unsigned char ch)
{
 SBUF = ch;
 while(TI == 0);
 TI = 0;
}

/*
 * 判斷是否接收到數據,如果沒有返回0,如果有,返回數據長度
 */
unsigned char IsUartReceived(void)
{
 unsigned char num;
 
 CLR_DOG;
 EA = 0;       // 關中斷
 if(bufwptr == bufrptr)
  num = 0;
 else if(bufwptr > bufrptr)
  num = (bufwptr-bufrptr);
 else // if(bufwptr < bufrptr)
  num = (UARTBUFFLEN-bufwptr+bufrptr);
 EA = 1;
 return num;
}

/*
 * 從緩沖區中讀一個字節數據
 * 返回剩下的字節數
 */
unsigned char ReadChar(unsigned char idata *buf)
{
 unsigned char ch, num;

 CLR_DOG;
 USE_ERAM;
 EA = 0;
 if(bufwptr == bufrptr)
 {
  *buf = 0;
  num = 0;
 }
 else if(bufwptr > bufrptr)
 {
  ch = uartbuff[bufrptr];
  *buf = ch;
  bufrptr++;
  num = (bufwptr-bufrptr);
 }
 else // if(bufwptr < bufrptr)
 {
  ch = uartbuff[bufrptr];
  *buf = ch;
  bufrptr++;
  if(bufrptr == UARTBUFFLEN)
   bufrptr = 0;
  num = (UARTBUFFLEN-bufrptr+bufwptr);
 }

 EA = 1;
 return num;
}

/*
 * 串口中斷接受
 */
void UartInt(void) interrupt 4 using 1
{          // use eram
 if(RI)
 {
  ES0 = 0;
  ramuse = AUXR;     // 保存進入中斷時的ram區間狀態
  ramuse &= 0x03;
  AUXR = 0x00;
  uartbuf = SBUF;
  RI = 0;        // 清中斷標志
  
  CLR_DOG;
  uartbuff[bufwptr] = uartbuf; // 數據寫入緩沖區
  if(bufwptr >= UARTBUFFLEN-1) // 循環緩沖指針
   bufwptr = 0;
  else
   bufwptr++;
  if(bufwptr == bufrptr)   // 未讀數據被覆蓋,讀指針更新到寫指針的上一個單元
   bufrptr = bufwptr + 1;

  AUXR = ramuse;
  ES0 = 1;
 }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合色8888| 日韩精品专区在线影院观看| 久久精品99国产国产精| 亚洲成人tv网| 亚洲成人av电影| 青青青爽久久午夜综合久久午夜| 亚洲香肠在线观看| 五月婷婷综合网| 日本不卡不码高清免费观看| 久久精品国产亚洲aⅴ| 激情综合五月婷婷| 国产.精品.日韩.另类.中文.在线.播放| 久久精品国产一区二区| 国产成人综合网站| 色先锋久久av资源部| 欧美日韩国产精品成人| 欧美va亚洲va香蕉在线| 亚洲国产成人一区二区三区| **欧美大码日韩| 午夜精彩视频在线观看不卡| 蜜臀国产一区二区三区在线播放| 国产一区二区三区免费| 91在线视频播放地址| 欧洲一区在线电影| 日韩精品在线网站| 国产精品欧美一级免费| 一区二区三区免费看视频| 日韩电影一区二区三区四区| 国产a级毛片一区| 在线观看网站黄不卡| 日韩精品一区二区三区视频播放| 国产拍揄自揄精品视频麻豆| 亚洲综合激情小说| 国产一区欧美二区| 欧美视频精品在线| 久久精品一区二区三区不卡 | 欧美一区二区三区人| 久久精品亚洲乱码伦伦中文 | 成人精品小蝌蚪| 欧美精选一区二区| 中文字幕一区二区三区在线播放 | 亚洲视频在线观看三级| 日本不卡一区二区三区| 成人av免费在线观看| 日韩欧美激情在线| 一区二区三区蜜桃网| 国产成人av一区| 日韩一区二区视频在线观看| 亚洲男人电影天堂| 国产suv精品一区二区6| 3751色影院一区二区三区| 亚洲欧洲美洲综合色网| 国产在线精品免费av| 欧美肥妇free| 一区二区免费在线播放| 国产盗摄一区二区三区| 精品日韩成人av| 日本不卡一区二区三区| 91黄色免费版| 亚洲人成精品久久久久久 | 日韩毛片视频在线看| 国产在线一区观看| 欧美电视剧在线看免费| 视频一区二区三区中文字幕| 欧美中文字幕一区| 樱花草国产18久久久久| 99精品欧美一区二区三区综合在线| 亚洲精品一区二区三区99| 麻豆国产精品777777在线| 7777精品伊人久久久大香线蕉 | 欧美精品欧美精品系列| 亚洲曰韩产成在线| 欧美四级电影在线观看| 亚洲成人激情社区| 在线播放视频一区| 青青草原综合久久大伊人精品优势| 欧美日韩国产综合视频在线观看 | 亚洲欧洲美洲综合色网| 菠萝蜜视频在线观看一区| 中文字幕的久久| 99re成人精品视频| 一区二区三区在线看| 91精品1区2区| 午夜私人影院久久久久| 欧美日韩一区二区欧美激情 | 91精品国产综合久久久久久久久久 | 欧美日韩精品电影| 日韩高清不卡一区二区三区| 亚洲裸体在线观看| 色综合久久88色综合天天免费| 亚洲免费电影在线| 欧美日韩一卡二卡三卡| 美国毛片一区二区| 国产日韩欧美一区二区三区综合 | 亚洲激情六月丁香| 欧美精品v国产精品v日韩精品 | 欧美激情综合五月色丁香| 成人一区二区三区中文字幕| 亚洲色图丝袜美腿| 欧美放荡的少妇| 国产精品自拍毛片| 依依成人综合视频| 精品久久一区二区| 色综合久久88色综合天天6| 五月天激情综合网| 国产欧美日韩三级| 欧美日韩亚洲不卡| 国产馆精品极品| 亚洲一二三四在线| 久久亚洲捆绑美女| 欧美性高清videossexo| 激情国产一区二区| 一区二区三区在线不卡| 精品国产一二三区| 欧美图区在线视频| 国产成人精品午夜视频免费| 亚洲成人精品一区| 国产精品不卡一区| 精品久久久久久久久久久久久久久久久 | 亚洲一线二线三线久久久| 欧美tickling网站挠脚心| 91黄视频在线| 成人av电影观看| 加勒比av一区二区| 亚洲一二三区不卡| 国产精品国产精品国产专区不蜜| 欧美日韩国产一级二级| kk眼镜猥琐国模调教系列一区二区| 日韩国产高清影视| 一区二区三区中文字幕在线观看| 久久久777精品电影网影网 | 久久黄色级2电影| 三级在线观看一区二区| 亚洲精品日日夜夜| 中文字幕亚洲精品在线观看| 久久奇米777| 精品国产一区二区国模嫣然| 欧美日韩午夜影院| 欧美在线观看你懂的| 色综合天天性综合| av成人老司机| 99热99精品| av电影在线不卡| 99在线视频精品| av福利精品导航| 99久久精品免费精品国产| 国产激情一区二区三区四区 | 成人免费高清在线| 国产电影一区在线| 成人免费av在线| 成人免费av网站| 91小视频免费看| 91丝袜美腿高跟国产极品老师| www.久久久久久久久| 91理论电影在线观看| 色呦呦一区二区三区| 日本高清不卡aⅴ免费网站| 亚洲精品一区二区三区蜜桃下载| 日韩欧美一级二级| 欧美变态口味重另类| 久久综合色综合88| 国产欧美日韩中文久久| 欧美激情一区二区三区| 国产精品毛片a∨一区二区三区| 国产精品久久久久久久久免费丝袜| 国产精品久久午夜夜伦鲁鲁| 综合久久久久久| 亚洲国产人成综合网站| 青青草精品视频| 国产精品主播直播| 99久久婷婷国产综合精品| 色狠狠av一区二区三区| 欧美一区永久视频免费观看| 欧美电影免费观看完整版| 国产欧美一区二区精品忘忧草| 亚洲视频一区二区在线| 亚洲成a天堂v人片| 黄色精品一二区| 91麻豆免费看片| 日韩精品一区二区三区中文不卡| 久久久久久99久久久精品网站| 国产精品看片你懂得| 香蕉加勒比综合久久| 国产一区二区三区蝌蚪| 色8久久精品久久久久久蜜| 51精品视频一区二区三区| 国产性色一区二区| 亚洲福利电影网| 国产成人三级在线观看| 欧美视频一二三区| 欧美国产激情一区二区三区蜜月| 一区二区三区久久| 国产精品中文字幕一区二区三区| 色中色一区二区| 26uuu亚洲综合色欧美| 亚洲综合免费观看高清完整版在线 | 亚洲欧洲三级电影| 麻豆国产欧美日韩综合精品二区| 99久久精品免费看| 久久这里只有精品视频网|