<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 牛人業(yè)話(huà) > USB學(xué)習二:讀取ID值

USB學(xué)習二:讀取ID值

作者: 時(shí)間:2015-01-26 來(lái)源:網(wǎng)絡(luò ) 收藏

  題記:熟悉了PDID12的硬件電路后,就應該進(jìn)入的軟件編程部分了。我想大家在初學(xué)時(shí)都會(huì )遇到和我一樣的困惑:拿起USB協(xié)議的相關(guān)文檔埋頭苦看,看半天還是什么又枚舉又配置的看是看了,可是回頭來(lái)好像什么都不懂;理論不行咱就動(dòng)手吧,可是一找參考程序,可苦了咱,一上來(lái)就是一大堆的共同體,誰(shuí)記得了啊,看了這個(gè)就忘了那個(gè),到頭來(lái)和看書(shū)好像一個(gè)效果。貌似很復雜很龐大的USB驅動(dòng),呵呵,我們不能一次性消化你,我就肢解了你再消化!那么第一個(gè)軟件程序就來(lái)個(gè)最簡(jiǎn)單的(圈圈都給我們寫(xiě)好了程序了,還愁什么),對,就讀取D12的ID值。

本文引用地址:http://dyxdggzs.com/article/268629.htm

  先了解下什么是ID(特權同學(xué)也是現學(xué)現賣(mài),不好意思了):

  

點(diǎn)擊看大圖

 

  我也不是弄得特別懂,反正最后讀出來(lái)的ID=0x1012那就對了。

  還得做個(gè)說(shuō)明,我用的不是圈圈的USB板子,外圍電路搭的也不一樣,而是如筆記一里把D12做外部RAM擴展用了。另外,由于手頭串口線(xiàn)恩多就是沒(méi)有一條合適的,所以通過(guò)串口精靈顯示的部分就簡(jiǎn)單的改由1602LCD顯示ID值了。但是基本的思路都是相通的,要的就是這個(gè)!

  貼個(gè)主程序:

  ///////////////////////////////////////////////

  //函數:main

  //說(shuō)明:主程序

  //入口:無(wú)

  //返回:無(wú)

  ///////////////////////////////////////////////

  void main(void)

  {

  init_lcd1602(); //初始化lcd1602

  while(1)

  {

  display_id(read_d12_id()); //讀取并顯示ID值

  }

  }

  主程序一貼就知道這個(gè)實(shí)驗會(huì )是超級簡(jiǎn)單(入門(mén)嘛呵呵)。重點(diǎn)是來(lái)看USB的讀寫(xiě)指令數據部分的驅動(dòng)程序。

  先看宏定義:

  /*D12寄存器的地址分配*/

  /*xdata ----> 可尋址片外ram (64k地址范圍:0000H-FFFFH)*/

  #define D12_DATA 0xEFF0 //偶數是數據地址

  #define D12_COMMAND 0xEFF1 //奇數是命令地址

  上面為什么如此定義呢,因為筆記一里提到過(guò),D12是被做外部RAM擴展了,P0口接的是D12的8bit數據端口,而CS_N被接到了P2.4口,所以尋址時(shí)CS_N一定必須為低,也即P2=EF,P2和P1就構成了外部RAM的地址。

  ///////////////////////////////////////////////

  //函數:write_d12

  //說(shuō)明:把數據或者命令送入D12

  //入口:uint addr:送入D12的地址 D12_DATA或者D12_COMMAND

  // uchar dat:送入D12的數據或者指令

  //返回:無(wú)

  ///////////////////////////////////////////////

  void write_d12(uint addr, uchar dat)

  {

  *((uchar xdata *) addr) = dat;

  //addr就是外部RAM的地址,把dat賦給這個(gè)地址即可

  }

  ///////////////////////////////////////////////

  //函數:read_d12

  //說(shuō)明:從D12讀出數據

  //入口:uint addr:送入D12的地址

  //返回:uchar *addr:返回一字節數據

  ///////////////////////////////////////////////

  uchar read_d12(uint addr)

  {

  return *((uchar xdata *) addr);

  //返回addr這個(gè)外部RAM上的數據,addr只能是D12_DATA

  }

  再來(lái)看讀取ID這個(gè)程序是如何實(shí)現的:

  ///////////////////////////////////////////////

  //函數:read_d12_id

  //說(shuō)明:從D12讀出其ID

  //入口:無(wú)

  //返回:uint id:USB的ID值

  ///////////////////////////////////////////////

  uint read_d12_id(void)

  {

  uchar idtem1=0,idtem2=0;

  uint id="0";

  write_d12(D12_COMMAND,0xfd); //發(fā)送讀取ID的指令

  idtem1 = read_d12(D12_DATA); //讀第一個(gè)字節

  idtem2 = read_d12(D12_DATA); //讀第二個(gè)字節

  id = idtem1+(idtem2*256); //把連個(gè)字節賦給一個(gè)uint型變量

  return id; //返回讀出的ID值

  }

  顯示效果:

  

點(diǎn)擊看大圖

 

  挺簡(jiǎn)單的程序,但是在這個(gè)程序中,可以明白單片機是如何往D12寫(xiě)指令,然后緊跟著(zhù)再讀或者寫(xiě)數據。在這個(gè)基礎上,要實(shí)現一個(gè)完整的USB通訊,還要繼續在寫(xiě)指令和讀寫(xiě)數據上做文章,在對D12初始化后,重點(diǎn)是在于讀取D12中斷寄存器然后對其進(jìn)行相應的操作。



關(guān)鍵詞: USB PDIUSBD12

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>