关闭

C51用IO口模拟SPI

标签: ioc
5718人阅读 评论(1) 收藏 举报
分类:

/*******************************************************************************  

   模块名称:    spi.h  

   模块说明:    c51单片机的i/o模拟spi操作  

    

   创建时间:    2005/03/09  

   创建者:      xichen    

  

  

  

 ********************************************************************************/  

  

 #ifndef  SPI_H  

 #define  SPI_H  

  

  

  

 sbit  SPIS_N    =  P2^1;  

 sbit  SPIC    =  P2^3;  

 sbit  SPID    =  P2^2;  

 sbit  SPIQ    =  P2^4;  

  

 extern  void  spi_reset();  

 extern  void  spi_write(unsigned  char  spi_bValue);  

 extern  unsigned  char  spi_read();  

  

  

 #endif  

 /*******************************************************************************  

   模块名称:    spi.c  

   模块说明:    c51单片机的i/o模拟spi操作  

    

   创建时间:    2005/03/09  

   创建者:      xichen  

  

 ********************************************************************************/  

  

 #include  "includes.h"  

  

 #define set_spi_cs() SPIS_N  =1  

 #define clr_spi_cs() SPIS_N  =0  

 #define set_spi_clk()      SPIC  =1  

 #define clr_spi_clk()      SPIC  =0  

 #define set_spi_di() SPID  =1  

 #define clr_spi_di() SPID  =0  

 #define read_spi_do()     SPIQ    

  

  

  

 //------------------------------------------  

 void  spi_reset()  

 {  

   set_spi_cs();   

 }  

 //-----------------------------------------  

 void  spi_write(unsigned  char  spi_bValue)  

 {  

 unsigned  char  no;  

    

 clr_spi_cs();  

  

 for  (no=0;no<8;no++)  

 {  

         clr_spi_clk();    

  

 if  ((spi_bValue  &0x80)==0x80)  

    set_spi_di();  

  else  

    clr_spi_di();  

  

         set_spi_clk();   

  

 spi_bValue  =  (spi_bValue  <<1);  

 }  

 }  

 //----------------------------------------------  

 unsigned  char  spi_read()  

 {  

 unsigned  char  no,spi_bValue;  

  

 clr_spi_cs();  

  

 for (no=0;no<8;no++)  

 {                                  

 clr_spi_clk();  

  

         spi_bValue  =  (spi_bValue  <<1);  

  

         set_spi_clk();  

  

 if  (read_spi_do()  ==1)  

         spi_bValue  |=0x01;  

 else  

    spi_bValue  &=~0x01;  

  

 }  

  

 return  spi_bValue;  

 }  

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:31531次
    • 积分:283
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:4篇
    • 译文:0篇
    • 评论:3条
    文章分类
    文章存档
    最新评论