久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3434|回復(fù): 1
收起左側(cè)

發(fā)一個(gè)C8051單片機(jī)U盤讀寫的程序供大家參考

[復(fù)制鏈接]
ID:277930 發(fā)表于 2018-1-20 03:44 | 顯示全部樓層 |閱讀模式
使用C8051F020單片機(jī)連接CH376S USB HOST芯片,生成CSV格式文件導(dǎo)入U(xiǎn)盤內(nèi)的一個(gè)小程序

單片機(jī)源程序如下:
  1. /*****************************************************************************
  2. ;File Name:                           基于C8051F020系列的簡單U盤檢測測試程序         
  3. ;
  4. ;description:            通過測量開發(fā)板上的CH375  檢測是否有U  盤掛載
  5. ;Author:                王亮
  6. ;E_mail:                wangl@emsyschina.com
  7. *****************************************************************************/

  8. //-----------------------------------------------------------------------------
  9. // Includes
  10. //-----------------------------------------------------------------------------

  11. #include <c8051f020.h>                 // SFR declarations
  12. #include <stdio.h>      
  13. #include <intrins.h>      
  14. #include "CH375INC.H"      



  15. sbit CH375_nINT     = P1^2;                   // CH375   INT 輸出
  16. sbit CH375_A0     = P1^3;                   // CH375 命令/數(shù)據(jù)控制
  17. sbit CH375_nCS     = P1^4;                   // CH375 片選信號


  18. #define CH375_DATA   P7                    // CH375 八位數(shù)據(jù)端口
  19. #define CH375_nWR     P4 &=  0x7F;    _nop_();_nop_();_nop_();_nop_();      P4 |= 0x80;               // CH375 寫信號
  20. #define CH375_nRD_L     P4 &= 0xBF;             // CH375 讀信號低電平
  21. #define CH375_nRD_H     P4 |= 0x40;               // CH375 讀信號高電平
  22. #define BAUDRATE     115200            // Baud rate of UART in bps
  23. #define SYSCLK       22118400          // Output of PLL derived from (INTCLK*2)




  24. //-----------------------------------------------------------------------------
  25. // Function Prototypes
  26. //-----------------------------------------------------------------------------
  27. void OSCILLATOR_Init (void);           
  28. void PORT_Init (void);
  29. void UART0_Init (void);



  30. //**********************************************************
  31. // 大延遲程序(毫秒級)
  32. //**********************************************************
  33. void DelayMs(unsigned int i)
  34. {
  35.         unsigned int j;
  36.         for(;i!=0;i--)
  37.   {
  38.           for(j=200;j!=0;j--)
  39.            ;
  40.   }
  41. }

  42. //**********************************************************
  43. // 向CH375的命令端口寫入命令
  44. //**********************************************************
  45. void CH375_WR_CMD_PORT(unsigned char cmd )
  46. {  
  47.         // 將CH375   數(shù)據(jù)線、讀寫、片選信號線設(shè)置為輸出
  48.         P1MDOUT   = 0x18;                  // 將P7  和P4.6、P4.7、P1.3、P1.4設(shè)置為輸出
  49.         P74OUT    = 0xC2;                    // 將P7  和P4.6、P4.7、P1.3、P1.4設(shè)置為輸出
  50.        
  51.         CH375_A0 = 1;             // 高電平表示寫入的是命令
  52.        
  53.         CH375_DATA = cmd;        // 將命令輸出到CH375端口
  54.         _nop_();_nop_();
  55.        
  56.         CH375_nWR                 // 寫命令
  57.         _nop_();_nop_();
  58.         CH375_A0 = 0;            
  59. }



  60. //**********************************************************
  61. // 向CH375的數(shù)據(jù)端口寫入數(shù)據(jù)
  62. //**********************************************************
  63. void CH375_WR_DAT_PORT(unsigned char dat )
  64. {  
  65.         // 將CH375   數(shù)據(jù)線、讀寫、片選信號線設(shè)置為輸出
  66.         P1MDOUT   = 0x18;                  // 將P7  和P4.6、P4.7、P1.3、P1.4設(shè)置為輸出
  67.         P74OUT    = 0xC2;                    // 將P7  和P4.6、P4.7、P1.3、P1.4設(shè)置為輸出
  68.        
  69.         CH375_A0 = 0;             // 低電平表示寫入的是數(shù)據(jù)
  70.        
  71.         CH375_DATA = dat;        // 將命令輸出到CH375端口
  72.         _nop_();_nop_();
  73.        
  74.         CH375_nWR                 // 寫命令
  75. }



  76. //**********************************************************
  77. // 從CH375的數(shù)據(jù)端口讀出數(shù)據(jù)
  78. //**********************************************************
  79. unsigned char CH375_RD_DAT_PORT( void )
  80. {   
  81.         unsigned char temp;

  82.         // 將CH375   數(shù)據(jù)線信號線設(shè)置為輸入
  83.         P74OUT    = 0x02;
  84.         P7    = 0xff;
  85.                
  86.         CH375_A0 = 0;            

  87.         CH375_nRD_L
  88.         _nop_();_nop_();
  89.         temp = CH375_DATA;
  90.         CH375_nRD_H
  91.         _nop_();
  92.                
  93.           return( temp );   
  94. }

  95. //**********************************************************
  96. // 等待CH375中斷并獲取狀態(tài),返回操作狀態(tài)
  97. //**********************************************************
  98. unsigned char mWaitInterrupt( void )
  99. {
  100.         while( CH375_nINT );  // 查詢等待CH375操作完成中斷(INT#低電平)
  101.        
  102.         CH375_WR_CMD_PORT( CMD_GET_STATUS );  //  產(chǎn)生操作完成中斷,獲取中斷狀態(tài)  
  103.        
  104.         return( CH375_RD_DAT_PORT( ) );
  105.   
  106. }



  107. //-----------------------------------------------------------------------------
  108. // main() Routine
  109. //-----------------------------------------------------------------------------

  110. void main (void)
  111. {
  112.         unsigned char Version = 0;
  113.         unsigned char Status = 0;
  114.         WDTCN = 0xde;                       // Disable watchdog timer
  115.         WDTCN = 0xad;

  116.         OSCILLATOR_Init ();                 // Initialize oscillator
  117.         PORT_Init ();                       // Initialize crossbar and GPIO
  118.         UART0_Init ();                      // Initialize UART1


  119.         CH375_nCS = 0;          // 片選選中CH375
  120.         DelayMs( 50 );
  121.          // 獲取CH375  芯片及固件版本號,表明芯片正常
  122.         CH375_WR_CMD_PORT( CMD_GET_IC_VER );   
  123.         Version = CH375_RD_DAT_PORT( );
  124.         printf( "CH375 固件版本號%x\n", Version);

  125.        
  126.         CH375_WR_CMD_PORT( CMD_SET_USB_MODE );  // 初始化CH375,設(shè)置USB工作模式
  127.         CH375_WR_DAT_PORT( 6 );                                          // 模式代碼,自動(dòng)檢測USB設(shè)備連接
  128.         while (1)
  129.         {
  130.                 Version = mWaitInterrupt();
  131.                 printf( "Insert USB disk%x\n",Version);
  132.                 DelayMs( 50 );
  133.     while ( mWaitInterrupt( ) != USB_INT_CONNECT );  // 等待U盤連接
  134.     DelayMs( 5000 );  // 延時(shí)等待U盤進(jìn)入正常工作狀態(tài)

  135.                        
  136.                 printf( "USB disk is  CONNECT\n" );       // 表示U  盤正常插入
  137.                 getchar();

  138.         }

  139.        
  140. }



  141. //-----------------------------------------------------------------------------
  142. // Initialization Subroutines
  143. //-----------------------------------------------------------------------------

  144. //-----------------------------------------------------------------------------
  145. // OSCILLATOR_Init
  146. //-----------------------------------------------------------------------------
  147. //
  148. // Return Value : None
  149. // Parameters   : None
  150. //
  151. // This routine initializes the system clock to use an 22.1184MHz crystal
  152. // as its clock source.
  153. //
  154. //
  155. //-----------------------------------------------------------------------------
  156. void OSCILLATOR_Init (void)
  157. {
  158.    int i;                              // delay counter

  159.    OSCXCN = 0x67;                      // start external oscillator with
  160.                                        // 22.1184MHz crystal

  161.    for (i=0; i < 256; i++) ;           // wait for oscillator to start

  162.    while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle

  163.    OSCICN = 0x88;                      // select external oscillator as SYSCLK
  164.                                        // source and enable missing clock
  165.                                        // detector

  166. }


  167. //-----------------------------------------------------------------------------
  168. // PORT_Init
  169. //-----------------------------------------------------------------------------
  170. //
  171. // Return Value : None
  172. // Parameters   : None
  173. //
  174. // This function configures the crossbar and GPIO ports.
  175. //
  176. // P0.0   digital   push-pull     UART TX
  177. // P0.1   digital   open-drain    UART RX
  178. // AIN0.1 analog                  Analog input (no configuration necessary)
  179. //-----------------------------------------------------------------------------
  180. void PORT_Init (void)
  181. {
  182.         XBR0    = 0x04;                     // Route UART0 to crossbar
  183.         XBR2    |= 0x40;                    // Enable crossbar,  weak pull-ups
  184.        
  185.         P0MDOUT |= 0x01;                    // enable TX0 as a push-pull output

  186.         // 將CH375   數(shù)據(jù)線、讀寫、片選信號線設(shè)置為輸出
  187.         P1MDOUT   = 0x18;                  // 將P7  和P4.6、P4.7、P1.3、P1.4設(shè)置為輸出
  188. //        P74OUT    = 0xC2;                    // 將P7  和P4.6、P4.7、P1.3、P1.4設(shè)置為輸出
  189.         P74OUT    = 0xC3;                    // 將P7  和P4.6、P4.7、P1.3、P1.4設(shè)置為輸出
  190.        
  191.         P0MDOUT |= 0x01;                    // Set TX1 pin to push-pull

  192.         P1 |= 0x1c;                    //
  193. ……………………

  194. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
CH376.rar (83.19 KB, 下載次數(shù): 18)
回復(fù)

使用道具 舉報(bào)

ID:283698 發(fā)表于 2018-2-11 16:45 | 顯示全部樓層
找了很久這個(gè)東西了,謝謝
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区二区精品 | 国产91在线视频 | 国产精品久久久久久妇女6080 | 欧美 日韩 国产 成人 | 91五月婷蜜桃综合 | 可以看黄的视频 | 特级毛片www | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 日本中出视频 | 国产操操操 | 天天操天天操 | 人人看人人射 | 久久新 | 国产精品成人免费 | 中文字幕第十一页 | 福利视频一区二区 | 一区二区三区四区视频 | 久久精品中文 | 亚洲视频在线看 | 老牛影视av一区二区在线观看 | av一区二区在线观看 | 亚洲一区二区三区免费 | 国产精品久久久久久久三级 | 国产一级在线视频 | 亚洲午夜精品一区二区三区他趣 | 中文字幕第90页 | 狠狠操天天干 | 一区在线播放 | 日韩av一区在线观看 | 在线国产视频 | 欧美影院久久 | 亚洲一区视频在线 | 美女久久久久久久久 | 欧美久久一区二区 | 欧美一区二区三区国产精品 | 亚洲精品一区二区三区丝袜 | 欧美一区二区三区免费在线观看 | 四虎影院免费在线 | av在线免费观看网址 | 欧美二级 | 亚洲精品一区二区三区在线观看 |