Design Idea of ​​Software UART Based on Single Chip Microcomputer

Publisher:水墨人生Latest update time:2011-09-02 Keywords:MCU Reading articles on mobile phones Scan QR code
Read articles on your mobile phone anytime, anywhere
At present, there are mainly the following methods to expand the serial port: ①, using serial port expansion chips, such as ST16C550, ST16C554, SP2538, MAX3110, etc. Although the cost is high, the reliability of the system is guaranteed, which is suitable for systems with large data volume and large serial port requirements; ②, using the time-sharing switching method to expand a serial port to communicate with multiple serial port devices. The time-sharing multiplexing method has low cost, but is only suitable for occasions with small data volume, and can only be actively communicated with multiple devices by this single-chip microcomputer, and the real-time performance is poor; ③, using the software simulation method to expand the serial port, its advantages are also low cost and good real-time performance, but it takes up some CPU time.

The general software simulation method of expanding the serial port uses 1 I/O port, 1 INT external interrupt and timer. The serial port expanded by this method has two disadvantages: ①, because the INT external interrupt is used, only 2 INT external interrupts can be used to expand 2 serial ports. ②, the efficiency of sending and receiving data in the article is relatively low, which occupies a lot of CPU time and cannot be performed simultaneously with other tasks, so the scope of use is limited.

The method of simulating serial ports proposed in this paper uses only 2 common I/Os and 1 timer. Since there is no need for INT restrictions, multiple serial ports can be expanded, and the function of FIFO is included. This method expands the sending and receiving data of the simulated serial port in the interrupt service, so it is very efficient. Generally, the single-chip microcomputer supports timer interrupts, so this method can be applied to most single-chip microcomputers.

For low-speed single-chip microcomputers (such as 89S51), low-speed serial ports (9600, 4800, etc.) can be expanded, and for high-speed single-chip microcomputers (such as AVR, PIC, C8051, STC12), high-speed serial ports (such as 19200, 28800, 38400, 57600, etc.) can be expanded. At present, the processing speed of single-chip microcomputers is getting higher and higher, and the price is getting cheaper and cheaper. The STC12C1052 chip used in this paper has high speed and low price, and the price is only RMB 3.8 per piece. When developing and designing electronic products, it is required to reduce hardware costs while ensuring performance. Software simulation and expansion of serial ports provides a good way to reduce costs.

1. Principle of serial communication

In asynchronous communication of serial port, data is transmitted in byte frames with bytes as units. The sender and receiver must communicate in the same byte frame format and baud rate. The byte frame format specifies the start bit, data bit, parity bit, and stop bit. The start bit is the beginning of the byte frame, which makes the data line in the logic 0 state, used to indicate to the receiver that the data frame has started to be sent, so as to synchronize the sending and receiving devices. The stop bit is the end of the byte frame, which makes the data line in the logic 1 state, used to indicate to the receiver that the data frame has been sent. The baud rate adopts standard speed, such as 4800, 9600, 19200, 28800, 38400, 57600, etc.

2. Design idea of ​​software UART

In terms of hardware requirements for this design, only any two I/O ports and one timer of the microcontroller are occupied, and the timer interrupt function of the timer is used to achieve accurate baud rate timing. Both sending and receiving are carried out under the control of the timer interrupt.

The idea of ​​data transmission is that when starting byte transmission, the start bit is first sent through TxD, then the data bit and the parity check bit are sent, and finally the stop bit is sent. The transmission process is controlled by the transmission state machine. Each interruption only sends 1 bit, and after several timed interruptions, the transmission of 1 byte frame is completed. The

idea of ​​data reception is that when it is not in the byte frame reception process, each timed interrupt monitors the state of RxD at 3 times the baud rate. When its sampling level is 1, 0, and 0 for 3 consecutive times, it is considered that the start bit is detected, and then a byte frame reception is started. The byte frame reception process is controlled by the receiving state machine. Each interruption only receives 1 bit, and after several timed interruptions, the reception of 1 byte frame is completed.

In order to improve the performance of the serial port, the FIFO function is implemented in both transmission and reception to improve the real-time performance of the communication. The length of the FIFO can be freely defined to meet the different needs of users.

The baud rate is calculated according to the calculation formula. When setting the highest baud rate, the execution time of the simulated serial port program code must be considered. The timing time must be greater than the specified time of the simulated serial port program. The faster the execution speed of the microcontroller, the higher the serial port communication speed can be achieved.

3. Implementation of software UART design

This program is run and tested on the STC12C1052 high-speed microcontroller produced by Hongjing Technology (Shenzhen). The STC12C1052 microcontroller is a single-clock/machine cycle MCS51 core microcontroller, which is fully compatible with the 89C2051 pin. Its operating frequency reaches 35MHz, which is equivalent to the 420MHz 89C2051 microcontroller, and each piece costs RMB 3.8. Due to the high speed of the microcontroller, the software expansion serial port method is more convenient to achieve high-speed serial ports.

In the design of this extended serial port, the crystal oscillator frequency used by STC12C1052 is 22.1184Mhz, and the timing time is calculated at 3 times the baud rate. During the receiving process, this timing is used to sample the receiving start bit. During the sending and receiving process, the frequency is divided by 3 to obtain the standard baud rate timing for data sending and receiving.

3.1、Data definition

Define some resources necessary for the simulated serial port program, such as I/O pins, baud rate, data buffer, etc.

#define Fosc 22118400 //Crystal frequency

#define Baud 38400 //Baud rate

#define BaudT (Fosc/Baud/3/12)

#define BufLong 16 //FIFO length

sbit RxD1=P1^7; //Analog receiving RxD

sbit TxD1=P1^6; //Analog sending TxD

bit Brxd1,Srxd1;//RxD detection level

BYTE Rbuf1[BufLong];//FIFO receiving area

BYTE Rptr1,Rnum1;

BYTE Tbuf1[BufLong];//FIFO sending area

BYTE Tptr1,Tnum1;

BYTE TimCnt1A,TimCnt1B;

BYTE Mtbuf1,Mrbuf1,TxdCnt1,RxdCnt1;

3.2、Data receiving subroutine

During data receiving, the logical bits of RxD are stored sequentially to form byte data. When data receiving is completed and the stop bit is 1, it means that valid data has been received, and the result is stored in the receiving FIFO queue.

void Recv()

{

if(RxdCnt1>0) //Store 8 data bits

{

Mrbuf1>>=1;

if(RxD1==1) Mrbuf1=Mrbuf1|0x80;

}

RxdCnt1--;

if(RxdCnt1==0&& RxD1==1) //Data receiving is completed

{

Rbuf1[Rptr1]=Mrbuf1; //Store in FIFO queue

if(++Rptr1>BufLong-1) Rptr1=0;

if(++Rnum1>BufLong) Rnum1=BufLong;

}

}

3.3. Data sending subroutine

During this program, when the data sending state ends, it checks whether the sending FIFO queue is empty. If it is not empty, it takes out the sending data and then starts the sending state. When in the sending state, it sends the start bit, data bit and stop bit according to the state of the state machine.

void Send()

{

if(TxdCnt1!=0) //Byte sending state machine

{

if(TxdCnt1==11) TxD1=0;//Send start bit 0

else if(TxdCnt1>2) //Send data bit

{ Mtbuf1>>=1; TxD1=CY;}

else TxD1=1; //Send end bit 1

TxdCnt1--;

}

else if(Tnum1>0) //Detect FIFO queue

{

Tnum1--;

Mtbuf1=Tbuf1[Tptr1]; //Read FIFO dataif

(++Tptr1>=BufLong) Tptr1=0;

TxdCnt1=11; //Start sending state machine

}

}

3.4, Interrupt program

The interrupt timing time is 1/3 of the baud rate timing, that is, RxD is sampled at 3 times the baud rate to realize the judgment of the start bit, and the receiving process state machine is started when the start bit arrives. Divide the timer by 3 and call the data sending and receiving process to perform serial communication at an accurate baud rate.

void Uart() interrupt 1 using 1

{

if(RxdCnt1==0 ) //Receiving start identification

{

if(RxD1==0 && Brxd1==0 && Srxd1==1) { RxdCnt1=8; TimCnt1B=0;}

}

Srxd1=Brxd1; Brxd1=RxD1;

if(++TimCnt1B>=3 && RxdCnt1!=0) { TimCnt1B=0; Recv();}//Data receiving

if(++TimCnt1A>=3) { TimCnt1A=0; Send();} //Data sending

}

3.5、Serial port initialization

Open the timer interrupt, set the timer to self-loading mode, set the timer interrupt interval according to the baud rate, start the timer, and initialize the UART variables.

void IniUart()

{

IE="0x82"; TMOD="0x22";

TH0=-BaudT; TL0=-BaudT; TR0=1;

Rptr1=0;Rnum1=0;Tptr1=0;Tnum1=0;

}

4. Conclusion

The uniqueness of the analog serial port design method proposed in this paper lies in: only using any two ordinary I/O pins and one timer interrupt to realize full-duplex serial port, less hardware occupation, and multiple serial port expansion capability; the judgment method of three consecutive samplings is used when judging the start bit of serial port reception, which is simple to implement and has high accuracy; using timer interrupt to realize the sending and receiving of serial port data, and realizing FIFO queue, so that the sending and receiving of serial port work is efficient.
Keywords:MCU Reference address:Design Idea of ​​Software UART Based on Single Chip Microcomputer

Previous article:Design of Temperature Measurement System Based on DS18820, AT89S52 and RF Chip
Next article:1 to 8 ISP system based on MTV412 microcontroller

Recommended ReadingLatest update time:2024-11-16 16:52

Freescale MCU DZ60---Real-time Interrupt
//RTI real-time interruption experiment //The RTC module includes a status and control register, an 8-bit count register and an 8-bit modulus register //The real-time interrupt function is used to generate periodic interrupts. RTI has three optional clock sources: LPO 1KHZ internal oscillator, 32KHZ internal clock, an
[Microcontroller]
Single chip alarm clock programming
This is an extension of the previous electronic clock, mainly adding an alarm module. That is, it will ring for one minute when the preset time is reached, and stop automatically after one minute. You can also press the set key to stop it manually. This is the end of our study on digital tubes. The next step is to
[Microcontroller]
Simulation Design of PIC Microcontroller Source Program
When we edit the C language of PIC microcontroller, we often use the simulation technology of the source program, because the simulation of the program can replace the hardware production and debugging of part of the microcontroller. Even when we study the C language program of PIC microcontroller in depth, the simula
[Microcontroller]
Simulation Design of PIC Microcontroller Source Program
51 MCU Series Knowledge 3--Memory (2)
3. The lower 128 units of the internal data memory (00H~7FH) The total capacity of the internal data memory of the 51 microcontroller is 256 bytes, and the address ranges from 00H to FFH. This 256-byte address space can be divided into a low 128-byte unit and a high 128-byte unit with different functions. In the 2
[Microcontroller]
51 MCU Series Knowledge 3--Memory (2)
Research on single chip intelligent lighting dimming system
  1. Introduction   With the development of science and technology, people have higher requirements for their living standards and living environment. The traditional lighting system can no longer meet people's needs due to its mechanical and monotonous lighting method and defects such as different regional brightnes
[Microcontroller]
Research on single chip intelligent lighting dimming system
Design of access control security management system based on single chip microcomputer
This system organically combines ID card technology, computer control technology and electronic door locks, uses ID cards to replace keys, and cooperates with computers to achieve intelligent access control and management, effectively solving the shortcomings of traditional door locks such as cumbersome use and inabil
[Microcontroller]
Design of access control security management system based on single chip microcomputer
Design method of realizing intelligent parking system based on 51 single chip microcomputer
This article mainly describes the use of 51 single-chip microcomputer to realize the intelligent parking system, which can realize the function of the car automatically entering the designated parking space in the laboratory. The car is parked at the entrance of the parking lot, and then the owner can leave the car. A
[Microcontroller]
Design method of realizing intelligent parking system based on 51 single chip microcomputer
PIC microcontroller internal A/D conversion
//Requirement, connect the potentiometer on the board to RA0, set the AD-related registers of PIC, and display the voltage #include pic.h __CONFIG(0x3831); //Configuration bit 18323831 #define uint unsigned int #define uchar unsigned char   //Common cathode digital tube (the board uses Darlington tube ULN2003, invert
[Microcontroller]
Latest Microcontroller Articles
  • Download from the Internet--ARM Getting Started Notes
    A brief introduction: From today on, the ARM notebook of the rookie is open, and it can be regarded as a place to store these notes. Why publish it? Maybe you are interested in it. In fact, the reason for these notes is ...
  • Learn ARM development(22)
    Turning off and on interrupts Interrupts are an efficient dialogue mechanism, but sometimes you don't want to interrupt the program while it is running. For example, when you are printing something, the program suddenly interrupts and another ...
  • Learn ARM development(21)
    First, declare the task pointer, because it will be used later. Task pointer volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • Learn ARM development(20)
    With the previous Tick interrupt, the basic task switching conditions are ready. However, this "easterly" is also difficult to understand. Only through continuous practice can we understand it. ...
  • Learn ARM development(19)
    After many days of hard work, I finally got the interrupt working. But in order to allow RTOS to use timer interrupts, what kind of interrupts can be implemented in S3C44B0? There are two methods in S3C44B0. ...
  • Learn ARM development(14)
  • Learn ARM development(15)
  • Learn ARM development(16)
  • Learn ARM development(17)
Change More Related Popular Components

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
circle

About Us Customer Service Contact Information Datasheet Sitemap LatestNews


Room 1530, 15th Floor, Building B, No.18 Zhongguancun Street, Haidian District, Beijing, Postal Code: 100190 China Telephone: 008610 8235 0740

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号