黛山墨水吧 关注:1贴子:72
  • 10回复贴,共1



IP属地:浙江1楼2014-08-04 11:08回复
    http://www.bilibili.com/video/av5052502/


    IP属地:浙江2楼2016-07-14 12:41
    回复


      IP属地:浙江来自Android客户端4楼2017-02-08 17:03
      回复


        IP属地:浙江8楼2017-05-16 20:46
        回复
          ORG 0000H
          AJMP MAIN
          ORG 0023H //串口中断程序的入口地址
          AJMP RECEIVE //跳转到接收中断入口
          ORG 0030H
          MAIN: MOV TMOD,#20H //T1工作方式2
          MOV TH1,#0FDH ;波特率9600
          MOV SCON,#50H ;传口工作方式1,允许中断接受
          SETB EA ;打开总中断
          SETB ES ;打开串口中断
          SETB TR1 ;打开定时器1
          AJMP $
          RECEIVE:
          CLR RI
          MOV A,SBUF //串口接收数据
          MOV R0,A
          MOV SBUF,A //将接收的数据再传送给计算机
          JNB TI,$
          CLR TI
          MOV A,R0
          MOV P1,A //送LED显示
          RETI
          END


          IP属地:浙江9楼2017-06-03 22:34
          回复
            #include <reg52.h>
            #include<stdio.h>
            void delay1ms()
            {
            unsigned
            int
            i;
            for(i=500000;i>0;i--); //
            延时
            }
            Initial_com()
            {
            TMOD=0x20; //
            定时器
            T1 PCON &= 0xef;
            SCON=0x50;
            TH1=0xfd;
            //
            波特率设置为
            9600
            TL1=0xfd;
            TR1=1; //
            开定时器
            T1
            运行控制位
            }
            main()
            {
            Initial_com();
            while(1)
            {
            SBUF='c';
            while(!TI);
            delay1ms();
            delay1ms();
            TI=0;
            }
            }


            IP属地:浙江10楼2017-06-03 23:03
            回复
              #include <reg52.h>
              unsigned char butter;
              void send();
              void receive();
              void main()
              {
              PCON=0x80;
              SCON=0Xd0;
              TMOD=0X20;
              TH1=0Xfd;
              TL1=0Xfd;
              TR1=1;
              TI=1;
              while(1);
              receive();
              send();
              }
              void send()
              18
              {
              if(TI==1)
              { SBUF=1;
              TI=0;
              }
              }
              void receive()
              {
              if(RI==1)
              {
              ACC=SBUF;
              butter=ACC;
              RI=0;
              }
              }


              IP属地:浙江11楼2017-06-04 09:05
              回复
                #include <reg51.h>
                #include <string.h>
                unsigned char ch;
                bit read_flag= 0 ;
                void init_serialcom( void ) //串口通信初始设定
                {
                SCON = 0x50 ; //UART为模式1,8位数据,允许接收
                TMOD |= 0x20 ; //定时器1为模式2,8位自动重装
                PCON |= 0x80 ; //SMOD=1;
                TH1 = 0xFD ; //Baud:19200 fosc="11".0592MHz
                IE |= 0x90 ; //Enable Serial Interrupt
                TR1 = 1 ; // timer 1 run
                TI=1;
                }
                //向串口发送一个字符
                void send_char_com( unsigned char ch)
                {
                SBUF=ch;
                while (TI== 0);
                TI= 0 ;
                }
                //串口接收中断函数
                void serial () interrupt 4 using 3
                {
                if (RI)
                {
                RI = 0 ;
                ch=SBUF;
                read_flag= 1 ; //就置位取数标志
                }
                }
                main()
                {
                init_serialcom(); //初始化串口
                while ( 1 )
                {
                if (read_flag) //如果取数标志已置位,就将读到的数从串口发出
                {
                read_flag= 0 ; //取数标志清0
                send_char_com(ch);
                }
                }
                }


                IP属地:浙江12楼2017-06-04 09:29
                回复
                  /s/1qYTGeE4
                  dsfs


                  IP属地:浙江13楼2017-06-04 10:08
                  回复
                    void main(void)
                    {
                    serial_port_one_init(); //串口初始化
                    while(1)
                    {
                    if(Data_SIZE == temp_length) //判断数据长度是否满足我们的要求。
                    {
                    for(i=0;i<Wifi_Data_SIZE;i++)
                    {
                    temp[i]=RevBuf[i]; // 同时我们将temp【】作为缓冲区,防止数据被冲到
                    }
                    flished_flag=1; //数据接收成功标志
                    }
                    if(1==flished_flag) // 数据接收完整成功
                    {
                    wifi_flished_flag=0; //
                    //
                    //你想要实现的功能
                    /*
                    switch(temp[1])//我常把数据第一位或前几位作为指令,后几位作为数据,你也可以把整个发送的数据就作为指令。
                    {
                    case 'A' :
                    //具体操作
                    break;
                    }
                    */
                    }
                    }
                    while(1);
                    }
                    同时某些特殊情况,我们会将数据写成:数据头+数据
                    分析数据头,实现其代表的功能
                    上位机中 要在发送数据的最后加上 ‘/n’这个字符
                    用串口工具测试时, 发送数据为:数据+enter键(其代表的是两个字符 /r /n)


                    IP属地:浙江14楼2017-06-04 18:41
                    回复
                      #define Data_SIZE 10 //数据长度 9位数据 + /r/n - /n =10位
                      char RevBuf[Data_SIZE]; //数据接收缓冲区
                      char temp[Data_SIZE]; //防数据抵消缓冲区
                      unsigned char flished_flag=0; //数据接收符合要求标志
                      int data_count=0; //数据长度
                      int temp_length; //数据长度
                      int data_flished_count = 0; //
                      char data_flished; //
                      void UART_one_Interrupt_Receive(void) interrupt 4
                      {
                      uchar temp;
                      if(RI==1)
                      {
                      RI=0;
                      temp=SBUF;
                      // senduart(temp); //用来测试过数据接收是否正确
                      if(temp!='\n') //判断是否接收到结束符
                      {
                      RevBuf[data_count]=temp;// 否,就存到RevBuf【】数组中
                      data_count++;
                      }
                      else
                      {
                      temp_length=data_count;//是,记录其数据长度
                      data_count=0;
                      }
                      }
                      }


                      IP属地:浙江15楼2017-06-04 18:46
                      回复