摘要:服務業在現實生活中很重要。該文闡述了基于TMS320F2812的呼叫服務系統的基本原理,給出了硬件設計和軟件設計方法,并結合TI公司提供的CCS軟件(Code Composer Studio 2.21)以及ICETEK-F2812-A進行仿真,最后給出了在F2812評估板中實現的該系統的實驗效果圖。
關鍵詞:呼叫;服務;TMS320F2812
中圖分類號:TP317.4文獻標識碼:A文章編號:1009-3044(2009)04-0988-03
A Call Service System Based on TMS320F2812
LIAO Meng-yi, XIA Dong-liang
(Software Institute of Pingdingshan University, Pingdingshan 467000, China)
Abstract: The service industry is important in real life. This article describes the principles of a calling service system which show the basic principles of the hardware and software design methods, The results are provided through the software CCS (Code Composer Studio 2.21) combining ICETEK-5100USB simulator and ICETEK-F2812-A simulation, Finally, the paper prescribes electronic signboards experimental results map in F2812 Evaluation.
Key words: calling; service; TMS320F2812; DSP; LED
1 引言
在餐廳就餐,經常遇到如下問題。服務員同時為幾張餐桌同時提供服務,他們經常因去廚房送顧客點菜單、去收銀臺替顧客結帳等工作而遠離提供服務的餐桌,此時顧客呼叫服務員很不方便。顧客在包房用餐時經常談及不便于讓別人知道的內容,只好時而讓服務員回避,時而又人工呼叫服務員,很不方便。本呼叫服務系統可以解決以上問題。
在醫院服務系統中,對于很多病房的大醫院,護士不可能一直看護每一個病房,而病人卻隨時有可能需要服務,如何使值班人員不必一直看護而病人可以隨時呼叫到值班人員的問題,本系統可以圓滿解決,并提供監視服務。
2 系統原理
本系統分為三部分,對于該系統,我們僅以醫院呼叫服務系統為例介紹。我們可以把該系統分為三部分,病房、值班室、監控室。系統框圖如圖1。
每個病房有一個呼叫按鍵和一個相應的復位按鍵(僅此一個);在值班室,每個病房對應有個燈,還有一個公用的蜂鳴器;監控室是一個大屏幕,顯示每個病房的詳細呼叫信息和呼叫狀態。
當有病人呼叫時,該病房相應的燈亮且蜂鳴器響,表示有人呼叫,值班室人員可根據燈獲知對應房間的呼叫,病房可以多個同時呼叫,則相應燈都會亮,蜂鳴器響,只有值班人員到該房間檢查后,按下復位鍵后相應燈才熄滅,但蜂鳴器只在所有的房間都服務后(即所有燈都復位后才停,一旦有一個沒復位就不會停)。值班室人員不到病房是無法復位燈的。監控室可以顯示所有病房的呼叫狀態及總數。又此可知整個醫院的工作量和值班人員的服務質量。
3 硬件設計
本實驗是在TI公司提供的CCS軟件(Code Composer Studio 2.21)以及ICETEK-F2812-A進行仿真的,仿真中使用了ICETEK-F2812-A中鍵盤、發光二極管、液晶顯示屏。在醫院呼叫服務系統中,本文使用鍵盤作為病房的輸入和復位,其中K1、K2、K3、K4做為病房1、2、3、4的呼叫鍵,K5、K6、K7、K8分別做為對應的復位鍵。值班室使用前四個發光二極管分別做為相應病房的狀態,蜂鳴器就使用實驗箱的蜂鳴器,值班室的詩句顯示則使用液晶顯示屏。
4 軟件設計
4.1 程序流程(如圖3)
4.2 主要代碼分析
主函數代碼分析如下:
void main(void)
{
InitSysCtrl();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;// This is needed to write to EALLOW protected registers
PieVectTable.TINT0 = cpu_timer0_isr;
EDIS;// This is needed to disable write to EALLOW protected registers
CpuTimer0Regs.PRD.all= music[nCount][0]*350;
CpuTimer0Regs.TPR.all= 0;
CpuTimer0Regs.TIM.all= 0;
CpuTimer0Regs.TPRH.all = 0;
CpuTimer0Regs.TCR.bit.TSS = 1;
CpuTimer0Regs.TCR.bit.SOFT = 1;
CpuTimer0Regs.TCR.bit.FREE = 1;
CpuTimer0Regs.TCR.bit.TRB = 1;
CpuTimer0Regs.TCR.bit.TIE = 1;
CpuTimer0.InterruptCount = 0;
IER |= M_INT1;
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
EINT; // Enable Global interrupt INTMERTM; // Enable Global realtime interrupt DBGMCTRSTATUS=0x88;CTRSTATUS=8;CTRSTATUS=0x88;CTRSTATUS=8;CTRGR=8; // BUZZE=1 打開蜂鳴器, 見ICETEK-CTR的全局控制寄存器描述Gpio_PortA();uWork1=0; uWork2=0; nWork=0; w=1;w3=0; w4=0; w5=0; w6=0; w7=0; w8=0; w10=0; w11=0; n=0;CTRLED=0xff;for(i=0;i<8;i++){CTRLED=~ccc[i];mydelay(32);}CTRLED=0x0;
while(w)
{
mydelay(32);
CTRLED=0xffff;
mydelay(32);
for(;;)
{
Delay(music[nCount][1]*5);
nCount++;
nCount%=nMusicNumber;
CpuTimer0Regs.PRD.all= music[nCount][0]*350;
uWork=MCTRKEY;
uWork1=uWork;
CTRCLKEY=0;
asm(\" nop \");
//uWork2=MCTRKEY;
//CTRCLKEY=0;
mydelay(200);
//if(uWork1==uWork2uWork1!=0)
//{
w3=uWork10x000f;
w4=uWork10x00f0;
w5|=w3;
w6=w5;
w8=w50x000f;
asm(\" nop \");
if(w3!=0)
{
CTRLED=(~w5)|0xfff0;
w3=0;
//++;
StartCpuTimer0();
}
if(w4!=0)
{
w4/=16;
w6=~w6|w4|0xfff0;
w7|=w6;
w5=(~w7)w50x000f;
CTRLED=w7;
w4=0;
w11=w70x000f;
}
if(w7==65535)
{
StopCpuTimer0();
uWork1=0;
uWork2=0;
nWork=0;
w3=0; w4=0; w5=0; w6=0; w7=0;
mydelay(400);
CTRLED=0xffff;
};
w12=(~w11)0x000f;
//w8=w12;
if(w8!=0)
w10=1;
if(w8==0)
{w9[0]=0;w9[1]=0;w9[2]=0;w9[3]=0;}
if(w8==1)
{w9[0]=1;w9[1]=0;w9[2]=0;w9[3]=0;}
if(w8==2)
{w9[0]=0;w9[1]=1;w9[2]=0;w9[3]=0;}
if(w8==3)
{w9[0]=1;w9[1]=1;w9[2]=0;w9[3]=0;}
if(w8==4)
{w9[0]=0;w9[0]=0;w9[2]=1;w9[3]=0;}
if(w8==5)
{w9[0]=1;w9[1]=0;w9[2]=1;w9[3]=0;}
if(w8==6)
{w9[0]=0;w9[1]=1;w9[2]=1;w9[3]=0;}
if(w8==7)
{w9[0]=1;w9[1]=1;w9[2]=1;w9[3]=0;}
if(w8==8)
{w9[0]=0;w9[1]=0;w9[2]=0;w9[3]=1;}
if(w8==9)
{w9[0]=1;w9[1]=0;w9[2]=0;w9[3]=1;}
if(w8==10)
{w9[0]=0;w9[1]=1;w9[2]=0;w9[3]=1;}
if(w8==11)
{w9[0]=1;w9[1]=1;w9[2]=0;w9[3]=1;}
if(w8==12)
{w9[0]=0;w9[1]=0;w9[2]=1;w9[3]=1;}
if(w8==13)
{w9[0]=1;w9[1]=0;w9[2]=1;w9[3]=1;}
if(w8==14)
{w9[0]=0;w9[1]=1;w9[2]=1;w9[3]=1;}
if(w8==15)
{w9[0]=1;w9[1]=1;w9[2]=1;w9[3]=1;}
if(w10==1)
{
n=0;
for(i=0;i<4;i++)
{
if(w9[i]!=0)
n++;
}
w10=0;
}
lcd(n);
}//end for
}//end while
}//end main
5 仿真結果
由于程序主循環中指令多且有多個延遲(如讀鍵盤延遲,初始化液晶屏延遲等),程序的顯示結果比較慢,更新也較慢,但仿真結果很好,所述功能完整實現。
6 總結
在當今服務業發展占很大比重及人們更注重享受的時代,該系統會有很大的用途和市場前景。
參考文獻
[1] 徐科軍,張涵,陳智淵. TMS320x2812xDSP原理與應用[M]. 北京航空航天大學出版社,2006.
[2]《ICETEK-F2812A-S60教學實驗系統使用指導》,2005.
[3] 何蘇勤 王忠勇. TMS320C2000系列DSP原理及實用技術[M]. 電子工業出版社,2003.