?? main.c
字號(hào):
/*
main.c
串行口通信方式3例程
*/
#include <reg51.h>
//參數(shù)配置
#define MCLK 11059200L //定義CPU主頻(Hz)
#define BAUD_RATE 9600L //設(shè)置波特率
//定義發(fā)送輔助標(biāo)志
static volatile bit _TI_;
//定義接收緩沖區(qū)
#define SIZE 40
unsigned char UartBuf[SIZE];
//定義接收緩沖區(qū)下標(biāo)變量
unsigned char BufP1;
unsigned char BufP2;
/*
函數(shù):UartInit()
功能:串行口初始化
*/
void UartInit()
{
unsigned char i;
EA = 0;
BufP1 = 0;
BufP2 = 0;
for ( i=0; i<SIZE; i++ )
{
UartBuf[i] = 0x00;
}
TR1 = 0;
RXD = 1;
TXD = 1;
_TI_ = 1;
SCON = 0xD0; //串口方式3(9位Uart),允許接收
PCON |= 0x80; //波特率加倍
TMOD &= 0x0F;
TMOD |= 0x20;
TH1 = 256 - ( MCLK / 12 ) / ( 16 * BAUD_RATE );
TL1 = TH1; //設(shè)置波特率
TR1 = 1;
ES = 1; //允許串行口中斷
EA = 1; //允許中斷
}
/*
函數(shù):UartINTSVC
功能:串行口中斷服務(wù)程序
*/
void UartINTSVC() interrupt 4
{
char c;
if ( RI ) //接收中斷
{
c = SBUF;
RI = 0;
ACC = c;
F0 = P;
if ( F0 == RB8 )
{
UartBuf[BufP1++] = c;
if ( BufP1 >= SIZE )
{
BufP1 = 0;
}
}
}
if ( TI ) //發(fā)送中斷
{
TI = 0;
_TI_ = 1;
}
}
/*
函數(shù):UartSendChar()
功能:通過(guò)串行口發(fā)送單個(gè)字節(jié)
參數(shù):
c:被發(fā)送的字節(jié)數(shù)據(jù),取值0x00~0xFF
*/
void UartSendChar(char c)
{
while ( !_TI_ );
_TI_ = 0;
ACC = c;
TB8 = P;
SBUF = c;
}
void main()
{
UartInit();
for (;;)
{
if ( BufP2 != BufP1 )
{
UartSendChar(UartBuf[BufP2++]);
if ( BufP2 >= SIZE )
{
BufP2 = 0;
}
}
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -