51单片机 uart_test.c

来源:互联网 发布:赛道狂飙 国家永恒mac 编辑:程序博客网 时间:2024/05/16 11:01
#include <reg52.h>#include "utilities.h"bit frameFlag = 0;bit txdFlag = 0;uint8_t rxdCnt = 0;uint8_t pdata rxdBuf[64];extern void uartAction(uint8_t * buf, uint8_t len);void configUart(uint8_t baud) {    SCON = 0x50;    TMOD &= 0x0F;    TMOD |= 0x20;    TL1 = 256 - 11059200 / 12 / 16 / 2 / baud;    TH1 = TL1;    ET1 = 0;    ES = 1;    //TR1 = 1;}void uartWrite(uint8_t * buf, uint8_t len) {    while (len--) {        txdFlag = 0;        SBUF = *buf++;        while (!txdFlag);    }}uint8_t uartRead(uint8_t * buf, uint8_t len) {    uint8_t i;    if (len > rxdCnt)        len = rxdCnt;    for (i = 0; i < len; i++) {        buf[i] = rxdBuf[i];    }    rxdCnt = 0;    return len;}void uartRxMonitor(uint8_t ms) {    static uint8_t backupCnt = 0;    static uint8_t idleTmr = 0;    if (rxdCnt > 0) {        if (backupCnt != rxdCnt) {            backupCnt = rxdCnt;            idleTmr = 0;        } else {            if (idleTmr < 30) {                idleTmr += ms;                if (idleTmr >= 30)                    frameFlag = 1;            }        }    } else {        backupCnt = 0;    }}void uartDriver() {    uint8_t len;    uint8_t pdata buf[40];    if (frameFlag) {        frameFlag = 0;        len = uartRead(buf, sizeof (buf));        uartAction(buf, len);    }}void uartIntSrv() interrupt 4 {    if (RI) {        RI = 0;        if (rxdCnt < sizeof (rxdBuf)) {            rxdBuf[rxdCnt++] = SBUF;        }    }    if (TI) {        TI = 0;        txdFlag = 1;    }} 

 
0 0
原创粉丝点击