/********************************************************************************************************
*版权信息: 深圳天微电子
*文件名: TM7705_TwoChannel
*单片机型号: STC12C5608AD
*开发环境: Keil uVision4
*晶震频率: 单片机11.0592MHZ、TM7705外部晶振2.4576MHZ
*TM7705基准: 2.5V
*功能说明: 1.此驱动程序采集双通道的AD值,单(双)极性、1倍增益、50HZ、在单极性时AIN1-和AIN2-均接GND
2.从TM7705读取采集到的16bit AD数据后用串口(STC-ISP串口调试助手)在电脑上每个通道显示4个16进制数
*免责声明: 1.此程序为TM7705演示程序,仅作参考之用。
2.如有直接使用本例程程序造成经济损失的,本公司不承担任何责任
*******************************************************************************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit SCLK_TM7705=P2^1; //定义SCLK时钟信号端口
sbit DIN_TM7705=P2^0; //定义DIN数据输入端口
sbit DOUT_TM7705=P1^7; //定义DOUT数据输出端口
sbit DRDY_TM7705=P1^6; //定义DRDY可读AD端口
void delay_us() //短延时函数,晶振11.0592MHZ,延时约1us
{
; ; ;
}
void delay_nms(uchar n) //延时约nms
{
uchar i;
while(n--)
for(i=0;i<125;i++);
}
void write_byte_TM7705(uchar dat1) //将数据dat1写入TM7705
{
uchar i;
SCLK_TM7705=1;
for(i=0;i<8;i++)
{
SCLK_TM7705=0;
delay_us();
if(dat1&0x80) DIN_TM7705=1; //先写高位
else DIN_TM7705=0;
delay_us();
SCLK_TM7705=1;
delay_us();
delay_us();
delay_us();
dat1<<=1;
}
SCLK_TM7705=1;
DIN_TM7705=1;
}
unsigned char read_byte_TM7705() //从TM7705寄存器读数据
{
uchar i,dat2=0;
SCLK_TM7705=1;
for(i=0;i<8;i++)
{
SCLK_TM7705=0;
delay_us();
dat2=(dat2<<1)|DOUT_TM7705; // 高位先读
delay_us();
SCLK_TM7705=1;
delay_us();
delay_us();
delay_us();
}
SCLK_TM7705=1;
return dat2;
}
/*********************************************************************************************
函数名:UART串口初始化函数
调 用:UART_init();
参 数:无
返回值:无
结 果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)
备 注:振荡晶体为11.0592MHz,PC串口端设置 [ 9600,8,无,1,无 ]
/**********************************************************************************************/
void UART_init(void) //串口初始化
{
SCON=0x50;//SCON:串口工作方式1 8-bit UART为0 1,SM2=0,允许串行接收控制位REN=1,TB8=0,RB8=0,TI=0,RI=0;
TMOD=0x20;//SMOD:定时器1,GATE=0,作定时器C/T=0,方式2 8位自动重装载定时器则M1 M0=1 0,定时器0中GATE C/T M1 M0均置0。
PCON=0x80;//设置SMOD=1,串行工作的波特率加倍
TH1=0xfa; //Baud rate:9600Hz
TL1=0xfa;
TR1=1;//启动定时器1运行
EA=1;//开启总中断
ES=1;//开串口中断
}
/*********************************************************************************************
函数名:UART串口发送函数
调 用:UART_T (?);
参 数:需要UART串口发送的数据(8位/1字节)
返回值:无
结 果:将参数中的数据发送给UART串口,确认发送完成后退出
备 注:
/**********************************************************************************************/
void UART_T(unsigned char UART_data) //定义串口发送数据变量
{
SBUF=UART_data; //将接收的数据发送回去
while(!TI); //检查发送中断标志位
TI=0; //令发送中断标志位为0(软件置零)
}
void TM7705_init()
{
uchar i;
SCLK_TM7705=1;
DIN_TM7705=1;
DOUT_TM7705=1;
DRDY_TM7705=1;
for(i=0;i<40;i++)
{
SCLK_TM7705=0;
delay_us();
SCLK_TM7705=1;
delay_us();
}
delay_us();
delay_us();
}
void main()
{
unsigned char n,temp1,temp2;
UART_init();
TM7705_init();
delay_nms(50);
write_byte_TM7705(0x20); //通道1和2共用(0 0 1 0 0 0 0 0),写通讯寄存器下一步写时钟寄存器
write_byte_TM7705(0x04); //50HZ(0 0 0 0 0 1 0 0) 若晶振为2.4576MHZ需设置CLKDIV=0,CLK=1
//write_byte_TM7705(0x08); //20HZ(0 0 0 0 1 0 0 0) 若晶振为2MHZ需设置CLKDIV=1,CLK=0
while(1)
{
UART_T('A'); //标示通道A1
UART_T('1');
UART_T(0x0D); //换行
UART_T(0x0A);
write_byte_TM7705(0x10); //通道1(0 0 0 1 0 0 0 0),写通讯寄存器下一步写设置寄存器
//write_byte_TM7705(0x44); //写入设置寄存器(0 1 0 0 0 1 0 0),自校准模式0 1,1倍增益0 0 0,单极性B/U=1,buf串联设置为0,FSYNC=0;
//write_byte_TM7705(0x40); //写入设置寄存器(0 1 0 0 0 0 0 0),自校准模式0 1,1倍增益0 0 0,双极性B/U=0,buf串联设置为0,FSYNC=0;
write_byte_TM7705(0x58); //写入设置寄存器(0 1 0 0 0 0 0 0),自校准模式0 1,16倍增益0 0 0,双极性B/U=0,buf串联设置为0,FSYNC=0;
for(n=0;n<6;n++)
{
while(DRDY_TM7705==1);
write_byte_TM7705(0x38); //读通道1
delay_nms(10);
temp1=read_byte_TM7705(); //先读高8位
temp2=read_byte_TM7705(); //再读低8位
/***转换到串口显示***/
if(temp1/16>9) //转化为十六进制读数
UART_T(temp1/16+55);
else
UART_T(temp1/16+48);
if(temp1%16>9)
UART_T(temp1%16+55);
else
UART_T(temp1%16+48);
if(temp2/16>9) //转化为十六进制读数
UART_T(temp2/16+55);
else
UART_T(temp2/16+48);
if(temp2%16>9)
UART_T(temp2%16+55);
else
UART_T(temp2%16+48);
UART_T(' '); //空格
UART_T(' ');
}
UART_T(0x0D); //换行
UART_T(0x0A);
UART_T(0x0D);
UART_T(0x0A);
UART_T('A'); //标示通道A2
UART_T('2');
UART_T(0x0D); //换行
UART_T(0x0A);
write_byte_TM7705(0x11); //通道2(0 0 0 1 0 0 0 1),写通讯寄存器下一步写设置寄存器
//Write_byte_TM7705(0x44); //写入设置寄存器(0 1 0 0 0 1 0 0)自校准模式0 1,1倍增益0 0 0,单极性B/U=1,buf串联设置为0,FSYNC=0;
write_byte_TM7705(0x40); //写入设置寄存器(0 1 0 0 0 0 0 0),自校准模式0 1,1倍增益0 0 0,双极性B/U=0,buf串联设置为0,FSYNC=0;
for(n=0;n<6;n++)
{
while(DRDY_TM7705==1);
write_byte_TM7705(0x39); //读通道2
delay_nms(10);
temp1=read_byte_TM7705(); //先读高8位
temp2=read_byte_TM7705(); //再读低8位
/***转换到串口显示***/
if(temp1/16>9) //转化为十六进制读数
UART_T(temp1/16+55);
else
UART_T(temp1/16+48);
if(temp1%16>9)
UART_T(temp1%16+55);
else
UART_T(temp1%16+48);
if(temp2/16>9) //转化为十六进制读数
UART_T(temp2/16+55);
else
UART_T(temp2/16+48);
if(temp2%16>9)
UART_T(temp2%16+55);
else
UART_T(temp2%16+48);
UART_T(' '); //空格
UART_T(' ');
}
UART_T(0x0D); //换行
UART_T(0x0A);
UART_T(0x0D);
UART_T(0x0A);
}
}
void UartIrqProc(void) interrupt 4 //使能串口中断后需有中断处理函数
{
}
TM7705参考代码C语言
需积分: 5 4 浏览量
2022-06-27
23:32:11
上传
评论 2
收藏 5KB RAR 举报
s1022305071
- 粉丝: 6
- 资源: 37
最新资源
- Windows系统下安装与配置Neo4j的步骤
- 基于matlab实现潮流计算和最优潮流计算的程序1,对毕业设计有一定用处.rar
- 基于大数据学习资源推荐系统的设计与实现(部署视频)-kaic.mp4
- 哈工大形式语言和自动机2022期末含答案
- Windows系统下安装与配置Neo4j的步骤
- 哈希算法(Hash Algorithm)是一种将任意长度的二进制数据映射为较短的、固定长度的二进制值的函数.txt
- Windows系统下安装与配置Neo4j的步骤
- 在二叉树或更复杂的树形结构中,先序输出叶结点.txt
- 列出所有祖先结点的概念通常与树形结构或图论中的节点相关.txt
- 基于matlab实现潮流计算程序,MATLAB潮流计算程序.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0