新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STC15F2K60S2串口2程序

STC15F2K60S2串口2程序

作者: 時間:2016-11-26 來源:網(wǎng)絡 收藏
下面是串口2的程序,昨天一直沒調(diào)出來的原因是由于串口發(fā)送完中斷標志位,置位和清零上出了問題。其中為什么要把它,照著資料手冊上那種方式寫才行,這我現(xiàn)在也沒大清楚,我想可能這需要反匯編才看的出來,由于競賽時間緊,只有暫且放下進一步的分析,下面是程序代碼。
#include "reg51.h"
sfr P4 = 0xc0;
sfr P5 = 0xc8;
sfr AUXR = 0x8e ;
sfr S2CON = 0x9a ;
sfr S2BUF = 0x9b ;
sfr T2H = 0xd6 ;
sfr T2L = 0xd7 ;
sfr IE2 = 0xaf ;
sfr IP2 = 0xb5 ;
#define S2RI 0x01 // S2CON.0
#define S2TI 0x02 // S2CON.1
unsigned char temp ;
bit flag1 = 0 , flag2 = 0 , busy = 0 ;
unsigned char xdata Uart1TxBuffer [20] = "杜興杰你必須加油個"; //
void SendData ( unsigned char date ) ; //數(shù)據(jù)發(fā)送函數(shù)定義
void Uart2Init(void) //9600bps@11.0592MHz
{
S2CON = 0x50; //8位數(shù)據(jù),可變波特率
AUXR |= 0x04; //定時器2時鐘為Fosc,即1T
T2L = 0xE0; //設定定時初值
T2H = 0xFE; //設定定時初值
AUXR |= 0x14; //啟動定時器2 4 注意這里
EA = 1 ;
IE2 = 0x01 ; //開啟串口中斷ES2
IP2 |= 0x00 ; //串口2優(yōu)先級0
}
void main( void )
{
char i ;
P0 = 0 ;
Uart2Init() ;
SendData (C) ;
SendData (C) ;
for ( i = 0 ; i < 20 ; i++ )
{
SendData (Uart1TxBuffer[i]) ;
}
for ( i = 0 ; i < 20 ; i++ )
{
SendData (Uart1TxBuffer[i]) ;
}
SendData (C) ;
SendData (C) ;
while(1)
{
if( flag2 == 1 )
{
SendData ( temp );
flag2 = 0 ;
}
}
}
void Uart2( void ) interrupt 8
{
if( S2CON & S2RI )
{
S2CON &= ~ S2RI ;
temp = S2BUF ;
flag2 = 1 ;
}
if( S2CON & S2TI )
{
S2CON &= ~ S2TI ;
busy = 0 ;
}
}
void SendData ( unsigned char date )
{
while ( busy ) ; //
busy = 1 ;
S2BUF = date ;
// while ( !( S2CON & 0x02 ) ) ;
// S2CON &= ~ S2TI ;
}
下一步是把串口1和串口2 加在一起,還有就是加入循環(huán)隊列實現(xiàn)流控等



關(guān)鍵詞: STC15F2K60S2串口

評論


技術(shù)專區(qū)

關(guān)閉