- 打卡等级:初来乍到
- 打卡总天数:1
- 最近打卡:2025-12-09 09:48:57
已绑定手机
新手上路
- 积分
- 25
|
大家好,求助一个基础的问题,先谢谢大家。
我在实验教学中发现STC32G12K128的实验箱9.62,在进行串口通信实验时,按下T0,自己板子的P6.7也会亮灭,但是程序中没有这个定义。不知道为啥。
2. 串口本来需要3根线RXD, TXD和GND,但是实验中发现只需要一根线,例如RXD接TXD,甚至RXD接RXD,都能实现串口通信。我刚刚建立的单片机世界观崩塌了。。。。
#include "STC32G.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit LED = P6^7; //
sbit LED_EN = P4^0; //
sbit KEY = P3^4; //
#define MAIN_Fosc 24000000UL
#define BAUD 115200UL
#define BRT (65536UL - MAIN_Fosc / BAUD / 4)
volatile bit rx_flag = 0;
volatile u8 rx_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 ??
}
}
}
}
|
|