⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 moni_uart1_send.c

📁 51单片机的模拟串口程序
💻 C
字号:
#include "at89x52.h"
#define NUM    21                    
        //要发送的串长度

sbit BT_SND =P2^1;
sbit BT_REC =P2^0;

unsigned char buffer[10]={0,0,0,0,0,0,0,0,0,1};    //比特位数组
unsigned char senddata[NUM];    //要发送的字符串
unsigned char BIT_IP=0;    //比特位指针
unsigned char DAT_IP=0;    //数据指针
unsigned char FillOK=0; //数据填充完成
unsigned char SendOK=1; //数据发送完成
unsigned char OK=0;    //定时器中断到

void FillBuf(unsigned char out)
{    
    unsigned char i,test,da;
    da=out;
    for(i=0;i<8;i++)
    {
        test=1;
        test=test&da;
        if(test) buffer[i+1]=1;
        else     buffer[i+1]=0;
        da=da>>1;
        test=1;
    }
    FillOK=1;
}

void InitTIM(void)
{
    TMOD=0X02;            
    TH0=0XA0;TL0=0XA0;        //11.0592MHZ--9600bps
    ET0=1;EA=1;
    TR0=1;TF0=0;
}

void main()
{
    unsigned char i;
    for(i=0;i<NUM;i++)    senddata[i]=0X41+i;
    InitTIM();
    for(;;)
    {
        if((BIT_IP==0) & (SendOK==1) & (FillOK==0))    //一个字符已发送完填入下一字符到比特数组
        {
            FillBuf(senddata[DAT_IP]);
            DAT_IP++;
            if(DAT_IP==(NUM-1)) DAT_IP=0;
        }
        if(OK)            //定时器中断溢出发送一位数据
        {
            if(FillOK & (BIT_IP!=10))
            {
                BT_SND=buffer[BIT_IP];
                BIT_IP++;
                SendOK=0;
            }
            if(BIT_IP==10)    //十位比特已发送完毕
            {
                FillOK=0;
                BIT_IP=0;
                SendOK=1;
            }            
            OK=0;
        }
    }
}

void IntTimer0() interrupt 1
{
    OK=1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -