×
单片机 > 单片机程序设计 > 详情

ATmega128(SPI通信)

发布时间:2020-06-04 发布时间:
|
//atmega128的SPI应用示例程序,采用SPI接口的DAC芯片TLC5615,连续进行电压转换

//DAC为TI公司的10位串行电压型输出的DAC芯片TLC5615,SPI接口连接方式
//驱通过SPI接口,动DAC芯片,使其完成000-FFC(TLC5615后两位的值一直为0)输出的转换
//LED指示灯DS3对应从暗到亮,表示电压逐渐增大
//编译环境 AVR Studio 4.17/AVR GCC
//系统时钟7.3728MHZ,设置熔丝位为外部高频石英晶体振荡,启动时间4.1ms
//***********************************************************************
//   包含文件
//***********************************************************************

#include
#include
#define  F_CPU 7372800  // 单片机主频为7.3728MHz,用于延时子程序
#include
#include
#include
#include      //中断信号头文件
//***********************************************************************
// 定义变量区
//***********************************************************************
#define uchar unsigned char
#define uint  unsigned int

#define delay_us(x)     _delay_us(x)        //AVR GCC延时函数 x(us)
#define delay_ms(x)     _delay_ms(x)        //AVR GCC延时函数 x(ms)

#define cs0   PORTB &= ~(1 << PB0)          //片选信号置低
#define cs1   PORTB |= (1 << PB0)           //片选信号置高

uint da_data;
uchar count=0;
uint da_data2;
//*************************************************************************
//   初始化子程序
//*************************************************************************
void system_init()
{

 PORTB = 0x00;           //电平设置
 DDRB = 0xFF;           //方向输出

}
void SPI_init()
{
  SPCR=(1<   
}


//*************************************************************************
//   主程序
//*************************************************************************

void main()

  system_init();                               //系统IO口初始化
  SPI_init();                                  //SPI初始化
  while(1)
  {
    for(da_data=0x0000;da_data<0x0ffc;da_data++)
    {
      cs0;                                    //使能DAC
      da_data2=(da_data&0xff00);               //提取数据的高8位
      da_data2>>=8;                            //高8位移到低8位,便于赋值
      SPDR=da_data2;                           //写数据的高8位到SPI数据寄存器
      SPDR=da_data&&0x00ff;                    //写数据的低8位到SPI数据寄存器
      delay_ms(1);
      cs1;                                    //关闭使能
    }
  }
}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析