1. Principle Introduction
51 MCU There is a full-duplex serial interface inside. What is a full-duplex serial port? Generally speaking, a serial port that can only receive or send is called a simplex serial port; a serial port that can both receive and send, but not at the same time, is called a half-duplex serial port; a serial port that can receive and send at the same time is called a full-duplex serial port. Serial communication refers to a communication method in which data is transmitted one bit at a time in sequence. Its outstanding advantage is that it only requires one transmission line, which can greatly reduce hardware costs and is suitable for long-distance communication. Its disadvantage is that the transmission speed is low.
As before, let's first understand the registers related to the microcontroller serial port.
SBUF register: It is two physically independent receiving and transmitting buffers, which can send and receive data at the same time. The operation on the receiving buffer or the transmitting buffer can be distinguished by reading and writing instructions on SBUF. Thus, two independent external receiving and transmitting signal lines RXD (P3.0) and TXD (P3.1) can be controlled to send and receive data at the same time, realizing full-duplex.
Serial port control register SCON (see Table 1).
Table 1 SCON register
The meanings of each bit in the table (from left to right, from high to low) are as follows.
SM0 and SM1: Serial port working mode control bits, their definitions are shown in Table 2.
Table 2 Serial port working mode control bits
Among them, fOSC is the clock frequency of the microcontroller; the baud rate refers to the number of bits sent (or received) per second by the serial port.
SM2: Multi-machine communication control bit. This is only used for multi-machine communication in mode 2 and mode 3. The transmitter SM2 = 1 (program control setting is required). The serial port of the receiver works in mode 2 or 3. When SM2 = 1, only when the 9th data bit (RB8) is 1, the first 8 bits of data received are sent to SBUF, and RI is set to issue an interrupt request to trigger a serial reception interrupt, otherwise the received data will be abandoned. When SM2 = 0, regardless of whether the data bit is 0 or 1, the data will be sent to SBUF, and RI will be set to issue an interrupt request. When working in mode 0, SM2 must be 0.
REN: Serial receive enable bit: When REN = 0, reception is prohibited; when REN = 1, reception is allowed.
TB8: In modes 2 and 3, TB8 is the 9th bit of data to be sent by the transmitter. In multi-machine communication, it represents the address or data to be transmitted. When TB8=0, it is data, and when TB8=1, it is address.
RB8: In modes 2 and 3, RB8 is the 9th bit of data received by the receiver, which happens to come from TB8 of the transmitter, thereby identifying the characteristics of the received data.
TI: Serial port sends interrupt request flag. When the CPU has sent a serial data, the SBUF register is empty, and the hardware sets TI to 1 to request an interrupt. After the CPU responds to the interrupt, the software clears TI.
RI: Serial port receive interrupt request flag. When the serial port receives a frame of serial data, the SBUF register is full, and the hardware sets RI to 1 to request an interrupt. After the CPU responds to the interrupt, the software clears RI.
Power control register PCON (see Table 3).
Table 3 PCON register
The meanings of each bit in the table (from left to right, from high to low) are as follows.
SMOD: Baud rate doubling bit. SMOD=1, when the serial port works in mode 1, 2, or 3, the baud rate is doubled. SMOD=0, the baud rate remains unchanged.
GF1, GF0: general flag bits.
PD (PCON.1): Power-down mode bit. When PD=1, it enters power-down mode.
IDL (PCON.0): Standby mode bit. When IDL=1, enter the standby mode.
Other registers related to the serial port include the timer-related registers and interrupt registers described in the previous article. The timer register is used to set the baud rate. The ES bit in the interrupt enable register IE is also used as the serial I/O interrupt enable bit. When ES = 1, serial I/O interrupts are enabled; when ES = 0, serial I/O interrupts are disabled. The PS bit in the interrupt priority register IP is used as the serial I/O interrupt priority control bit. When PS = 1, it is set to high priority; when PS = 0, it is set to low priority. [page]
Baud rate calculation: After understanding the serial port related registers, we can draw some conclusions about its communication baud rate:
① The baud rates of Mode 0 and Mode 2 are fixed.
In mode 0, the baud rate is 1/12 of the clock frequency, that is, fOSC/12, and is fixed.
In mode 2, the baud rate depends on the SMOD value in PCON, that is, the baud rate is:
When SMOD=0, the baud rate is fosc/64; when SMOD=1, the baud rate is fosc/32.
② The baud rate of mode 1 and mode 3 is variable and is determined by the overflow rate of timer 1.
When timer T1 is used as a baud rate generator, the working mode 2 of automatic reloading of the initial value of the timer is usually selected (Note: do not confuse the working mode of the timer with the working mode of the serial port). Its counting structure is 8 bits. Assuming that the initial value of the count is Count and the machine cycle of the microcontroller is T, the timing time is (256?Count)×T. Therefore, the number of overflows within 1s (i.e., the overflow rate) can be expressed by formula (1):
Therefore, the baud rate calculation formula is shown in formula (2):
In practical applications, the baud rate is usually determined first, and then the initial value of T1 is calculated based on the baud rate. Therefore, equation (2) can be written as:
2. Circuit Detail
The circuit shown in Figure 1 is described in detail below.
Figure 1 Serial communication experiment circuit diagram
[page]
The minimum system part (clock circuit, reset circuit, etc.) has been discussed in the first lecture, so it will not be described here. Let's focus on the RS-232 interface circuit for communicating with the computer. As you can see, in the circuit diagram, there are two receiving and sending indicator status lights, TXD and RXD. In addition, a chip called MAX3232 is used. What is it used to achieve? First of all, we need to know that the serial port on the computer is a serial interface with the RS-232 standard, and the RS-232 standard defines its electrical characteristics: the high-level "1" signal voltage range is -15V~-3V, and the low-level "0" is 0.
The signal voltage ranges from +3V to +15V. Some readers may ask why it has such electrical characteristics? This is because high and low levels are represented by opposite voltages, with a voltage difference of at least 6V, which greatly improves the reliability of data transmission. Since the pin level of the microcontroller is TTL, the first thing to solve when the microcontroller communicates with the RS-232 standard serial port is the level conversion problem. Generally speaking, some professional integrated circuit chips can be selected, such as the MAX3232 in the figure. The MAX3232 chip integrates a voltage multiplier circuit, and the level conversion can be completed with a single power supply. It also has a wide operating voltage range and can work normally between 3V and 5.5V. Its typical application is shown in the figure. The capacitor connected to its periphery has an impact on the transmission rate. In the test kit, 0.1μF is used.
It is worth mentioning that the MAX3232 chip has two pairs of level conversion circuits. Only one circuit is used in the figure, so the other circuit is wasted. In some cases, the two circuits can be connected in parallel to obtain stronger driving anti-interference ability. In addition, it is necessary to understand the pin structure of the DB-9 type RS-232 connected to the computer in the figure (see Figure 2).
Figure 2 DB-9 connector interface diagram
The pin definitions are as follows (see Table 4).
Table 4 DB-9 interface pin definition
3. Programming
The design example program of this lecture is as follows:
#include "AT89X52.h" (1)
void Init_Com(void) ( 2)
{
TMOD = 0x20; ( 3)
PCON = 0x00; ( 4)
SCON = 0x50; ( 5)
TH1 = 0xE8; ( 6)
TL1 = 0xE8; ( 7)
TR1 = 1; ( 8)
}
void main(void) ( 9)
{
unsigned char dat; ( 10)
Init_Com(); ( 11)
while(1) ( 12)
[page]
Detailed description of the program:
(1)Header file inclusion.
(2) Declare the serial port initialization procedure.
(3) Set timer 1 to operate in mode 2 and automatically load the initial value (see Lecture 2 for details).
(4) The SMOD bit is cleared to 0 and the baud rate is not doubled.
(5) The serial port operates in mode 1 and allows reception.
(6) Initialize the upper 8 bits of timer 1. The baud rate is 1200 b/s (7) Initialize the lower 8 bits of timer 1.
(8) Start the timer.
(9) Main function.
(10) Define a character variable.
(11) Initialize the serial port.
(12) Infinite loop.
(13) If data is received.
(14) Assign the received data to the previously defined variables.
(15) Output the received value to port P0.
(16) Clear the receive flag to prepare for receiving again.
(17) Send the received data out again.
(18) Check whether the sending is completed.
(19) Clear the send flag bit to 0.
4. Debugging points and experimental phenomena
After the hardware is connected, download the hex file generated by the program to the MCU through cold start, open the serial port debugging assistant software, set the baud rate to 1200, reset the MCU, and then send data to the MCU through the serial port debugging assistant (see Figure 3). You can observe that the sent data is displayed in the receiving window. In addition, the serial communication indicator on the circuit board will also flash, and the LED light connected to the P0 port will flash the received data.
Figure 3 Serial port software debugging interface
In addition, when using the serial port debugging assistant software, it should be noted that if the MCU development board adopts serial port download and the same serial port is used as the serial port debugging assistant, the program cannot be downloaded to the MCU while the serial port software is opened. If you need to download, please click "Close serial port" first. When doing the sending experiment, please note that if the hexadecimal is selected, the hexadecimal value of the number or letter is sent. For example, if "0" is sent, the actual received value should be 0x00. If it is not selected, the ASCII code value is sent by default. At this time, "0" is sent, and the actual received value should be 0x30. This can be indicated by observing the corresponding LED on the P0 port of the board.
V. Conclusion
This lecture introduces the principle of MCU serial communication and gives examples. Through this lecture, readers can understand and master the principle and application process of 51 MCU serial communication. MCU can be connected to computer, MCU can be interconnected or multiple MCUs can communicate with each other, etc., which is widely used in actual engineering applications. From the perspective of learning, proficient use of serial port to display relevant information in MCU system on computer can be very intuitive and convenient for debugging and development
Previous article:51 MCU Preparatory Knowledge
Next article:51 MCU timing and interruption exercises: using delay program to make flashing lights
Professor at Beihang University, dedicated to promoting microcontrollers and embedded systems for over 20 years.
- Innolux's intelligent steer-by-wire solution makes cars smarter and safer
- 8051 MCU - Parity Check
- How to efficiently balance the sensitivity of tactile sensing interfaces
- What should I do if the servo motor shakes? What causes the servo motor to shake quickly?
- 【Brushless Motor】Analysis of three-phase BLDC motor and sharing of two popular development boards
- Midea Industrial Technology's subsidiaries Clou Electronics and Hekang New Energy jointly appeared at the Munich Battery Energy Storage Exhibition and Solar Energy Exhibition
- Guoxin Sichen | Application of ferroelectric memory PB85RS2MC in power battery management, with a capacity of 2M
- Analysis of common faults of frequency converter
- In a head-on competition with Qualcomm, what kind of cockpit products has Intel come up with?
- Dalian Rongke's all-vanadium liquid flow battery energy storage equipment industrialization project has entered the sprint stage before production
- Allegro MicroSystems Introduces Advanced Magnetic and Inductive Position Sensing Solutions at Electronica 2024
- Car key in the left hand, liveness detection radar in the right hand, UWB is imperative for cars!
- After a decade of rapid development, domestic CIS has entered the market
- Aegis Dagger Battery + Thor EM-i Super Hybrid, Geely New Energy has thrown out two "king bombs"
- A brief discussion on functional safety - fault, error, and failure
- In the smart car 2.0 cycle, these core industry chains are facing major opportunities!
- The United States and Japan are developing new batteries. CATL faces challenges? How should China's new energy battery industry respond?
- Murata launches high-precision 6-axis inertial sensor for automobiles
- Ford patents pre-charge alarm to help save costs and respond to emergencies
- New real-time microcontroller system from Texas Instruments enables smarter processing in automotive and industrial applications
- 5 Key Considerations for IoT Devices
- NUCLEO_G431RB Review Add UART
- A must-read summary of drone principles (II) Major systems of drones
- CC2640R2: TI BLE OAD (OTA) protocol APP process and code interpretation on Android and iOS
- Transistor source, and the difference between NPN and PNP
- How to choose TVS tube for MSP430FR2633 touch chip
- [Analog Electronics Course Selection Test] + Functional Experience
- How to remove the AD official logo from the PCB template
- Will the basic technology of PA become more complex with the advent of the 5G era?
- [NXP Rapid IoT Review] Unboxing photos and simple connection test