微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 学单片机不容易呀,自己写的串口程序

学单片机不容易呀,自己写的串口程序

时间:10-02 整理:3721RD 点击:
/*
主要功能
1 按键,串口发出字符串
2 通过调试助手给单片机发字符,单片机将每个字符处理后,返回给调试助手
*/

芯片: AT89C52给大家分享

/*
1?¢°′?ücj1£??μí3í¨1y′??ú·¢3?×?·?′??áμ÷ê??úê?
2?¢í¨1y232??μ¥???ú·¢?í×?·?′?£?μ¥???ú?-1y′|àí£¨?ó0x01£?oó£?·¢?í?áμ÷ê??úê?
3?¢2014-7-9íê3é
*/
#include<reg52.h>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
#define water_h 1
#define water_l 0
#define buf_length 7
sbit cj1=P3^5;
sbit sp=P1^5;
sbit led1=P2^1;
uchar txd_buf[buf_length];
uchar rxd_buf[buf_length];
uchar flag_rxd;
uchar rx_num,tx_num;
uchar num_uart=0;
void delayms(uint);
void delayus(uint);
void txd();
void int_int();
void sendrxd();
void main()
{
        int_int();
        cj1=1;
        while(1)
        {
                if(cj1==0)
                {
                         delayms(500);
                        txd();
                }
                if(flag_rxd==1)
                {
                        flag_rxd=0;
                        sendrxd();
                }
        }
}
void int_int(void)
{
        TMOD=0x20;
        TH1=0xfa;
        TL1=0xfa;
        TR1=1;
        SM0=0;
        SM1=1;
        EA=1;
        ES=1;
        REN=1;
}
void delayms(uint i)
{
        uint x,y;
        for(x=i;x>0;x--)
        {
                for(y=112;y>0;y--);
        }
}
void delayus(uint i)
{
        while(i--);
}
void txd()
{
        uint num;
        txd_buf[0]=0x7b;//?eê???
        txd_buf[1]=0x00;//?¤á?
        txd_buf[2]=0x01;//óD??
        txd_buf[3]=0x00;//ID
        txd_buf[4]=0x00;//ID
        txd_buf[5]=0x00;//?¤á???
        txd_buf[6]=0x7d;//???1??
        SBUF=txd_buf[0];
        ES=0;     //·¢?íμ?ê±oò±?D??è1?±??D??£?·¢?ííê3éoó′ò?a?D??
        for(num=0;num<buf_length;num++)
        {
                SBUF=txd_buf[num];
                delayus(1);
                while(!TI);
                TI=0;
        }
        ES=1;
       
}
void uart() interrupt 4
{
//        RI=0;
        uchar        temp;
        if(RI)                           //?aê??óê?êy?Y
        {
                RI=0;
                temp=SBUF;
                if(temp==0x7b)
                {       
                        rxd_buf[0]=temp;
                }
                else
                {
                        rx_num++;
                        rxd_buf[rx_num]=temp;
//                        rx_num++;
                        if(rx_num>=6&&temp==0x7d)
                        {
                                rx_num=0;
                                flag_rxd=1;
                                return;
                        }
                }               
        }
/*       
        if(TI)
        {
                TI=0;
                tx_num++;
                ES=0;
                SBUF=txd_buf[tx_num];               
                ES=1;
                if(tx_num>7&&SBUF==0x7d)
                {
                        tx_num=0;
                }               
        }
        */        
}
void sendrxd()
{
        uint num;
        /*
        for(num=0;num<buf_length;num++)
        {
                txd_buf[num]=0x00;       
        }
        */
        txd_buf[0]=rxd_buf[0]+0x01;
        txd_buf[1]=rxd_buf[1]+0x01;
        txd_buf[2]=rxd_buf[2]+0x01;
        txd_buf[3]=rxd_buf[3]+0x01;
        txd_buf[4]=rxd_buf[4]+0x01;
        txd_buf[5]=rxd_buf[5]+0x01;
        txd_buf[6]=rxd_buf[6]+0x01;
        ES=0;                                                     //·¢?íμ?ê±oò±?D??è1?±??D??£?·¢?ííê3éoó′ò?a?D??
        for(num=0;num<buf_length;num++)
        {
                SBUF=txd_buf[num];
                delayus(1);
                while(!TI);
                TI=0;
        }
        ES=1;
}

       


顶一个

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top