刘XD 发表于 2025-12-9 10:24:53

求助关于实验箱9.62中简单串口通信实验的问题

大家好,求助一个基础的问题,先谢谢大家。
我在实验教学中发现STC32G12K128的实验箱9.62,在进行串口通信实验时,按下T0,自己板子的P6.7也会亮灭,但是程序中没有这个定义。不知道为啥。
2. 串口本来需要3根线RXD, TXD和GND,但是实验中发现只需要一根线,例如RXD接TXD,甚至RXD接RXD,都能实现串口通信。我刚刚建立的单片机世界观崩塌了。。。。
#include "STC32G.h"

typedef unsigned charu8;
typedef unsigned int   u16;

sbit LED    = P6^7;   //
sbit LED_EN = P4^0;   //
sbit KEY    = P3^4;   //

#define MAIN_Fosc24000000UL
#define BAUD       115200UL
#define BRT (65536UL - MAIN_Fosc / BAUD / 4)

volatile bit rx_flag = 0;
volatile u8rx_data = 0;

//
bit Key_Pressed(void)
{
    static bit key_last = 1;
    bit key_now = KEY;

    if (key_last == 1 && key_now == 0)   //
    {
      key_last = key_now;
      return 1;
    }
    key_last = key_now;
    return 0;
}



//
void UART1_Init2(void)
{
    SCON = 0x50;      //
   T2L = (u8)(BRT & 0xFF);   //
    T2H = (u8)(BRT >> 8);   //
   S1BRT = 1;         //
    T2x12 = 1;         //
    T2R   = 1;         //
    ES= 1;          //
}

//
void UART1_ISR(void) interrupt 4
{
    if (RI)         //
    {

      RI = 0;
      rx_data = SBUF;
      rx_flag = 1;
               
    }

    if (TI)         //
    {
      TI = 0;       //
    }
}

//
void UART1_SendByte(u8 dat)
{
    SBUF = dat;
    while (!TI);
    TI = 0;
}



//---------------- ??? ----------------
void main(void)
{
    WTST = 0;//ÉèÖóÌÐòÖ¸ÁîÑÓʱ²ÎÊý£¬¸³ÖµÎª0¿É½«CPUÖ´ÐÐÖ¸ÁîµÄËÙ¶ÈÉèÖÃΪ×î¿ì
    EAXFR = 1; //À©Õ¹¼Ä´æÆ÷(XFR)·ÃÎÊʹÄÜ
    CKCON = 0; //Ìá¸ß·ÃÎÊXRAMËÙ¶È

    P1M1 = 0x30;   P1M0 = 0x30;   //ÉèÖÃP1.4¡¢P1.5Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀ­µç×èµ½3.3V)
    P2M1 = 0x3c;   P2M0 = 0x3c;   //ÉèÖÃP2.2~P2.5Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀ­µç×èµ½3.3V)
    P3M1 = 0x40;   P3M0 = 0x40;   //ÉèÖÃP3.6Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀ­µç×èµ½3.3V), P3.4,P3.5ÉèÖÃΪÊäÈë¿Ú
    P4M1 = 0x3c;   P4M0 = 0x3c;   //ÉèÖÃP4.2~P4.5Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀ­µç×èµ½3.3V)
    P5M1 = 0x0c;   P5M0 = 0x0c;   //ÉèÖÃP5.2¡¢P5.3Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀ­µç×èµ½3.3V)
    P6M1 = 0x00;   P6M0 = 0xff;   //ÉèÖÃÎªÍÆÍìÊä³ö
    P7M1 = 0x00;   P7M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú

//P3PU = 0x10;            //P3.4,3.5 ʹÄÜÄÚ²¿4.1KÉÏÀ­µç×è

        // LED
    LED_EN = 0;
    LED    = 0;    // ????(?????)

    UART1_Init2();
    EA = 1;      // ????

    while (1)
    {

      if (Key_Pressed())
      {
            UART1_SendByte(0x01);
      }


      if (rx_flag)
      {
            rx_flag = 0;
            if (rx_data == 0x01)
            {
                LED = !LED;   // ???? LED ??
            }
      
      }
    }
}


狂热主宰 发表于 2025-12-10 11:26:50

GND线可保障可靠性
只接一根线只能发或只能收
页: [1]
查看完整版本: 求助关于实验箱9.62中简单串口通信实验的问题