本代码段基于AD7705/TM7705 中文参考手册编写,采用软件SPI方式读写,其中引脚连接为:

AD7705->单片机

GND------->GND

VCC------->VCC

RST不接

CS------->P1^4

SCK----->P1^0

DN------->P1^1

DOUT--->P1^2

DRDY--->P1^3

主函数代码:

#include <REGX52.H>
#include "my_spi.h"
#include "my_7705.h"
//#include "my_iic.h"
#include "my_uart.h"
#include "stdio.h"#define uint16_t  unsigned short int
#define uint8_t unsigned charvoid Delay_ms(int time)
{int i=0;for (;time>0;time--){for (;i<11000;i++);}
}void main()
{uint8_t Data[10]={0x01,0x02,0x03,0x04,0x05};float ad7705_data=0;My_UART_Init();printf("Serial Init Complete\n");ad7705_init();printf("AD7705 Init Complete\n");while (1){ad7705_data=get_7705_data()*5.0/0xffff;printf("%f\n",ad7705_data);}
}

串口部分代码:(my_uart.h),包含重定向printf();

#include "regx52.h"#define uint8_t unsigned charvoid My_UART_Init(void);
void Serial_Send_1Byte(unsigned char Str);
void Serial_Print(unsigned char *Data);
void Serial_Print_Float(float Num);

串口部分代码:接收部分还未测试,仅供参考(my_uart.c)

#include "my_uart.h"
#include "string.h"
#include "stdio.h"uint8_t RxBuf[10]={0};
uint8_t Rx_Cnt=0;
uint8_t TEST_Num=66;void My_UART_Init(void)
{SCON=0X50;            //设置为工作方式1 ,既然是方式一,自然要确定波特率,设置定时器1TMOD=0X20;         //8位重装载PCON=0X00;TH1=0xfd;                //波特率9600TL1=0Xfd;ES=1;                       //打开通信中断EA=1;                      //打开总中断TR1=1;                  //打开计数器
}void Serial_Send_1Byte(unsigned char str)
{ES=0;SBUF=str;while(!TI);//TI等于1,表示数据发送完成TI=0;ES=1;
}void Serial_Print(unsigned char *Data)
{while (*Data!='\0'){Serial_Send_1Byte(*Data++);}
}char putchar (unsigned char Data)
{Serial_Send_1Byte(Data);return Data;
}void Serial_Print_Float(float Num)
{char String_temp[21]={0};sprintf(String_temp,"%f",Num);printf("%s",String_temp);
}void Serial_INT(void) interrupt 4
{if (TI){TI=0;}else if (RI){*RxBuf=SBUF;printf("Rx is %s\t",RxBuf);printf("Rx_Cnt is %c\n",TEST_Num);if (Rx_Cnt==10){Rx_Cnt=0;memset(RxBuf,0,10);}RI=0;}
}

软件SPI驱动:(my_spi.h)

#include <REGX52.H>#define uint16_t  unsigned short int
#define uint8_t unsigned charsbit SCLK=P1^0;
sbit MOSI=P1^1;
sbit MISO=P1^2;#define DATA_0 (MOSI=0)
#define DATA_1 (MOSI=1)#define SCLK_0 (SCLK=0)
#define SCLK_1 (SCLK=1)//#define uint8_t unsigned charvoid SPI_Write_Byte(uint8_t Data);
void SPI_Write(uint8_t *Data,uint8_t length);uint8_t SPI_ReadWrite_Byte(uint8_t Data);

软件SPI驱动:(my_spi.c)

#include <REGX52.H>#include "my_spi.h"void SPI_Delay(void)
{int i,j;for (i=0;i<1;i++){for (j=0;j<24;j++);}
}
static SPI_Send(uint8_t Data)
{int i=0;#ifdef SPI_DEBUGMISO=0;#endiffor (i=8;i>0;i--){SCLK_0;if (Data&0x80)DATA_1;elseDATA_0;SCLK_1;Data=Data<<1;}DATA_1;
}/*软件SPI*/
void SPI_Write_Byte(uint8_t Data)
{SPI_Send(Data);
}void SPI_Write(uint8_t *Data,uint8_t length)
{while (length--){SPI_Send(*Data++);}
}uint8_t SPI_ReadWrite_Byte(uint8_t Data)
{uint8_t i=0;uint8_t Data_Temp=0;for (i=0;i<8;i++){SCLK_0;if (Data&0x80)DATA_1;elseDATA_0;if (MISO==1)Data_Temp|=1;SCLK_1;Data_Temp=Data_Temp<<1;Data=Data<<1;}DATA_1;return Data_Temp;
}

AD7705驱动:(my_7705.h)

#include "REGX52.h"sbit DRDY=P1^3;
sbit AD_CS=P1^4;#define AD_ON  (AD_CS=0)
#define AD_OFF  (AD_CS=1)#define uint16_t  unsigned short int
#define uint8_t unsigned charvoid ad7705_init(void);uint16_t get_7705_data(void);

AD7705驱动:(my_7705.c)

#include "my_7705.h"
#include "my_spi.h"
#include "REGx52.h"void ad7705_init(void)
{AD_ON;SPI_Write_Byte(0x20);SPI_Write_Byte(0x0c);SPI_Write_Byte(0x10);SPI_Write_Byte(0x40);AD_OFF;
}uint16_t get_7705_data(void)
{uint8_t Data_L=0,Data_H=0;uint16_t Sum=0;AD_ON;while (DRDY==1);SPI_Write_Byte(0x38);Data_H=SPI_ReadWrite_Byte(0xff);Data_L=SPI_ReadWrite_Byte(0xff);Sum=Data_H<<8|Data_L;AD_OFF;return Sum;
}

测试部分:

通道1 0V电压 测试:

通道1 5V电压测试:

转换公式:(16BitAD 满量程输出为0xFFFF(2^16))

VCC为5V

串口输出:

Arduino 串口绘图输出:

STC89C52RC的AD7705读写实验(软件SPI)相关推荐

  1. SD卡读写实验(SPI模式)

    对于 SD 卡的 SPI 模式而言,采用的 SPI 的通信模式为模式 3,即 CPOL=1,CPHA=1,在 SD 卡 2.0 版 本协议中,SPI_CLK 时钟频率可达 50Mhz. SD 卡的 S ...

  2. PCM开发板模块实验指导--SPI读写PSRAM64实验

    模块推荐:https://item.taobao.com/item.htm?ft=t&id=671629736762         32---SPI读写PSRAM64实验实验:        ...

  3. [学习笔记]STM32F1软件SPI读写W25Qx(寄存器、标准库、HAL库)

    目录 9. 软件SPI读写W25Qx 0. 博主调侃: 1. 实验内容及步骤: 2. 硬件说明 3. 步骤详细讲解 3.1 配置GPIO 3.2 软件SPI读写Byte(模式0或模式3) 3.3 读取 ...

  4. STM-32:SPI通信协议/W25Q64简介—软件SPI读写W25Q64

    目录 一.SPI简介 1.1电路模式 1.2通信原理 1.3SPI时序基本单元 1.3.1起始和终止 1.3.2交换字节 二.W25Q64 2.1W25Q64简介 2.2W25Q64硬件电路 2.3W ...

  5. stm32Cubemx实用篇(四):SD卡读写实验

    stm32Cubemx实用篇(四):SD卡读写实验 本章将介绍使用stm32Cubemx软件配置SD卡读写.并通过串口打印出相应信息. 硬件平台:Stm32H743IIT6 +16GB TF卡 软件: ...

  6. GD32F303调试小记(二)之SPI(软件SPI、硬件SPI、硬件SPI+DMA)

    前言 目前有一个项目中用到了TFT-LCD,其驱动芯片为ILI9341.为更好的达到显示效果,在最终的代码中我们会使用单片机自带的硬件SPI+DMA模块(由于调试过程中SPI+DMA输出的波形没能驱屏 ...

  7. 软件SPI ADS8684/ADS8688驱动程序

    使用 利用ADS8688采集互感器电压信号,使用软件SPI. 硬件电路 模拟信号输入 ADS8688外围电路 变量及宏定义 //位带操作#define BITBAND(addr, bitnum) (( ...

  8. 联盛德 HLK-W806 (九): 软件SPI和硬件SPI驱动ST7789V液晶LCD

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  9. 【51单片机快速入门指南】5:软件SPI

    目录 硬知识 SPI协议简介 SPI接口介绍 SPI接口连接图 SPI数据传输方向 SPI传输模式 软件SPI程序源码 Soft_SPI.c Soft_SPI.h 普中51-单核-A2 STC89C5 ...

  10. 基于matlab的传热学虚拟实验开发,基于MATLAB的传热学课程虚拟实验软件的开发

    215教育现代化·2018 年 12 月第 49 期 教育信息技术 基于 MATLAB 的传热学课程虚拟实验软件的开发 周永利,李友荣,石万元,张力元,杨晨,卞煜,王国强,李俊,包键 ( 重庆大学 低 ...

最新文章

  1. BZOJ 2592 随机化(伪)
  2. linux运维实战练习
  3. 敏捷开发回顾:使团队更强大pdf
  4. java课堂作业(一)
  5. 前端自适应----单位rem
  6. SpringMVC_Controller注解与RequestMapping
  7. RHEL6基础之一系统内核Kernel与GNU计划及Linux发行版本
  8. PHP的静态变量和引用函数
  9. MAC 电脑里面的“其他”文件是什么占用了
  10. 某大型银行某系统性能调优过程跟踪记录
  11. 分解质因数(包括证明的详解)
  12. paip.c语言gtk开发环境CodeBlocks /QT建立最佳实践
  13. matlab三边定位算法,利用matlab分别对三边测量定位算法和改进算法进行仿真和验证...
  14. 进程杀手 (prockiller)V2.82绿色版
  15. 戴尔笔记本win10系统迁移到新固态硬盘
  16. Linux下U盘变成只读
  17. python学习之 利用蒙特卡洛方法计算PI值
  18. 老破旧ThinkPad机器装Win7
  19. 个性化推荐十大挑战精选
  20. cocos2dx系列--颜色混合BlendFunc

热门文章

  1. 数字类型转换以及函数全介绍
  2. Win7 旗舰版改为专业版(不用重装)
  3. 计算机基础知识进制的转换,计算机基础之各进制间的相互转换
  4. bat文件批量创建文件夹
  5. 智能DNS Smartdns 简介
  6. redimine 插件_3DMine软件与国内外同类软件对比
  7. 通用技术标模板,技术方案书
  8. Django 点击刷新验证码
  9. Mscomm32.ocx注册
  10. 【支持向量机SVM系列教程3】支持向量回归SVR