C51单片机串口发送数字函数:
#include "reg52.h" #include "intrins.h" typedef unsigned char BYTE; typedef unsigned int WORD; #define FOSC 11059200L //System frequency #define BAUD 115200 //UART baudrate /*Define UART parity mode*/ #define NONE_PARITY 0 //None parity #define ODD_PARITY 1 //Odd parity #define EVEN_PARITY 2 //Even parity #define MARK_PARITY 3 //Mark parity #define SPACE_PARITY 4 //Space parity #define PARITYBIT EVEN_PARITY //Testing even parity sbit bit9 = P2^2; //P2.2 show UART data bit9 bit busy; void SendData(BYTE dat); void SendString(char *s); void SendNum(unsigned long i); void main() { #if (PARITYBIT == NONE_PARITY) SCON = 0x50; //8-bit variable UART #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) SCON = 0xda; //9-bit variable UART, parity bit initial to 1 #elif (PARITYBIT == SPACE_PARITY) SCON = 0xd2; //9-bit variable UART, parity bit initial to 0 #endif TL2 = RCAP2L = (65536-(FOSC/32/BAUD)); //Set auto-reload vaule TH2 = RCAP2H = (65536-(FOSC/32/BAUD)) >> 8; T2CON = 0x34; //Timer2 start run ES = 1; //Enable UART interrupt EA = 1; //Open master interrupt switch //SendString("OK\r\n"); SendString("ABAB"); SendNum(1235098); while(1); } /*---------------------------- UART interrupt service routine ----------------------------*/ void Uart_Isr() interrupt 4 { if (RI) { RI = 0; //Clear receive interrupt flag P0 = SBUF; //P0 show UART data bit9 = RB8; //P2.2 show parity bit } if (TI) { TI = 0; //Clear transmit interrupt flag busy = 0; //Clear transmit busy flag } } /*---------------------------- Send a byte data to UART Input: dat (data to be sent) Output:None ----------------------------*/ void SendData(BYTE dat) { while (busy); //Wait for the completion of the previous data is sent ACC = dat; //Calculate the even parity bit P (PSW.0) if (P) //Set the parity bit according to P { #if (PARITYBIT == ODD_PARITY) TB8 = 0; //Set parity bit to 0 #elif (PARITYBIT == EVEN_PARITY) TB8 = 1; //Set parity bit to 1 #endif } else { #if (PARITYBIT == ODD_PARITY) TB8 = 1; //Set parity bit to 1 #elif (PARITYBIT == EVEN_PARITY) TB8 = 0; //Set parity bit to 0 #endif } busy = 1; SBUF = ACC; //Send data to UART buffer } /*---------------------------- Send a string to UART Input: s (address of string) Output:None ----------------------------*/ void SendString(char *s) { while (*s) //Check the end of the string { SendData(*s++); //Send current char and increment string ptr } } void SendNum(unsigned long i)//发送数字 { int a[10]; int j; j = 0; if(i==0) { SendData(0x30); } else { while(i>0) { a[j] = i%10+'0'; j++; i /= 10; } } for(j--; j>=0; j--) { SendData(a[j]); } }