音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(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ī)
多個16C554怎樣初始化他的寄存器?
因為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
是我沒說清楚嗎?
 
3樓: >>參與討論
qixiboy
那個好心人幫我看看呀
 
4樓: >>參與討論
zgl7903
應(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
你還沒理解總線應(yīng)用的概念
都是通過總線操作的,初始化函數(shù)都一樣,調(diào)用初始化函數(shù)的時候,片選到哪個554就初始化哪個,所以關(guān)鍵你要控制好片選

6樓: >>參與討論
lyjian
這也算難題?
12個串口要設(shè)置的寄存器都是一樣的,那還等效于只有一個。


參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
大俠:并口擴(kuò)展用哪塊芯片啊?8255好嗎?
奇怪了,我的DS1302秒可以走,可是到了60,分就是不更新
DATASHEET你喜歡下載哪個廠商的?
C語言中子程序不能正常返回。
幫俺看看這個程序
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號