STC89S52RC模拟串口

来源:互联网 发布:掌上电力显示网络问题 编辑:程序博客网 时间:2024/06/05 17:21

我们使用的是P1^4口做发送引脚,P1^5口做接受引脚
auart.h

#include "head.h"#define MODE_QUICK#define F_TM F0#define TIMER0_ENABLE  TL0=TH0; TR0=1;#define TIMER0_DISABLE TR0=0;sbit ACC0= ACC^0;sbit ACC1= ACC^1;sbit ACC2= ACC^2;sbit ACC3= ACC^3;sbit ACC4= ACC^4;sbit ACC5= ACC^5;sbit ACC6= ACC^6;sbit ACC7= ACC^7;sbit BT_SND =P1^4;sbit BT_REC =P1^5;#ifndef _AUART_H_#define _AUART_H_//函数声明void PSendChar(uchar inch);uchar PGetChar(void);bit StartBitOn(void);#endif

auart.c

#include "auart.h"#include "timer.h"//发送一个字符void PSendChar(uchar inch){    #ifdef MODE_QUICK    ACC=inch;    F_TM=0;    BT_SND=0; //start bit    TIMER0_ENABLE; //启动    while(!F_TM);    BT_SND=ACC0; //先送出低位    F_TM=0;    while(!F_TM);    BT_SND=ACC1;    F_TM=0;    while(!F_TM);    BT_SND=ACC2;    F_TM=0;    while(!F_TM);    BT_SND=ACC3;    F_TM=0;    while(!F_TM);    BT_SND=ACC4;    F_TM=0;    while(!F_TM);    BT_SND=ACC5;    F_TM=0;    while(!F_TM);    BT_SND=ACC6;    F_TM=0;    while(!F_TM);    BT_SND=ACC7;    F_TM=0;    while(!F_TM);    BT_SND=1;    F_TM=0;    while(!F_TM);    TIMER0_DISABLE; //停止timer    #else    uchar ii;    ii=0;    F_TM=0;    BT_SND=0; //start bit    TIMER0_ENABLE; //启动    while(!F_TM);    while(ii<8)    {        if(inch&1)        {            BT_SND=1;        }        else        {            BT_SND=0;        }        F_TM=0;        while(!F_TM);        ii++;        inch>>=1;    }    BT_SND=1;    F_TM=0;    while(!F_TM);    #endif    TIMER0_DISABLE; //停止timer}//检查是不是有起始位bit StartBitOn(){    return  (BT_REC==0);}//接收一个字符uchar PGetChar(){    #ifdef MODE_QUICK    TIMER0_ENABLE;    F_TM=0;    while(!F_TM); //等过起始位    ACC0=BT_REC;    TL0=TH0;    F_TM=0;    while(!F_TM);    ACC1=BT_REC;    F_TM=0;    while(!F_TM);    ACC2=BT_REC;    F_TM=0;    while(!F_TM);    ACC3=BT_REC;    F_TM=0;    while(!F_TM);    ACC4=BT_REC;    F_TM=0;    while(!F_TM);    ACC5=BT_REC;    F_TM=0;    while(!F_TM);    ACC6=BT_REC;    F_TM=0;    while(!F_TM);    ACC7=BT_REC;    F_TM=0;    while(!F_TM)    {        if(BT_REC)        {            break;        }    }    TIMER0_DISABLE; //停止timer    return ACC;    #else    uchar rch,ii;    TIMER0_ENABLE;    F_TM=0;    ii=0;    rch=0;    while(!F_TM); //等过起始位    while(ii<8)    {        rch>>=1;        if(BT_REC)        {            rch|=0x80;        }        ii++;        F_TM=0;        while(!F_TM);    }    F_TM=0;    while(!F_TM)    {        if(BT_REC)        {            break;        }    }    TIMER0_DISABLE; //停止timer    return rch;    #endif}
0 0
原创粉丝点击