用户注册 | 登录 | 帮助中心 | 网站地图 | 加入收藏 | English

网站首页 产品列表 软件下载 技术资料 付款方式 发货查询 关于我们 淘宝商城 论坛
搜索 高级/组合搜索
网站文章
所有文章
站内新闻
单片机工具资料
汇编程序实例
C语言程序实例
单片机提高资料
单片机初学资料
单片机软件下载
单片机技术资料
  您的位置: 首页 >> 文章列表 >> mega162驱动TLC1543源代码
mega162驱动TLC1543源代码

作者:单片机爱好者  转载自:单片机工具之家  发布日期:2011-4-17

mega162具有以下特性:1. 双USART; 2. 低能耗,工作电压低; 3. 多个I/O可以当作外部中断,相比之下M16只有3个外部中断可用。

    当初选型mega162的时候是看中了它的双USART的功能;但是它却没集成A/D,当想要扩展A/D功能的时候,只有外部挂接A/D芯片了;这本不是AV先生的初衷,因为许多AVR单片机集成了A/D、EEPROM。

    外部A/D芯片选用TI公司的TLC1543,这是一个11通道、10位的A/D,速度38ksps,应用非常广泛,下面是根据51BBS龙版主的C源码转嫁过来的。设计主要注意以下几个方面:

    1。AVR具有 1指令/时钟周期的特性,同时又可以预取指令,提高了指令执行速度(1Mips/MHz);传统51是每 1指令/6个时钟周期。使在同样外部晶振的条件下,ADD和DEC的执行时间,AVR比51快了6倍(这个可能不太严格,由于内核构架的不同),所以在用nop或者i++/i--做芯片时序延时的时候,要考虑时间是否够。

    2。AVR的端口是可设置方向的,相对于TLC为进的端口,AVR要设置为出,反之亦然。

    3。AVR的端口逻辑有专门的寄存器,比如PINA是PA口的寄存器,这个寄存器只读,当判断AVR的端口电平高低的时候,只能访问它。

     下面是我的代码:由于网页原因,格式总靠左。本来我是参照“华为编程规范”做的。

/*----------------------------------------------------------------   
*File Name: UPSSpyMain_AD.c                                  -
*Description: 从TLC1543读取采样值,形参port是采样的通道号       -
*Project:                                                        -
*MCU type: Mega162           7.3728mhz                                -
                                                                 -
*Company: WY                                               -
*Compiler: ICCAVR6.30                                       -
*MODIFY:        郭准 06.3.19                                     -
-----------------------------------------------------------------*/
#include <iom162v.h>
#include <macros.h>
#include <eeprom.h>
#include <ctype.h>
#include <float.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
//-----------------
#define uchar unsigned char
#define uint  unsigned int
#define ulint unsigned long int


#define  nop()  NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();

//-----------------TLC1543 端口定义
#define CLOCK  0   //PORTC的0位
#define D_IN   1   //PORTC的1位
#define D_OUT  2   //PORTC的2位
#define _CS    3   //PORTC的3位
//-----------------端口电平变化的 定义
#define CLOCK_0  PORTC&=~(1<<CLOCK)
#define CLOCK_1  PORTC|=(1<<CLOCK)

#define D_IN_0  PORTC&=~(1<<D_IN)
#define D_IN_1  PORTC|=(1<<D_IN)

#define D_OUT_0  PORTC&=~(1<<D_OUT)
#define D_OUT_1  PORTC|=(1<<D_OUT)

#define _CS_0  PORTC&=~(1<<_CS)
#define _CS_1   PORTC|=(1<<_CS)

//------------------------------------------------------
//功能:从TLC1543读取采样值
//入口:channel = 通道号 .0:0通道;1:1通道。。。。。。。
//出口:
//设计:郭准,伟业,2006/3/19
//------------------------------------------------------
uint read1543(uchar channel)
{
   uint  ad;
   uint  i;
   uchar al=0;
   uchar ah=0;
//----------------端口方向 
   PORTC = 0xFF; //PC0,PC1,PC3推挽1输出;PC2  I/O带上拉电阻输入
   DDRC  = 0xFB; //

   CLOCK_0;                    //时钟源初始为低
   _CS_0;                      //片选为低,选中芯片
//---------------等待一个设置时间+两个内部系统时钟的下降沿 
  for(i=0;i<21;i++)
  {;}
//---------------把通道号打入1543
   channel<<=4;                    //左移4位的作用是为了,下面高位比较方便
   al=0;ah=0;                   
   for (i=0;i<4;i++)
   {  
       if((channel&0x80))
   {
       D_IN_1;
   nop();
   }
   else
   {
       D_IN_0;
   nop();
   }
       CLOCK_1;                //时钟的下降沿 锁存数据,地址移入
   nop();
       CLOCK_0;
       channel<<=1;
   }
  
//---------------//填充6个CLOCK
   for (i=0;i<6;i++)            //采样一直持续6个 I/O CLOCK周期
   {
       CLOCK_1;
   nop();
       CLOCK_0;
   nop(); 
   }
   nop();
//---------------//等待AD转换
   _CS_1;                    
   for(i=0;i<12;i++) //多个单周期延时nop,微秒级延时
   {
      nop();
   }                 
   _CS_0;
   nop();
//---------------//取D9,D8
   for (i=0;i<2;i++)
   {
//       D_OUT_1;
       ah<<=1;
   CLOCK_1;

       if (PINC&(1<<D_OUT))
   {
       ah|=0x01;
   }
  
       CLOCK_0;
   }
//---------------//取D7--D0
   for (i=0;i<8;i++)
   {
   al<<=1;
       CLOCK_1;   
     
       if (PINC&(1<<D_OUT))// if (PINC&(1<<D_OUT))
   {
       al|=0x01;
   }
       CLOCK_0;
   }

   _CS_1;      // 关闭1543
//---------------//得到AD值
   ad=(uint)ah;
   ad<<=8;
   ad|=al;
  
   return (ad);
}

【版权声明】
  1. 任何网站转载本站内容必需注明“来源:单片机工具之家”。
  2. 本网转载自其它媒体的信息,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。
  3. 未经本站明确许可,任何网站不得非法盗链软件下载连接及抄袭本网站原创内容资源。
  4. 违反上述声明者,本网将追究其相关法律责任。谢谢!


关于我们
网站介绍
联系我们
付款方式
银行汇款
货到付款
发货方式
快递运输
上门自提
售后服务
退换货政策
质保承诺
购买方式
购物流程
在线订购

公司名称:深圳市乾龙盛电子科技有限公司    网站名称:单片机工具之家
公司地址:广东省深圳市宝安区龙华镇民治路潜龙花园惠宁阁13-G   联系电话:0755-28187975  13715306011  传真:0755-28187976
展销柜台:广东省深圳市福田区新亚洲电子商城二期三楼N3D033室(华强电子世界附件)【查看地图】   联系电话:0755-82543360
:淘宝商店   :qls@cxqmcu.com   :qls@cxqmcu.com
销售点击Q我:243355504 (唐永红)先生   技术支持点击Q我:443935535 (钟先生)
网站版权:单片机工具之家  粤ICP备09028690号