⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 33xspi.c

📁 一些C8051f330的C程序
💻 C
字号:
//-----------------------------------------------------------------------------
// 版权归新华龙电子公司所有
//-----------------------------------------------------------------------------
//
// 文件名:330SPI.C
//
// 编写人:宁太阳 
//
// 编写时间:2004/12/30
//
// 目标器件: C8051F33x
//
// 编译工具: Silicon Laboratories IDE
//
// 程序描述:
//
//     这个程序可以在C8051F33x目标板上使用,与C8051F31x目标板进行全双工SPI通信,工作在主方式,
// 可对对方进行读写操作,在读数据时LED灯将闪烁,通讯速率为140k,可以在名为slavedata的数组中观
//察从从机读过来的数据,正确的数据应是在255-0 之间依次循环。
//-------------下面是C805F330目标板与C8051F310目标板的接图--------------------
//                |   C8051330           C8051F310   |
//                |                                  |
//                |    +3VD                 +3VD     |
//                |    GND                   GND     |
//                |    P0.0                  P0.0    |
//                |    P0.1                  P0.1    |
//                |    P0.2                  P0.4    |
//                |    P0.3                  P0.5    |
//-----------------------------------------------------------------------------    
//-----------------------------------------------------------------------------
// 头文件包含
//-----------------------------------------------------------------------------
#include <c8051f330.h>                 
#include <intrins.h>
//-----------------------------------------------------------------------------
// 常量定义
//-----------------------------------------------------------------------------
//
#define SYSCLK       24500000 / 8         //系统工作频率
//
//-----------------------------------------------------------------------------
//位定义
//-----------------------------------------------------------------------------
sbit LED = P1^3;                          // LED所接的引脚
sbit CS  = P0^3;                          // 从机片选                           
//-----------------------------------------------------------------------------
//全局变量定义
//-----------------------------------------------------------------------------
unsigned char xdata slavedata[300];    // 存放收到的数据
unsigned char  *spipoint;         //masterdata数组的指针

//-----------------------------------------------------------------------------
// 函数定义
//-----------------------------------------------------------------------------
void SYSCLK_Init (void);
void PORT_Init (void);
void SPI_Init(void);
void SPI_Write(unsigned char SPIBuffer);
void DELAY(unsigned int t);
void SPI_ReadByte(void);
//-----------------------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------------------
void main (void) 
{
 unsigned int i,j;
  
   PCA0MD &= ~0x40;                       //禁止看门狗定时器

   SYSCLK_Init ();                        // 系统时钟初始化
                                          
   PORT_Init ();                          // 交叉开关和通用I/O口初始化

   SPI_Init();                            //SPI初始化                                         
  
   EA = 1;							      // 总中断使能
   spipoint = &slavedata;
   while (1) 
   {                           
	 for(i=0;i<=20000;i++);
     CS=0;
	 SPI_Write(j);
     SPI_ReadByte();
	 j++;
     CS=1;
  }
}

//-----------------------------------------------------------------------------
//系统时钟初始化
//-----------------------------------------------------------------------------
//
void SYSCLK_Init (void)
{

   OSCICN = 0x80;                          // 系统时钟初始化为片内的 24.5MHz / 8                       
                                         
   RSTSRC = 0x04;                         // 使能时钟丢失检测器
}

//-----------------------------------------------------------------------------
//I/O口及交叉开关初始化
//-----------------------------------------------------------------------------

void PORT_Init (void)
{

   XBR0     = 0x02;                       // SPI分配到P0口
   XBR1     = 0x40;                       // 使能交叉开关和弱上拉
   P0MDOUT |= 0x19;     
   P1MDOUT |= 0x08;                       // P1.3设为推挽方式
}
//-----------------------------------------------------------------------------
//SPI初始化
//-----------------------------------------------------------------------------		  
void SPI_Init(void)
 {
  SPI0CFG = 0x40;                       //设此器件为主器件
  SPI0CN =  0x01;	                    //使能SPI,设为三线主方式
  SPI0CKR = 0x10;                       //速率为140K
 }
//-----------------------------------------------------------------------------
//SPI写数据		  
//-----------------------------------------------------------------------------
 void SPI_Write(unsigned char SPIBuffer)
 {
		DELAY(50);
		SPIF = 0;
        SPI0DAT = SPIBuffer;
   while(SPIF==0);1
        SPIF=0;
 }
//-------------------------------------------------------------------------
//SPI读数据		   
//-----------------------------------------------------------------------------
void SPI_ReadByte(void)
 {
         DELAY(80);
		 LED=!LED;
		 SPIF = 0;
    while(SPIF==1);          //数据是否接收完毕
         SPIF=0;
		 *spipoint=SPI0DAT;  //数据保存到slavedata数组中
		  spipoint++;
		  
 }  
//-----------------------------------------------------------------------------
//延时子程序
//-----------------------------------------------------------------------------
 void DELAY(unsigned int t)
{
  unsigned int i,j;  
  for(i=0;i<t;i++)
    for(j=0;j<10;j++)
	  {
	   _nop_();
      }
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -