C8051F021是美國Cygnal公司生產(chǎn)的單片機(jī)。具有雙串口,、低功耗,、高速度等優(yōu)點(diǎn)。本文以GSM的數(shù)據(jù)業(yè)務(wù),,設(shè)計(jì)一種具有報(bào)警和定位的移動(dòng)終端,,并介紹該終端的結(jié)構(gòu)框圖、工作原理以及I/O配置和初始化程序,。
引言
GSM網(wǎng)是目前移動(dòng)通信體制中最成熟,、最完善,、應(yīng)用最廣的一種系統(tǒng)。數(shù)據(jù)業(yè)務(wù)作為GSM網(wǎng)絡(luò)的一種基本業(yè)務(wù),,已得到越來越多的系統(tǒng)運(yùn)營商和開發(fā)商的重視,,基于這種業(yè)務(wù)的各種應(yīng)用也蓬勃發(fā)展起來。以GSM網(wǎng)絡(luò)作為無線數(shù)據(jù)傳輸網(wǎng)絡(luò),,可開發(fā)出多種前景極其樂觀的應(yīng)用,,如無線遠(yuǎn)程檢測和控制、無線自動(dòng)警報(bào)等,。本文基于GSM的數(shù)據(jù)業(yè)務(wù)設(shè)計(jì)一種實(shí)時(shí)性比較強(qiáng),、數(shù)據(jù)率為9.6kbps的具有報(bào)警和定位的終端。
1 C8051F021簡述
C8051F021是集成在一塊芯片上的混合信號(hào)系統(tǒng)級(jí)單片機(jī),,芯片上有32位數(shù)字I/O端口(引腳),,與標(biāo)準(zhǔn)8051的端口(P0~3)相同。C8051F021在功能上有所增強(qiáng),,每個(gè)I/O端口都可獨(dú)立地設(shè)置為推挽或開漏輸出和弱上拉,,這為一些低功耗系統(tǒng)設(shè)計(jì)提供了節(jié)省電源的手段,而其最突出優(yōu)點(diǎn)就是改進(jìn)了可以控制片內(nèi)數(shù)字資源與外部I/O引腳相連的交叉開頭網(wǎng)絡(luò),。通過設(shè)置交叉開關(guān)控制寄存器,,將人的數(shù)字資源輸入輸出配置為端口I/O引腳,這就允許用戶根據(jù)自己的特定應(yīng)用將通用I/O端口與所需數(shù)字資源相結(jié)合,。C7051F021具有雙串口,、多中斷源、低功耗,、高速度,、低電壓工作(3.3V)、高容量存儲(chǔ)器等特性,,這些特性滿足本終端核心處理器的要求:低功耗,、集成度高、可擴(kuò)展性好等,。
2 終端結(jié)構(gòu)框圖
終端系統(tǒng)是由C8051F021單片機(jī),、GSM模塊、GPSOEM接收模塊,、鍵盤和液晶顯示器組成,,如圖1所示。C8051F021單片機(jī)是用來實(shí)時(shí)采集終端外圍設(shè)備數(shù)據(jù)并進(jìn)行相應(yīng)的處理,;GSM模塊即GSM無線調(diào)制解調(diào)器,,完成和GSM網(wǎng)的接續(xù),負(fù)責(zé)通過串口接收來自單片機(jī)所采集到的數(shù)據(jù),,并以無線電磁波的形式發(fā)送,,或接收來自遠(yuǎn)程計(jì)算機(jī)發(fā)來的信息并傳遞給單片機(jī)處理,;GPSOEM的主要功能是接收衛(wèi)星發(fā)射導(dǎo)航電文的信號(hào),并進(jìn)行碼測量或相位測量,,然后根據(jù)導(dǎo)航電文提供的衛(wèi)星位置和時(shí)鐘差校正信息,,計(jì)算GPS接收機(jī)的當(dāng)前位置,在單片機(jī)的控制下傳輸定位數(shù)據(jù),;鍵盤包括數(shù)字鍵和功能鍵,,數(shù)字鍵用來設(shè)置呼叫遠(yuǎn)程主機(jī)的號(hào)碼,功能鍵具有相應(yīng)的報(bào)警功能如火警,、匪警等和輔助功能,;液晶顯示器用來顯示操作信息和提示信息。由于移動(dòng)終端不需采集和存儲(chǔ)大量的數(shù)據(jù),,僅采集GPS-OEM模塊的導(dǎo)航數(shù)據(jù),、報(bào)警類型數(shù)據(jù)和存儲(chǔ)呼叫遠(yuǎn)程主機(jī)的號(hào)碼數(shù)據(jù)和系統(tǒng)程序,所以C8051F021自帶的存儲(chǔ)器容量即64KB+128 Flash和4KB+256B RAM已滿足本終端的需要,,故不需擴(kuò)展外部存儲(chǔ)器,。
3 工作原理
在終端中,由GPS-OEM模塊完成位置定位,。GSM模塊完成與GSM網(wǎng)通信接續(xù),,用戶按鍵盤上的報(bào)警按鈕后,單片機(jī)通過串口實(shí)時(shí)讀取來自GPS-OEM發(fā)出的導(dǎo)航電文,,從中提取經(jīng)度,、緯度、速度,、時(shí)間,、航向定位數(shù)據(jù),并和相應(yīng)的報(bào)警類型
數(shù)據(jù)重新組合形成新的數(shù)據(jù)格式,。同時(shí),,以ATD<號(hào)碼>指令進(jìn)行撥號(hào)在接,連接成功后通過所建立的數(shù)據(jù)鏈路實(shí)時(shí)傳輸數(shù)據(jù),,監(jiān)控中心計(jì)算機(jī)接收數(shù)據(jù)并進(jìn)行經(jīng)緯度數(shù)據(jù)坐標(biāo)變換,、誤差校正等處理,在電子在圖上實(shí)時(shí)顯示出當(dāng)前監(jiān)控的終端地理位置,,并實(shí)時(shí)地跟蹤移動(dòng)終端,,并以聲光的形式提示工作人員,以便及時(shí)處理警情,。移動(dòng)終端也可隨時(shí)接來自監(jiān)控中心的控制命令,并依命令執(zhí)行相應(yīng)的動(dòng)作,。
4 終端I/O配置和初始化程序
由于本系統(tǒng)需要配置UART0,、SMBus,、UART1、INT0和INT1(8位),,存儲(chǔ)器的工作模式為片內(nèi)方式,。P1端口作為4×4鍵盤的接口,P2,、P3口作為通用的I/O端口,,其中INT0用作遠(yuǎn)程主機(jī)呼叫終端時(shí)的中斷處理,INT1用作鍵盤中斷處理,。故C8051F021單片機(jī)的EMIF和I/O端口配置如下,。
①設(shè)EMI的配置寄存器EMI0CF=0x00,,因?yàn)楸緫?yīng)用無擴(kuò)展存儲(chǔ)器和存儲(chǔ)器映像的I/O設(shè)備,,即存儲(chǔ)器工作模式為片內(nèi)方式;同時(shí)將EMIFLE(XBR2.5)設(shè)置為0,,這樣P037,、P0.6、P0.5的引腳將由交叉開關(guān)或端口鎖存器來決定,,不被交叉開關(guān)忽略,。
②按UART0EN=1,、UART1EN=1,、SMB0EN=1、INT0E=1,、INT1E和EMIFLE=0設(shè)置XBR0,、XBR1和XBR2為XBR0=0x05、XBR1=0x14,、XBR2=0x04,。
③配置P1端口為數(shù)字輸入模式,,即P1MDIN=0xFF,。P1端口低4位為鍵盤輸出,高4位為輸入,,P1MDOUT=0x0FH(P1.0~P1.3為推挽方式,,P1.4~P1.7為漏極開路方式),P1|=0xF0,。
?、苁鼓芙徊骈_關(guān),即XBARE=1,XBR2=0x44,。因?yàn)镋MIFLE=0,,交叉開關(guān)譯碼器將不跳過P0.7、P0.6,、P0.5引腳,,所以按優(yōu)先權(quán)交叉開關(guān)譯碼表進(jìn)行分配。UART0具有最高優(yōu)先權(quán),,故P0.0分配給TX0,、P0.1分配給RX0;SMBus的SDA,、SCL分別分配在P0.2,、P0.3引腳;UART1的TX1,、RX1分別分配在P0.4,、P0.5引腳;INT0分配在P0.6引腳,;INT1分配在P0.7引腳,。
⑤設(shè)置UART0的TX0引腳(TX0,,P0.0),、UART1的TX1引腳(TX1、P0.4)為推換輸出方式,,即P0MDOUT=0x11,。RX0、SDA,、SCL,、RX1、INT0和INT1是由交叉開關(guān)分配輸入的,,因此與其端口配置寄存器的值無關(guān),。
⑥P2,、P3作為一般I/O端口初始化輸入狀態(tài),,即P2MDOUT=0x00、P2=0xFF和P3MDOUT=0x00,、P3=0xFF,。
引腳分配如表1所列。
表1 單片機(jī)引腳分配
引腳 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P1 P2 P3
功能 TX0 RX0 SDK SCL TX1 RX1 INT0 INT
1 鍵盤 通用 通用
初始化程序如下:
void System_init(){
WDTCN=0xdeh; //禁止看門狗
WDTCN=0xadh,;
EMI0CF=0x00,;
XBR0=0x05; //使能UART0、SMBus
XBR1=0x14; //使能UART1,使能交叉開關(guān)和弱上拉,,禁止外部寄存器低端口ALE,、WR、RD由交叉開關(guān)寄存器或地址鎖存器決定I/O端口配置
P0MDOUT=0x11; //TX0,、TX1為推挽輸出,RX0,、SDA,、SCL、RX1,、INT0和INT1是由交叉開關(guān)分配輸入的,,因此與其端口配置寄存器的值無關(guān)
P2MDOUT.0=0x0; //把P2.0位初始化為輸入方式,,用作LCD的命令/數(shù)據(jù)的辨別
P2.0=1,;
//初始化為4×4鍵盤接口
P1MDIN=0xFFH; //配置P1端口為數(shù)字輸入模式
P1MDOUT=0x0FH; //配置P1.0~P1.3為推挽方式,,P1.4~P1.7為漏極開路方式
P1|=0xF0; //P1端口低4位為輸出,,高4位為輸入
P3MDOUT=0x00; //將P3口設(shè)置為輸入方式
P3=0xFF,;
IE=0x85; //使能INT0,、INT1并按默認(rèn)的優(yōu)先權(quán)進(jìn)行切換
}
,;UART0初始化函數(shù),;定時(shí)器1為UART0波特率源
void UART0_init(){
SCON0=0x50; //UART工作模式為1,8位數(shù)據(jù)位,,使能RX
TMOD=0x20,; //定時(shí)器1工作模式2,8位自動(dòng)重載
TH1=-(SYSCLK/9600/16);//按波特率設(shè)置定時(shí)器1的重載值
TL1=TH1; //設(shè)置定時(shí)器1的初始值
CKCON|=0x10,; //使用系統(tǒng)時(shí)鐘SYSCLK作為時(shí)基
PCON|=0x80; //SCOD0=1
TR1=1; //啟動(dòng)定時(shí)器1
}
;UART1初始化函數(shù),;配置定時(shí)器4為串口波特率源
void UART1_Init(void){
SCON1=0x50; //SCON1:模式1,8位UART,,使能RX
T4CON=0x30; //停止定時(shí)器,;清除中斷標(biāo)示;使能UART波特率模式
RCAP4=-(SYSCLK/9600/32);//按波特率設(shè)置定時(shí)器T4重載值
T4=RCAP4; //給定時(shí)器4賦初值
T4CON|=0x04; //(TR4=1)啟動(dòng)定時(shí)器4
TI1=1; //清除HW_UART接收和發(fā)送中斷
}
;SMBus初始化函數(shù)
void SMBus_init(){
SMB0CN=0x04h; //配置SMBus在應(yīng)答周期發(fā)送確認(rèn)ACK
SMBOCR=0x60; //時(shí)鐘速率大約10μs,,根據(jù)SMBOCR公式計(jì)算
SMB0CN|=0x40h; //使能SMBus
}
6 總結(jié)
該該端具有功耗低,、集成度高、數(shù)據(jù)處理速度快以及數(shù)據(jù)通信實(shí)時(shí)性強(qiáng)等特點(diǎn),,可廣泛應(yīng)用于個(gè)人,、出租車和長途車輛的定位和報(bào)警。由于其利用GSM網(wǎng)的電路型數(shù)據(jù)業(yè)務(wù)進(jìn)行無線數(shù)據(jù)通信,其通信費(fèi)用相對(duì)比較高,。