2051的比较器模拟AD源程序(C语言)

2011-07-13 11:28:20来源: 互联网 关键字:模拟

2051的比较器模拟AD源程序(C语言)

/* io分配:                                       *
;*   OUTPUT:                                                    *
;*      P1.0 ...... 模拟量输入     *
;*      P1.1 ...... DA输入比较基准电压    *
;*      P1.2~7..... R-2R DA电阻网络    *
;*      P3.7 ...... LED 模拟亮度输出    *
;* CPU CLOCK EQU 6M                                             */
//xiaoqi last edit in 2001.11
//#pragma src
#i nclude "AT89x051.h"
#i nclude
#i nclude
#i nclude

//变量类型标识的宏定义,大家都喜欢这么做
#define Uchar unsigned char
#define Uint unsigned int

#define Ledlight() (P3 &= 0x7f)
#define Leddark()  (P3 |= 0x80)

sbit P36 = P3^6;  // 比较器内部判断脚
sbit LED = P3^7;  // 一个发光二级管观察亮度变化

// 内部标志位定义
bit less;   // 比较是否大于 1.小于,0.大于

// 全局变量定义
Uchar timer1,          // 通用延时计数器
 timer2,          // 按键蜂鸣器反应定时器
 adcdata,  // ad转换变量
 pwm1;   // PWM输出比例

// 函数列表
void DelayMs(unsigned int number);      // 毫秒延时
void timers0();           // 在定时器中断中做数码管的扫描显示(ct0)
void Initall(void);          // 系统初始化
void timers1(void);          // TC1定时器中断用于扫描显示与键盘
Uchar adcread(void);   // adc转换程序

void main(void)  using 0
{
 DelayMs(120);
 Initall();
 pwm1 = adcread();
 LED=1;
 while(1)
 {
  pwm1 = adcread();
  timer2=10;
  while (timer2);
 }
}

// 毫秒延时
void DelayMs(unsigned int number)
{
 unsigned char temp;

 for(;number!=0;number--)
  for(temp=112;temp!=0;temp--);
}

/*************************************
   在定时器中断中做LED的PWM输出
*************************************/
void timers0() interrupt 1 using 1
{
 TH0 = 0xff;
 TL0 = 0xd0;
 timer1--;
 if (timer1==pwm1)LED=0;
 if (timer1==0){
  LED=1;
  timer1=0x40;
  timer2--;
  };
}

/****************

;* 6位 ADC转换
;****************/
Uchar adcread(void)
{
 Uchar i=0x3f,temp=0;
 P36 =1;
 P1 = 3; _nop_();_nop_();  // 从零开始
 while ((i--)&& (P36))
  {
  temp += 4;
  P1 = temp|3;
  _nop_();
  }
 temp >>= 2;
 return temp;
}

/****************
;* 系统初始化
;****************/
void Initall(void)
{
 TMOD = 0x11;  // 0001 0001 16进制计数器
 IP = 0x8;  // 0000 1000 t1优先
        IE = 0x8A;  // 1000 1010 t0,t1中断允许
 TCON = 5;  // 0000 0101 外部中断低电平触发
        TR0 = 1;  // 打开定时器中断,IE中已经打开,在明示一下
 TR1 = 0;
        ET0 = 1;
 ET1 = 0;
        P1 = 0xff;
}
 
/*************************************
   TC1定时器中断用于扫描显示与键盘(ct1)
*************************************/
void timers1(void) interrupt 3 using 2
{
_nop_();  //实验中没有启用
}

关键字:模拟

编辑:eeleader 引用地址:http://www.eeworld.com.cn/gykz/2011/0713/article_7163.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于DSP6713实现的IIR格型自适应滤波器
下一篇:基于PIC24FJ64的智能光伏汇流采集装置设计及应用

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利
推荐阅读
全部
模拟

小广播

独家专题更多

TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
迎接创新的黄金时代 无创想,不奇迹
迎接创新的黄金时代 无创想,不奇迹
​TE工程师帮助将不可能变成可能,通过技术突破,使世界更加清洁、安全和美好。
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2017 EEWORLD.com.cn, Inc. All rights reserved