久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3710|回復(fù): 13
打印 上一主題 下一主題
收起左側(cè)

怎么調(diào)試模擬串口?(有帶起始位設(shè)置的串口助手?)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:472235 發(fā)表于 2019-12-18 21:40 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 121212121212123 于 2019-12-18 21:44 編輯



stc15 89c52rc微控制器模擬串行調(diào)試:發(fā)送到串口助手沒問題的,但接收就不行了,有大佬搞這個(gè)嗎??

#include <reg52.h>
#include“ config.h”

sbit PIN_RXD = P1 ^ 2;
比特PIN_TXD = P1 ^ 3;

位RxdEnd = 0;
位RxdOrTxd = 0;
位TxdEnd = 0;

unsigned char RxdBuf = 0;
unsigned charTxdBuf = 0;

void ConfigUART(unsigned int baud);
void StartRXD();
void StartTXD(unsigned char dat);

static unsigned char cnt = 0;

void main()
{
        EA = 1;
        ConfigUART(9600);

        while(1)
        {
                led1 = 0;
                while(PIN_RXD);
                led2 = 0;
                StartRXD();
                while(!RxdEnd);
                StartTXD(RxdBuf);
                while(!TxdEnd);
        }

}
void ConfigUART(unsigned int baud)
{
        TMOD&= 0xF0;
        TMOD | = 0x01;
        TH0 = 256-(11059200/12)/波特;
}
void StartRXD()
{
        TL0 = TH0;
        ET0 = 1;
        TR0 = 1;
        RxdEnd = 0;
        RxdOrTxd = 0;
}
void StartTXD(unsigned char dat)
{
        TxdBuf = dat;
        TL0 = TH0;
        ET0 = 1;
        TR0 = 1;
        PIN_TXD = 0;
        TxdEnd = 0;
        RxdOrTxd = 1;
}
void InterruptTimer0()中斷1
{                 
// uint8 i;
//
//                 
// TH0 = 256-(11059200/12)/ 9600;
// TL0 = TH0;
//
// i ++;
// if(i == 10){
// i = 0;
// led4 =〜led4;
//}
                led3 = 0;

        if(RxdOrTxd)
        {//發(fā)送
                cnt ++;
                if(cnt <= 8)
                {
                                                
                                                                                                
                        PIN_TXD = TxdBuf&0x01;
                        TxdBuf >> = 1;
                }
                else if(cnt == 9)
                {
                         PIN_TXD = 1;
                }
                else
                {
                        cnt = 0;
                        TR0 = 0;
                        TxdEnd = 1;
                }
        }
        else            
        {
                if(cnt == 0)
                {
                        if(!PIN_RXD)
                        {
                                RxdBuf = 0;
                                cnt ++;
                        }
                        else
                        {
                                TR0 = 0;
                        }
                }
                if(cnt <= 8)
                                {                 
                                                led4 = 0;
                        RxdBuf >> = 1;            
                        if(PIN_RXD)
                        {
                                RxdBuf | = 0x80;
                        }
                        cnt ++;
                }
                其他
                {
                        cnt = 0;
                        TR0 = 0;
                        if(PIN_RXD)
                        {
                                RxdEnd = 1;
                        }
                }
        }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:213173 發(fā)表于 2019-12-19 11:04 | 只看該作者
STC有模擬串口的官方范例程序:
  1. /*---------------------------------------------------------------------*/
  2. /* --- STC MCU Limited ------------------------------------------------*/
  3. /* --- STC15Fxx 系列 軟件模擬串口舉例----------------------------------*/
  4. /* --- Mobile: (86)13922805190 ----------------------------------------*/
  5. /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
  6. /* --- Tel: 86-0513-55012928,55012929,55012966-------------------------*/
  7. /* --- Web: www.STCMCU.com --------------------------------------------*/
  8. /* --- Web: www.GXWMCU.com --------------------------------------------*/
  9. /* 如果要在程序中使用此代碼,請(qǐng)?jiān)诔绦蛑凶⒚魇褂昧薙TC的資料及程序        */
  10. /* 如果要在文章中應(yīng)用此代碼,請(qǐng)?jiān)谖恼轮凶⒚魇褂昧薙TC的資料及程序        */
  11. /*---------------------------------------------------------------------*/

  12. //本示例在Keil開發(fā)環(huán)境下請(qǐng)選擇Intel的8058芯片型號(hào)進(jìn)行編譯
  13. //若無特別說明,工作頻率一般為11.0592MHz


  14. #include "reg51.h"

  15. //-----------------------------------------
  16. //define baudrate const
  17. //BAUD = 65536 - FOSC/3/BAUDRATE/M (1T:M=1; 12T:M=12)
  18. //NOTE: (FOSC/3/BAUDRATE) must be greater then 98, (RECOMMEND GREATER THEN 110)

  19. //#define BAUD  0xF400                  // 1200bps @ 11.0592MHz
  20. //#define BAUD  0xFA00                  // 2400bps @ 11.0592MHz
  21. //#define BAUD  0xFD00                  // 4800bps @ 11.0592MHz
  22. //#define BAUD  0xFE80                  // 9600bps @ 11.0592MHz
  23. //#define BAUD  0xFF40                  //19200bps @ 11.0592MHz
  24. #define BAUD  0xFFA0                    //38400bps @ 11.0592MHz

  25. //#define BAUD  0xEC00                  // 1200bps @ 18.432MHz
  26. //#define BAUD  0xF600                  // 2400bps @ 18.432MHz
  27. //#define BAUD  0xFB00                  // 4800bps @ 18.432MHz
  28. //#define BAUD  0xFD80                  // 9600bps @ 18.432MHz
  29. //#define BAUD  0xFEC0                  //19200bps @ 18.432MHz
  30. //#define BAUD    0xFF60                //38400bps @ 18.432MHz

  31. //#define BAUD  0xE800                  // 1200bps @ 22.1184MHz
  32. //#define BAUD  0xF400                  // 2400bps @ 22.1184MHz
  33. //#define BAUD  0xFA00                  // 4800bps @ 22.1184MHz
  34. //#define BAUD  0xFD00                  // 9600bps @ 22.1184MHz
  35. //#define BAUD  0xFE80                  //19200bps @ 22.1184MHz
  36. //#define BAUD  0xFF40                  //38400bps @ 22.1184MHz
  37. //#define BAUD  0xFF80                  //57600bps @ 22.1184MHz

  38. sfr AUXR = 0x8E;
  39. sbit RXB = P3^0;                        //define UART TX/RX port
  40. sbit TXB = P3^1;

  41. typedef bit BOOL;
  42. typedef unsigned char BYTE;
  43. typedef unsigned int WORD;

  44. BYTE TBUF,RBUF;
  45. BYTE TDAT,RDAT;
  46. BYTE TCNT,RCNT;
  47. BYTE TBIT,RBIT;
  48. BOOL TING,RING;
  49. BOOL TEND,REND;

  50. void UART_INIT();

  51. BYTE t, r;
  52. BYTE buf[16];

  53. void main()
  54. {
  55.     TMOD = 0x00;                        //timer0 in 16-bit auto reload mode
  56.     AUXR = 0x80;                        //timer0 working at 1T mode
  57.     TL0 = BAUD;
  58.     TH0 = BAUD>>8;                      //initial timer0 and set reload value
  59.     TR0 = 1;                            //tiemr0 start running
  60.     ET0 = 1;                            //enable timer0 interrupt
  61.     PT0 = 1;                            //improve timer0 interrupt priority
  62.     EA = 1;                             //open global interrupt switch

  63.     UART_INIT();

  64.     while (1)
  65.     {                                   //user's function
  66.         if (REND)
  67.         {
  68.             REND = 0;
  69.             buf[r++ & 0x0f] = RBUF;
  70.         }
  71.         if (TEND)
  72.         {
  73.             if (t != r)
  74.             {
  75.                 TEND = 0;
  76.                 TBUF = buf[t++ & 0x0f];
  77.                 TING = 1;
  78.             }
  79.         }
  80.     }
  81. }

  82. //-----------------------------------------
  83. //Timer interrupt routine for UART

  84. void tm0() interrupt 1
  85. {
  86.     if (RING)
  87.     {
  88.         if (--RCNT == 0)
  89.         {
  90.             RCNT = 3;                   //reset send baudrate counter
  91.             if (--RBIT == 0)
  92.             {
  93.                 RBUF = RDAT;            //save the data to RBUF
  94.                 RING = 0;               //stop receive
  95.                 REND = 1;               //set receive completed flag
  96.             }
  97.             else
  98.             {
  99.                 RDAT >>= 1;
  100.                 if (RXB) RDAT |= 0x80;  //shift RX data to RX buffer
  101.             }
  102.         }
  103.     }
  104.     else if (!RXB)
  105.     {
  106.         RING = 1;                       //set start receive flag
  107.         RCNT = 4;                       //initial receive baudrate counter
  108.         RBIT = 9;                       //initial receive bit number (8 data bits + 1 stop bit)
  109.     }

  110.     if (--TCNT == 0)
  111.     {
  112.         TCNT = 3;                       //reset send baudrate counter
  113.         if (TING)                       //judge whether sending
  114.         {
  115.             if (TBIT == 0)
  116.             {
  117.                 TXB = 0;                //send start bit
  118.                 TDAT = TBUF;            //load data from TBUF to TDAT
  119.                 TBIT = 9;               //initial send bit number (8 data bits + 1 stop bit)
  120.             }
  121.             else
  122.             {
  123.                 TDAT >>= 1;             //shift data to CY
  124.                 if (--TBIT == 0)
  125.                 {
  126.                     TXB = 1;
  127.                     TING = 0;           //stop send
  128.                     TEND = 1;           //set send completed flag
  129.                 }
  130.                 else
  131.                 {
  132.                     TXB = CY;           //write CY to TX port
  133.                 }
  134.             }
  135.         }
  136.     }
  137. }

  138. //-----------------------------------------
  139. //initial UART module variable

  140. void UART_INIT()
  141. {
  142.     TING = 0;
  143.     RING = 0;
  144.     TEND = 1;
  145.     REND = 0;
  146.     TCNT = 0;
  147.     RCNT = 0;
  148. }

復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

板凳
ID:472235 發(fā)表于 2019-12-19 22:45 | 只看該作者
wulin 發(fā)表于 2019-12-19 11:04
STC有模擬串口的官方范例程序:

謝謝了哈,馬上去試下
回復(fù)

使用道具 舉報(bào)

地板
ID:472235 發(fā)表于 2019-12-19 23:27 | 只看該作者
wulin 發(fā)表于 2019-12-19 11:04
STC有模擬串口的官方范例程序:

它的芯片好像不是89C52RC的,是intel 8058的,變量太多了
回復(fù)

使用道具 舉報(bào)

5#
ID:213173 發(fā)表于 2019-12-20 06:41 | 只看該作者
121212121212123 發(fā)表于 2019-12-19 23:27
它的芯片好像不是89C52RC的,是intel 8058的,變量太多了

不是intel 8058,只是在Keil開發(fā)環(huán)境下選擇Intel的8058芯片型號(hào)進(jìn)行編譯。其差別是增加1個(gè)寄存器地址
sfr AUXR = 0x8E;  STC公司的1T芯片才有此特殊功能寄存器,
實(shí)驗(yàn)是STC15Fxx。這個(gè)程序51核心的芯片都可以用,89C52RC沒有AUXR寄存器,只要比特率不是太高,不影響對(duì)定時(shí)器的操作。
回復(fù)

使用道具 舉報(bào)

6#
ID:213173 發(fā)表于 2019-12-20 11:13 | 只看該作者
121212121212123 發(fā)表于 2019-12-19 23:27
它的芯片好像不是89C52RC的,是intel 8058的,變量太多了

給你改成適合STC89C52RC的模擬串口程序,最高波特率1200,最大數(shù)據(jù)串16給字節(jié)。
  1. #include "reg51.h"

  2. typedef unsigned char uchar;
  3. typedef unsigned int uint;

  4. sbit RXB = P3^0;         //定義UART TX/RX端口
  5. sbit TXB = P3^1;

  6. uchar TBUF,RBUF;
  7. uchar TDAT,RDAT;
  8. uchar TCNT,RCNT;
  9. uchar TBIT,RBIT;
  10. bit TING,RING;
  11. bit TEND,REND;
  12. uchar t, r;
  13. uchar buf[16];

  14. //初始UART模塊
  15. void UART_INIT()
  16. {
  17.         TING = 0;
  18.         RING = 0;
  19.         TEND = 1;
  20.         REND = 0;
  21.         TCNT = 0;
  22.         RCNT = 0;
  23.         TMOD = 0x02;   //8位自動(dòng)重載12T模式
  24.         TL1 = 0xE8;                //設(shè)定定時(shí)初值(波特率1200)
  25.         TH1 = 0xE8;                //設(shè)定定時(shí)器重裝值
  26. //        TMOD = 0x00;   // 16位自動(dòng)重載模式中的Time0
  27. //        AUXR = 0x80;   // 1T工作模式
  28. //        TL0 = BAUD;
  29. //        TH0 = BAUD>>8; // 初始Time0和設(shè)置重載值
  30.         TR0  = 1;      // tiemr0開始運(yùn)行
  31.         ET0  = 1;      // 啟用Time0中斷
  32.         PT0  = 1;      // 提高定時(shí)中斷優(yōu)先級(jí)
  33.         EA   = 1;      // 打開全局中斷開關(guān)
  34. }
  35. //
  36. void main()
  37. {
  38.         UART_INIT();   //初始UART模塊
  39.         while (1)
  40.         {              //用戶功能
  41.                 if (REND)   //接收完成標(biāo)志為真
  42.                 {
  43.                         REND = 0;//接收完成標(biāo)志清0
  44.                         buf[r++ & 0x0f] = RBUF;//保存在緩存中
  45.                 }
  46.                 if (TEND)
  47.                 {
  48.                         if (t != r)
  49.                         {
  50.                                 TEND = 0;
  51.                                 TBUF = buf[t++ & 0x0f];//發(fā)送緩存中數(shù)據(jù)
  52.                                 TING = 1;
  53.                         }
  54.                 }
  55.         }
  56. }
  57. //UART定時(shí)器中斷例程
  58. void tm0() interrupt 1 using 1
  59. {
  60.         if (RING)
  61.         {
  62.                 if (--RCNT == 0)
  63.                 {
  64.                         RCNT = 3;                   //重置發(fā)送波特率計(jì)數(shù)器
  65.                         if (--RBIT == 0)
  66.                         {
  67.                                 RBUF = RDAT;            //將數(shù)據(jù)保存到RBUF
  68.                                 RING = 0;               //停止接收
  69.                                 REND = 1;               //設(shè)置接收完成標(biāo)志
  70.                         }
  71.                         else
  72.                         {
  73.                                 RDAT >>= 1;
  74.                                 if (RXB) RDAT |= 0x80;  //將RX數(shù)據(jù)轉(zhuǎn)換為RX緩沖區(qū)
  75.                         }
  76.                 }
  77.         }
  78.         else if (!RXB)
  79.         {
  80.                 RING = 1;                       //設(shè)置開始接收標(biāo)志
  81.                 RCNT = 4;                       //初始接收波特率計(jì)數(shù)器
  82.                 RBIT = 9;                       //initial receive bit number (8 data bits + 1 stop bit)
  83.         }                                                                                          //初始接收比特?cái)?shù)(8個(gè)數(shù)據(jù)位+ 1個(gè)停止位)
  84.         if (--TCNT == 0)
  85.         {
  86.                 TCNT = 3;                       //重置發(fā)送波特率計(jì)數(shù)器
  87.                 if (TING)                       //判斷是否發(fā)送
  88.                 {
  89.                         if (TBIT == 0)
  90.                         {
  91.                                 TXB = 0;                //發(fā)送起始位
  92.                                 TDAT = TBUF;            //加載數(shù)據(jù) TBUF 到 TDAT
  93.                                 TBIT = 9;               //initial send bit number (8 data bits + 1 stop bit)
  94.                         }                                                                        //初始發(fā)送比特?cái)?shù)(8個(gè)數(shù)據(jù)位+ 1個(gè)停止位)
  95.                         else
  96.                         {
  97.                                 TDAT >>= 1;             //將數(shù)據(jù)轉(zhuǎn)換到CY
  98.                                 if (--TBIT == 0)
  99.                                 {
  100.                                         TXB = 1;
  101.                                         TING = 0;           //停止發(fā)送
  102.                                         TEND = 1;           //設(shè)置發(fā)送完成標(biāo)志
  103.                                 }
  104.                                 else
  105.                                 {
  106.                                         TXB = CY;           //將CY寫入TX端口
  107.                                 }
  108.                         }
  109.                 }
  110.         }
  111. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

7#
ID:472235 發(fā)表于 2019-12-20 14:56 | 只看該作者
wulin 發(fā)表于 2019-12-20 11:13
給你改成適合STC89C52RC的模擬串口程序,最高波特率1200,最大數(shù)據(jù)串16給字節(jié)。

我拷過去了,但它會(huì)亂碼,而且有時(shí)發(fā)一次,返回幾十個(gè)數(shù)據(jù)
回復(fù)

使用道具 舉報(bào)

8#
ID:213173 發(fā)表于 2019-12-20 17:12 | 只看該作者
121212121212123 發(fā)表于 2019-12-20 14:56
我拷過去了,但它會(huì)亂碼,而且有時(shí)發(fā)一次,返回幾十個(gè)數(shù)據(jù)

這個(gè)程序是在STC89C52RC實(shí)驗(yàn)板驗(yàn)證過的,波特率1200。
回復(fù)

使用道具 舉報(bào)

9#
ID:213173 發(fā)表于 2019-12-20 17:14 | 只看該作者
121212121212123 發(fā)表于 2019-12-20 14:56
我拷過去了,但它會(huì)亂碼,而且有時(shí)發(fā)一次,返回幾十個(gè)數(shù)據(jù)

晶振11.0592MHz
回復(fù)

使用道具 舉報(bào)

10#
ID:472235 發(fā)表于 2019-12-21 20:51 | 只看該作者

先謝謝大佬,我用之前找到的代碼跑成功了,現(xiàn)在在想兩字節(jié)的串口通信,用的是這個(gè)代碼:

#include<reg52.h>
sbit PIN_RXD = P3^0;
sbit PIN_TXD = P3^1;
bit RxdEnd = 0;
bit RxdOrTxd = 0;
bit TxdEnd = 0;
unsigned char RxdBuf = 0;
unsigned char TxdBuf = 0;
void ConfigUART(unsigned int baud);
void StartRXD();
void StartTXD(unsigned char dat);
void main()
{
        EA = 1;
        ConfigUART(9600);
      
        while(1)
        {
                while(PIN_RXD);
                StartRXD();
                while(!RxdEnd);
                StartTXD(RxdBuf);
                while(!TxdEnd);
        }
      
}
void ConfigUART(unsigned int baud)
{
        TMOD &= 0xF0;
        TMOD |= 0x02;
        TH0 = 256 - (11059200/12)/baud;
}
void StartRXD()
{
        TL0 = 256 - ((256 - TH0)>>1)+4;//之所以加4是因?yàn)閷?shí)地測(cè)試發(fā)送數(shù)據(jù)還行,但接收數(shù)據(jù)誤差率太大,估計(jì)是51速度太慢,中斷中語句太多,當(dāng)波特率低于9600時(shí)可不加4,波特率等于9600則加3以上
        ET0 = 1;
        TR0 = 1;
        RxdEnd = 0;
        RxdOrTxd = 0;
}
void  StartTXD(unsigned char dat)
{
        TxdBuf = dat;
        TL0 = TH0;
        ET0 = 1;
        TR0 = 1;
        PIN_TXD = 0;
        TxdEnd = 0;
        RxdOrTxd = 1;
}
void InterruptTimer0() interrupt 1
{
        static unsigned char cnt = 0;
        if(RxdOrTxd)
        {
                cnt++;
                if(cnt <= 8)
                {
                        PIN_TXD = TxdBuf & 0x01;
                        TxdBuf >>= 1;
                }
                else if(cnt == 9)
                {
                         PIN_TXD = 1;
                }
                else
                {
                        cnt = 0;
                        TR0 = 0;
                        TxdEnd = 1;
                }
        }
        else
        {
                if(cnt == 0)
                {
                        if(!PIN_RXD)
                        {
                                RxdBuf = 0;
                                cnt++;
                        }
                        else
                        {
                                TR0 = 0;
                        }
                }
                else if(cnt <= 8)
                {
                        RxdBuf >>= 1;            
                        if(PIN_RXD)
                        {
                                RxdBuf |= 0x80;
                        }
                        cnt++;
                }
                else
                {
                        cnt = 0;
                        TR0 = 0;
                        if(PIN_RXD)
                        {
                                RxdEnd = 1;
                        }
                }
        }
}
回復(fù)

使用道具 舉報(bào)

11#
ID:472235 發(fā)表于 2019-12-21 20:51 | 只看該作者

如果要實(shí)現(xiàn)兩個(gè)字節(jié)的模擬串口通信,會(huì)不會(huì)難度很大??
回復(fù)

使用道具 舉報(bào)

12#
ID:472235 發(fā)表于 2019-12-21 21:22 | 只看該作者

謝謝大佬,都搞定了
回復(fù)

使用道具 舉報(bào)

13#
ID:472235 發(fā)表于 2019-12-21 21:24 | 只看該作者
STC89C52RC 雙字節(jié)兩次傳輸串口通信模擬(可擴(kuò)展多字節(jié)):
#include<reg52.h>
#include "config.h"
#include "lcd1602.h"

sbit PIN_RXD = P3^0;
sbit PIN_TXD = P3^1;

bit RxdEnd = 0;
bit RxdOrTxd = 0;
bit TxdEnd = 0;

unsigned int RxdBuf = 0;
unsigned int TxdBuf = 0;

void ConfigUART(unsigned int baud);
void StartRXD();
void StartTXD(unsigned char dat);

unsigned char *p;
//unsigned char *p2;
unsigned char buff[3];
//unsigned char buff2[2];
unsigned char key;
unsigned char i = 0;

void main()
{
        EA = 1;
        ConfigUART(9600);
      
        while(1)
        {
                                led1 = ~led1;
                                while(PIN_RXD);        //0低電平進(jìn)入
                while(key <= 1){        //key = 0,下一次key = 1;
                                        while(PIN_RXD);
                        StartRXD();
                        while(!RxdEnd);
                                        key++;                        //高電平時(shí)間
                                }
                                led3 = ~led3;
                                key = 0;
                                for(i = 0;i<=1;i++){
                                        StartTXD(buff[i]);
                                        while(!TxdEnd);
                                }                              
                                p = buff;
                                Lcd1602_Init();
                                Lcd1602_Show_String(1,1,p);
                       

        }
      
}
void ConfigUART(unsigned int baud)
{
        TMOD &= 0xF0;
        TMOD |= 0x02;
        TH0 = 256 - (11059200/12)/baud;
}
void StartRXD()
{
        TL0 = 256 - ((256 - TH0)>>1)+20;//之所以加4是因?yàn)閷?shí)地測(cè)試發(fā)送數(shù)據(jù)還行,但接收數(shù)據(jù)誤差率太大,估計(jì)是51速度太慢,中斷中語句太多,當(dāng)波特率低于9600時(shí)可不加4,波特率等于9600則加3以上
        ET0 = 1;
        TR0 = 1;
        RxdEnd = 0;
        RxdOrTxd = 0;
}
void  StartTXD(unsigned char dat)
{
        TxdBuf = dat;
        TL0 = TH0;
        ET0 = 1;
        TR0 = 1;
        PIN_TXD = 0;
        TxdEnd = 0;
        RxdOrTxd = 1;
}
void InterruptTimer0() interrupt 1
{
        static unsigned char cnt = 0;
        if(RxdOrTxd)
        {
                cnt++;
                if(cnt <= 8)
                {
                        PIN_TXD = TxdBuf & 0x01;
                        TxdBuf >>= 1;
                }
                else if(cnt == 9)
                {
                         PIN_TXD = 1;
                }
                else
                {
                               led4 = ~led4;
                                            cnt = 0;
                        TR0 = 0;
                        TxdEnd = 1;
                }
        }
        else
        {
                if(cnt == 0)
                {
                        if(!PIN_RXD)
                        {
                                RxdBuf = 0;
                                cnt++;
                        }
                        else
                        {
                                TR0 = 0;
                        }
                }
                else if(cnt <= 8)
                {
                        RxdBuf >>= 1;            
                        if(PIN_RXD)
                        {
                                RxdBuf |= 0x80;
                        }
                        cnt++;
                }
                else
                {
                                                if(key == 0){
                                                    buff[0] = RxdBuf;
                                                }else if(key == 1){
                                                        buff[1] = RxdBuf;
                                                        buff[2] = '\0';       
                                                }
                                               
//                                                buff[1] = '\0';
                        cnt = 0;
                        TR0 = 0;
                        if(PIN_RXD)         //當(dāng)兩個(gè)字節(jié)發(fā)送時(shí),存不存在不為高電平?
                        {
                                led2 = ~led2;
                                                                RxdEnd = 1;
                        }
                }
        }
}
回復(fù)

使用道具 舉報(bào)

14#
ID:284226 發(fā)表于 2023-5-11 20:53 | 只看該作者
樓主。太厲害了,我也在看。你那個(gè)看懂了?    發(fā)送時(shí),PIN_TXD = TxdBuf & 0x01;為什么先要&這個(gè)一步,還有接收時(shí)
RXDBuf |=0x80;為什么要走這一步呢
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 97精品超碰一区二区三区 | 久久久成人免费视频 | 久久久精品一区二区三区 | 欧美黄色网 | 在线第一页| 99国产精品99久久久久久 | 国产高清免费视频 | 精品国产91 | 欧美一级欧美三级在线观看 | 国产成人99久久亚洲综合精品 | 日韩精品免费一区 | 久久国产精品精品国产色婷婷 | 天天夜天天操 | 国产精品久久久久一区二区三区 | 午夜影院在线免费观看视频 | 羞羞视频在线网站观看 | 久视频在线 | 插插插干干干 | 日韩av在线一区二区 | 夜夜爽99久久国产综合精品女不卡 | 亚洲高清视频一区二区 | www成人免费 | 一区二区三区日韩 | 国产精品高潮呻吟久久 | 天天色天天射天天干 | 日韩久久久久久 | av黄色免费在线观看 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | 妖精视频一区二区三区 | 色综合色综合色综合 | 成人黄色av | yeyeav| 久久国产日本 | 国产黄色网址在线观看 | 欧美aaa级 | 91欧美精品成人综合在线观看 | 成人午夜免费视频 | 久热国产在线 | 精品国产一区二区三区久久狼黑人 | 国产精品久久久久久久 | 欧美中文字幕在线 |