?? main.c
字號(hào):
//===========================SST MCU擴(kuò)展的5個(gè)UART使用說(shuō)明==============================
// 本例程是使用SST MCU(SST89E/V52RD,54RD,58RD,516RD)的特殊硬件功能做的,新增加2個(gè)擴(kuò)展UART的功能.
// 擴(kuò)展UART的特點(diǎn):采用全雙工方式,即:收發(fā)不用分時(shí);采用半雙工方式,可擴(kuò)展5個(gè)新的UART
//
// 1.發(fā)送和接收均采用中斷方式,不占用標(biāo)準(zhǔn)8052的資源(定時(shí)器,硬件中斷,RAM),
// 占用的資源均是SST MCU的特殊資源,因此這個(gè)例子只適合SST的單片機(jī),不能用于其它非SST的MCU
// 2.發(fā)送采用UART4_SEND_OUT(data)函數(shù),直接取要發(fā)送的數(shù)據(jù)即可.
// 3.接收采用中斷方式接收,接收的數(shù)據(jù)放在自己定義的變量"UART4_SBUF"單元內(nèi).
// 4.使用本例程請(qǐng)參考MAIN.C函數(shù).//
// 4.0 加入本文件進(jìn)行一些函數(shù)的聲明和設(shè)置參數(shù)(晶振頻率,通訊的波特率,緩沖區(qū)的大小,UART的I/O口定義)
// 4.2 對(duì)擴(kuò)展UART進(jìn)行初始化和打開(kāi):
// UART4_INIT(); // 初始化UART4
// UART4_RX_ENABLE(); // 允許UART4接收
// 4.3 接收首先查詢(xún)UART通道的數(shù)據(jù)接收到標(biāo)志--UART4_RI,若為1,說(shuō)明已接收到數(shù)據(jù),則從UART4_SBUF單元取出數(shù)據(jù)即可
// if (UART4_RI) //已經(jīng)接收到數(shù)據(jù),將接收到的數(shù)據(jù)存入U(xiǎn)ART4_BUF的內(nèi)存中
// { UART4_RI = 0; // 清除接收標(biāo)志,UART4_RI這個(gè)標(biāo)志在接收到一個(gè)字節(jié)后會(huì)自動(dòng)置1
// UART4_BUF[] = UART4_SBUF; // 取出接收到的數(shù)據(jù),送到緩沖區(qū)內(nèi)
// }
// 5. 本示例可用串口調(diào)試串口進(jìn)行測(cè)試,上電開(kāi)始即會(huì)發(fā)送--"12"2個(gè)字符到PC,
// 然后從PC端發(fā)送一串?dāng)?shù)據(jù)到UART,應(yīng)在馬上可收到返回的數(shù)據(jù),從而驗(yàn)證了UART的收發(fā)結(jié)果.
// 然后再換成其余4個(gè)UART的I/O,應(yīng)都能正常工作.
// 6. 在11.0592M晶振,雙倍速模式下,波特率為9600,在單倍速模式下,波特率為4800,
// 對(duì)應(yīng)的波特率和晶振的關(guān)系,在單倍速模式下:
// 4800--11.0592Mhz; 9600--18.432Mhz; 19200--40MHZ
//===============================================================================================
// 香港弘微科技有限公司(SPAC)
// 技術(shù)支持:田伯運(yùn) 0755-26010579 andy.tian@spacltd.com.cn
//===============================================================================================
#include <stdio.h>
#include <5_UART_SST.h> //包含5個(gè)UART程序所用到的定義和函數(shù)
//--------------------------------------------------------------------
// 主程序
//--------------------------------------------------------------------
// - 初始化并允許UART0
// - 調(diào)用測(cè)試程序
//
void MAIN (void)
{
unsigned int count_time=0;
unsigned char UART0_receive_counter,UART1_receive_counter,UART2_receive_counter;
unsigned char UART3_receive_counter,UART4_receive_counter; //5個(gè)UART通道的數(shù)據(jù)接收個(gè)數(shù)變量
char k, m; // 測(cè)試下標(biāo)
char xdata UART0_BUF[80]; // UART0 測(cè)試接收緩沖區(qū)
char xdata UART1_BUF[80]; // UART1 測(cè)試接收緩沖區(qū)
char xdata UART2_BUF[80]; // UART2 測(cè)試接收緩沖區(qū)
char xdata UART3_BUF[80]; // UART3 測(cè)試接收緩沖區(qū)
char xdata UART4_BUF[80]; // UART4 測(cè)試接收緩沖區(qū)
TIME_COUNT=SYSCLK/BAUD_RATE/4; //計(jì)算對(duì)應(yīng)一個(gè)位時(shí)間的PCA計(jì)數(shù)值,(PCA 配置為對(duì)SYSCLK/4計(jì)數(shù))
//-------UART0通道的調(diào)用-------------------
UART0_INIT(); // 初始化UART0
UART0_RX_ENABLE(); // 允許UART0接收
//======test1:上電主動(dòng)發(fā)送"123"3個(gè)字符=====
UART0_SEND_OUT(0x31);
UART0_SEND_OUT(0x32);
UART0_SEND_OUT(0x33);
//-------UART0通道的調(diào)用-------------------
UART1_INIT(); // 初始化UART1
UART1_RX_ENABLE(); // 允許UART1接收
//======test1:上電主動(dòng)發(fā)送"123"3個(gè)字符=====
UART1_SEND_OUT(0x31);
UART1_SEND_OUT(0x32);
//-------UART2通道的調(diào)用-------------------
UART2_INIT(); // 初始化UART2
UART2_RX_ENABLE(); // 允許UART2接收
//======test1:上電主動(dòng)發(fā)送"123"3個(gè)字符=====
UART2_SEND_OUT(0x31);
UART2_SEND_OUT(0x32);
//-------UART3通道的調(diào)用-------------------
UART3_INIT(); // 初始化UART3
UART3_RX_ENABLE(); // 允許UART3接收
//======test1:上電主動(dòng)發(fā)送"123"3個(gè)字符=====
UART3_SEND_OUT(0x31);
UART3_SEND_OUT(0x32);
//-------UART4通道的調(diào)用-------------------
UART4_INIT(); // 初始化UART4
UART4_RX_ENABLE(); // 允許UART4接收
//======test1:上電主動(dòng)發(fā)送"123"3個(gè)字符=====
UART4_SEND_OUT(0x31);
UART4_SEND_OUT(0x32);
//======test2:接收數(shù)據(jù),并發(fā)送"接收到的數(shù)據(jù)+10H"到對(duì)方=====
while(0)
{
while(UART0_RI) //已經(jīng)接收到UART0通道的數(shù)據(jù),將"接收到的數(shù)據(jù)加10H后"重新發(fā)送出去
{
UART0_RI = 0; // 清除接收標(biāo)志,UART0_RI這個(gè)標(biāo)志在接收到一個(gè)字節(jié)后會(huì)自動(dòng)置1
UART0_SEND_OUT(UART0_SBUF+0x10);
}
while(UART1_RI) //已經(jīng)接收到UART1通道的數(shù)據(jù),將"接收到的數(shù)據(jù)加10H后"重新發(fā)送出去
{
UART1_RI = 0; // 清除接收標(biāo)志,UART1_RI這個(gè)標(biāo)志在接收到一個(gè)字節(jié)后會(huì)自動(dòng)置1
UART1_SEND_OUT(UART1_SBUF+0x10);
}
while(UART2_RI) //已經(jīng)接收到UART2通道的數(shù)據(jù),將"接收到的數(shù)據(jù)加10H后"重新發(fā)送出去
{
UART2_RI = 0; // 清除接收標(biāo)志,UART2_RI這個(gè)標(biāo)志在接收到一個(gè)字節(jié)后會(huì)自動(dòng)置1
UART2_SEND_OUT(UART2_SBUF+0x10);
}
while(UART3_RI) //已經(jīng)接收到UART3通道的數(shù)據(jù),將"接收到的數(shù)據(jù)加10H后"重新發(fā)送出去
{
UART3_RI = 0; // 清除接收標(biāo)志,UART3_RI這個(gè)標(biāo)志在接收到一個(gè)字節(jié)后會(huì)自動(dòng)置1
UART3_SEND_OUT(UART3_SBUF+0x10);
}
while(UART4_RI) //已經(jīng)接收到UART4通道的數(shù)據(jù),將"接收到的數(shù)據(jù)加10H后"重新發(fā)送出去
{
UART4_RI = 0; // 清除接收標(biāo)志,UART4_RI這個(gè)標(biāo)志在接收到一個(gè)字節(jié)后會(huì)自動(dòng)置1
UART4_SEND_OUT(UART4_SBUF+0x10);
}
}
//=========test3:接收數(shù)據(jù),并發(fā)送"接收到的數(shù)據(jù)"到對(duì)方====================
k=m=0; // 清0測(cè)試計(jì)數(shù)器變量
while(1)
{
if (count_time>0x0200) //連續(xù)250次都沒(méi)有接收到數(shù)據(jù),便要發(fā)送數(shù)據(jù)
{ //接收等待的次數(shù)超過(guò)250次,便認(rèn)為沒(méi)有數(shù)據(jù)發(fā)來(lái),便進(jìn)行向外發(fā)送數(shù)據(jù)
//---------UART0通道發(fā)送接收到的數(shù)據(jù)--------------------
for(m=0;m<UART0_receive_counter;m++)
{
UART0_SEND_OUT(UART0_BUF[m]); //開(kāi)始轉(zhuǎn)換為發(fā)送的狀態(tài)
}
UART0_receive_counter=0x00; //UART0的接收個(gè)數(shù)清零
//---------UART1通道發(fā)送接收到的數(shù)據(jù)--------------------
for(m=0;m<UART1_receive_counter;m++)
{
UART1_SEND_OUT(UART1_BUF[m]); //開(kāi)始轉(zhuǎn)換為發(fā)送的狀態(tài)
}
UART1_receive_counter=0x00; //UART1的接收個(gè)數(shù)清零
//---------UART2通道發(fā)送接收到的數(shù)據(jù)--------------------
for(m=0;m<UART2_receive_counter;m++)
{
UART2_SEND_OUT(UART2_BUF[m]); //開(kāi)始轉(zhuǎn)換為發(fā)送的狀態(tài)
}
UART2_receive_counter=0x00; //UART2的接收個(gè)數(shù)清零
//---------UART3通道發(fā)送接收到的數(shù)據(jù)--------------------
for(m=0;m<UART3_receive_counter;m++)
{
UART3_SEND_OUT(UART3_BUF[m]); //開(kāi)始轉(zhuǎn)換為發(fā)送的狀態(tài)
}
UART3_receive_counter=0x00; //UART3的接收個(gè)數(shù)清零
//---------UART4通道發(fā)送接收到的數(shù)據(jù)--------------------
for(m=0;m<UART4_receive_counter;m++)
{
UART4_SEND_OUT(UART4_BUF[m]); //開(kāi)始轉(zhuǎn)換為發(fā)送的狀態(tài)
}
UART4_receive_counter=0x00; //UART4的接收個(gè)數(shù)清零
//=======================================
count_time=0;
}
//=====================UART0通道將接收到的數(shù)據(jù)存儲(chǔ)到UART0的緩沖區(qū)內(nèi)===========
else if (UART0_RI) //已經(jīng)接收到數(shù)據(jù),將接收到的數(shù)據(jù)存入U(xiǎn)ART0_BUF的內(nèi)存中
{
UART0_RI = 0; // 清除接收標(biāo)志,UART0_RI這個(gè)標(biāo)志在接收到一個(gè)字節(jié)后會(huì)自動(dòng)置1
UART0_BUF[UART0_receive_counter++] = UART0_SBUF; // 讀接收緩沖器
count_time = 0; //接收到一個(gè)數(shù)據(jù),便清等待的次數(shù)
}
//=====================UART1通道將接收到的數(shù)據(jù)存儲(chǔ)到UART1的緩沖區(qū)內(nèi)===========
else if (UART1_RI) //已經(jīng)接收到數(shù)據(jù),將接收到的數(shù)據(jù)存入U(xiǎn)ART1_BUF的內(nèi)存中
{
UART1_RI = 0; // 清除接收標(biāo)志,UART1_RI這個(gè)標(biāo)志在接收到一個(gè)字節(jié)后會(huì)自動(dòng)置1
UART1_BUF[UART1_receive_counter++] = UART1_SBUF; // 讀接收緩沖器
count_time = 0; //接收到一個(gè)數(shù)據(jù),便清等待的次數(shù)
}
//=====================UART2通道將接收到的數(shù)據(jù)存儲(chǔ)到UART2的緩沖區(qū)內(nèi)===========
else if (UART2_RI) //已經(jīng)接收到數(shù)據(jù),將接收到的數(shù)據(jù)存入U(xiǎn)ART2_BUF的內(nèi)存中
{
UART2_RI = 0; // 清除接收標(biāo)志,UART2_RI這個(gè)標(biāo)志在接收到一個(gè)字節(jié)后會(huì)自動(dòng)置1
UART2_BUF[UART2_receive_counter++] = UART2_SBUF; // 讀接收緩沖器
count_time = 0; //接收到一個(gè)數(shù)據(jù),便清等待的次數(shù)
}
//=====================UART3通道將接收到的數(shù)據(jù)存儲(chǔ)到UART3的緩沖區(qū)內(nèi)===========
else if (UART3_RI) //已經(jīng)接收到數(shù)據(jù),將接收到的數(shù)據(jù)存入U(xiǎn)ART3_BUF的內(nèi)存中
{
UART3_RI = 0; // 清除接收標(biāo)志,UART3_RI這個(gè)標(biāo)志在接收到一個(gè)字節(jié)后會(huì)自動(dòng)置1
UART3_BUF[UART3_receive_counter++] = UART3_SBUF; // 讀接收緩沖器
count_time = 0; //接收到一個(gè)數(shù)據(jù),便清等待的次數(shù)
}
//=====================UART4通道將接收到的數(shù)據(jù)存儲(chǔ)到UART4的緩沖區(qū)內(nèi)===========
else if (UART4_RI) //已經(jīng)接收到數(shù)據(jù),將接收到的數(shù)據(jù)存入U(xiǎn)ART4_BUF的內(nèi)存中
{
UART4_RI = 0; // 清除接收標(biāo)志,UART4_RI這個(gè)標(biāo)志在接收到一個(gè)字節(jié)后會(huì)自動(dòng)置1
UART4_BUF[UART4_receive_counter++] = UART4_SBUF; // 讀接收緩沖器
count_time = 0; //接收到一個(gè)數(shù)據(jù),便清等待的次數(shù)
}
count_time++; //沒(méi)有接收到數(shù)據(jù),等待的次數(shù)加一
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -