TLC2543芯片AD转换例子

原创 2007年10月11日 16:40:00
/**//*
    TLC2543芯片AD转换例子,采集第2通道AIN2的电压数据,并通过串口发送转换结果
    发送格式为:“转换结果,毫伏数值”。每隔150ms闪亮LED灯。
*/

#include 
<mega8535.h>
#include 
<delay.h>
#include 
<stdio.h>

#define uchar unsigned char
#define uint unsigned int

#define _LED          PORTD.6
#define  TXEN         3

#define TCL2543_EOC     PINB.4      // EOC输出信号   
#define TCL2543_CLK     PORTB.3     // 时钟信号
#define TCL2543_ADIN    PORTB.2     // 数据输入端
#define TCL2543_DOUT    PINB.1      // 数据输出端
#define TCL2543_CS      PORTB.0     // 片选信号
#define TCL2543_DDR     0x0D        // 0000 1101

uchar ct
=0;
void Init(void)
...{
    DDRD 
= 0xFF;
    PORTD 
= 0xFF;
    DDRB 
= TCL2543_DDR;
    PORTB 
= 0xFF;
    
    
// T = 1024*108/11.0592 = 10000us = 10ms
    TCCR0 = 0x05;       // 1024分频, 11.0592M, 10ms定时
    TCNT0 = 148;        // 初值。计数=256-148 = 108
    TIMSK |= 0x01;      // T/C0 溢出中断使能 
    
    UBRRH 
= 0;
    UBRRL 
= 71;            // 9600bps, 11.0592MHz
    UCSRB = (1<<TXEN);  // 发送器使能
    
    SREG.
7 = 1;         // 全局中断使能

    TCL2543_CS 
= 0;     //初始化TLC2543 
    TCL2543_CS = 1;
    TCL2543_CLK 
= 0;
}
   

void delay(uchar   n)   
...{   
    uchar i;   
    
for(i=0; i<n; i++)   
        #asm(
"nop");   
}
   

//    功能:TLC2543驱动模块   
//    输入参数:port通道号   
//    输出参数:ad转换值   
uint read2543(uchar port)   
...{   
    
uint ad=0, i;
    
if(TCL2543_EOC == 0return 0;    // 转换没有结束或不允许转换
    TCL2543_CLK=0;   
    TCL2543_CS
=0;   
    port
<<=4;

    
for(i=0;i<12;i++)   
    
...{   
        
if(TCL2543_DOUT)   ad |= 0x01;   
        
        
if(port&0x80)  TCL2543_ADIN = 1;
        
else    TCL2543_ADIN = 0;
        
        TCL2543_CLK
=1;   
        delay(
3);   
        TCL2543_CLK
=0;   
        delay(
3);   
        port
<<=1;   
        ad
<<=1;   
    }
   
    TCL2543_CS
=1;   
    ad
>>=1;   
    
return(ad);   
}
   

void main(void)
...{      
    
uint t;
    
float p;
    Init();
        
    
while(1)
    
...{
        delay_ms(
250);
        t 
= read2543(2);// 得到转换结果
        
        p 
= (float)t; 
        p 
= p/4096.0;
        p 
= 5000.0*p;   // 转换为毫伏数值,参考电压为5000mV

        printf(
"%d,", t);
        t 
= (uint)p;
        printf(
"%d ", t);        
    }
  
}


// 10ms定时
interrupt [TIM0_OVF] void Timer0(void
...{
    TCNT0 
= 148;
    
if(++ct == 15)  // 150ms
    ...{
        ct 
= 0;
        _LED 
= ~_LED;
    }

}

 

SPS 所有信息分析

UINT CVirtualDevice::Ue(BYTE *pBuff, UINT nLen, UINT &nStartBit) {     //计算0bit的个数     UINT nZero...
  • ww506772362
  • ww506772362
  • 2014年07月22日 10:32
  • 798

记录我的VHDL之路(三)

--/*************************************** --** THIS FILE FOR ADC_TLC2543 MODULE --** 有限状态机练习 --** ...
  • shanyuan007
  • shanyuan007
  • 2015年07月24日 23:05
  • 225

HEVC学习:HM-10.1-dev代码分析之TLibVideoIO库

转载地址:http://blog.csdn.net/zhuyonghao123/article/details/9068181 HEVC学习:HM-10.1-dev代码分析之TLibVideoIO库...
  • zhangyuehuan
  • zhangyuehuan
  • 2015年05月11日 22:16
  • 1168

DuiLib 通用窗口类封装

class WindowImplBase : public CWindowWnd, public INotifyUI, public IMessageFilterUI, public IDi...
  • KingRama
  • KingRama
  • 2014年12月08日 12:33
  • 419

高精确度且线程分离的定时器——多媒体定时器

说道定时器,很多人都会想到Windows定时器SetTimer吧!其实,项目里面原本确实是使用这种方法实现动画效果的,但是后来问题出现了!由于WM_TIMER消息优先级比较低,常常被丢失,导致一个WM...
  • lvtianci
  • lvtianci
  • 2013年03月28日 15:41
  • 431

颜色基本概念和颜色位移

颜色的基本概念:RGB中0x000000是黑色,0xffffff是白色; Alpha当0x00时候是完全透明的,0xff是完全不透明的。 颜色的深度,就是一个像素用多少位来表示,一般图像为8位深度,也...
  • Blues1021
  • Blues1021
  • 2015年03月25日 08:39
  • 1052

Swift中的数据类型

数据类型 swift 中常见的数据类型 Int 、Float、Double、Character、String Array、Dictonary、元组类型(Tuple)、可选类型(Optional)...
  • u012701023
  • u012701023
  • 2015年10月02日 19:10
  • 977

VC2008 实时显示系统时间

转载▼ 1、基本函数: CTime time; time=CTime::GetCurrentTime();//得到当前时间 2、在窗口创建的时候添加定时器 在clas...
  • zhaodiliu
  • zhaodiliu
  • 2013年01月21日 10:58
  • 397

从sps中解析分辨率

static UINT Ue(BYTE *pBuff, UINT nLen, UINT &nStartBit) { //计算0bit的个数 UINT nZeroNum = 0; while (...
  • ljh081231
  • ljh081231
  • 2016年09月14日 09:33
  • 733

服务和应用程序间在用户级的交互(Windows Vista及其后)

PHANDLE GetCurrentUserToken() { PHANDLE currentToken = 0; PHANDLE primaryToken = 0; int...
  • huhaoxuan2010
  • huhaoxuan2010
  • 2017年11月29日 15:11
  • 60
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TLC2543芯片AD转换例子
举报原因:
原因补充:

(最多只允许输入30个字)