|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
多個16c554怎樣初始化他的寄存器? |
| 作者:qixiboy 欄目:單片機(jī) |
因為1個554有4個串口,可是現(xiàn)在要用到3個554,也就是12個串口而每個串口又要用到6個寄存器(LCR,DLL,DLM,F(xiàn)CR,IER,MCR)。這樣就有個72個寄存器 我知道如果就一個寄存器的話可以這樣定義: #define com1_lcr XBYTE[0x8000]; //寄存器地址 com1_lcr = 0x08; // 寄存器初始化 可問題是現(xiàn)在有72個,我沒個都要這樣寫嗎? 有什么簡單的方法嗎? 高手們再幫我看看如果象下面那樣定義是否可以: struct comr { uchar lcr,dll,dlm,fcr,ier,mcr; }*com[12]; com[0] = 0x8000; //com1_addr_base是第一個com的首地址,這樣的話那么com[0].lcr的地址是不是就是0x8000,com[0].dll就是0x8001 。。。。。。 com[1] = 0x8800; . . . . . . com[11] = 0xf000; //以上就定義寄存器地址 /*********初始化**************/ void init(void) { uchar i; for (i=0;i<12;i++) { com[i].lcr = 0x08; com[i].dll = 0x03; . . . com[i].mcr = 0x06; } } 請問我該怎樣寫呢? |
| 2樓: | >>參與討論 |
| 作者: qixiboy 于 2006/9/29 21:43:00 發(fā)布:
是我沒說清楚嗎? |
|
| 3樓: | >>參與討論 |
| 作者: qixiboy 于 2006/9/30 9:28:00 發(fā)布:
那個好心人幫我看看呀 |
|
| 4樓: | >>參與討論 |
| 作者: zgl7903 于 2006/9/30 10:24:00 發(fā)布:
應(yīng)該可以,軟調(diào)一下就知道了 //但是這樣可能更加靈活一些 #include <string.h> typedef unsigned CHAR uCHAR; #define MAX_COM_PORT 12 typedef struct { uCHAR xdata *ctrl_port; uCHAR lcr; uCHAR dll; uCHAR dlm; uCHAR fcr; uCHAR ier; uCHAR mcr; }Com_Ctrl; code Com_Ctrl com[] = { {0x8000,1,2,3,4,5,6}, {0x8800,1,2,3,4,5,6}, //………… }; void init_com() { uCHAR i,j; uCHAR xdata *dest; uCHAR *source; for(i=0;i<MAX_COM_PORT;i++) { dest = com[i].ctrl_port; source = (uCHAR*)&com[i]+sizeof(unsigned CHAR xdata*); for(j=0;j<sizeof(Com_Ctrl)-sizeof(unsigned CHAR xdata*);j++) { *dest++ = *source++; } } /* uCHAR i; for(i=0;i<MAX_COM_PORT;i++) { memcpy(com[i].ctrl_port, (uCHAR*)&com[i]+sizeof(unsigned CHAR xdata*), sizeof(Com_Ctrl)-sizeof(unsigned CHAR xdata*)); } */ } |
|
| 5樓: | >>參與討論 |
| 作者: squarelook 于 2006/9/30 10:45:00 發(fā)布:
你還沒理解總線應(yīng)用的概念 都是通過總線操作的,初始化函數(shù)都一樣,調(diào)用初始化函數(shù)的時候,片選到哪個554就初始化哪個,所以關(guān)鍵你要控制好片選
|
|
| 6樓: | >>參與討論 |
| 作者: lyjian 于 2006/9/30 13:01:00 發(fā)布:
這也算難題? 12個串口要設(shè)置的寄存器都是一樣的,那還等效于只有一個。 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |