c51单片机的i/o模拟spi操作

    1.  模块名称:       spi.h   
    2.       模块说明:       c51单片机的i/o模拟spi操作   
    3.         
    4.       创建时间:       2005/03/09   
    5.       创建者:           xichen       
    6.     
    7.     
    8.     
    9.   ********************************************************************************/   
    10.     
    11.   #ifndef   SPI_H   
    12.   #define   SPI_H   
    13.     
    14.     
    15.     
    16.   sbit   SPIS_N       =   P2^1;   
    17.   sbit   SPIC       =   P2^3;   
    18.   sbit   SPID       =   P2^2;   
    19.   sbit   SPIQ       =   P2^4;   
    20.     
    21.   extern   void   spi_reset();   
    22.   extern   void   spi_write(unsigned   char   spi_bValue);   
    23.   extern   unsigned   char   spi_read();   
    24.     
    25.     
    26.   #endif   
    27.   /*******************************************************************************   
    28.       模块名称:       spi.c   
    29.       模块说明:       c51单片机的i/o模拟spi操作   
    30.         
    31.       创建时间:       2005/03/09   
    32.       创建者:           xichen   
    33.     
    34.   ********************************************************************************/   
    35.     
    36.   #include   "includes.h"   
    37.     
    38.   #define set_spi_cs() SPIS_N   =1   
    39.   #define clr_spi_cs() SPIS_N   =0   
    40.   #define set_spi_clk()           SPIC   =1   
    41.   #define clr_spi_clk()           SPIC   =0   
    42.   #define set_spi_di() SPID   =1   
    43.   #define clr_spi_di() SPID   =0   
    44.   #define read_spi_do()         SPIQ       
    45.     
    46.     
    47.     
    48.   //------------------------------------------   
    49.   void   spi_reset()   
    50.   {   
    51.       set_spi_cs();     
    52.   }   
    53.   //-----------------------------------------   
    54.   void   spi_write(unsigned   char   spi_bValue)   
    55.   {   
    56.   unsigned   char   no;   
    57.         
    58.   clr_spi_cs();   
    59.     
    60.   for   (no=0;no<8;no++)   
    61.   {   
    62.                   clr_spi_clk();       
    63.     
    64.   if   ((spi_bValue   &0x80)==0x80)   
    65.         set_spi_di();   
    66.     else   
    67.         clr_spi_di();   
    68.     
    69.                   set_spi_clk();     
    70.     
    71.   spi_bValue   =   (spi_bValue   <<1);   
    72.   }   
    73.   }   
    74.   //----------------------------------------------   
    75.   unsigned   char   spi_read()   
    76.   {   
    77.   unsigned   char   no,spi_bValue;   
    78.     
    79.   clr_spi_cs();   
    80.     
    81.   for (no=0;no<8;no++)   
    82.   {                                                                   
    83.   clr_spi_clk();   
    84.     
    85.                   spi_bValue   =   (spi_bValue   <<1);   
    86.     
    87.                   set_spi_clk();   
    88.     
    89.   if   (read_spi_do()   ==1)   
    90.                   spi_bValue   |=0x01;   
    91.   else   
    92.         spi_bValue   &=~0x01;   
    93.     
    94.   }   
    95.     
    96.   return   spi_bValue;   
    97.   }   
    98.    
posted @ 2013-03-17 17:09  天涯海角路  阅读(1600)  评论(0)    收藏  举报