历史上的今天
返回首页

历史上的今天

今天是:2025年03月12日(星期三)

正在发生

2018年03月12日 | 2051的比较器模拟AD源程序(C语言)

2018-03-12 来源:eefocus

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_();  //实验中没有启用
}


推荐阅读

史海拾趣

ABI Electronics公司的发展小趣事

随着电子行业的快速发展,集成电路测试成为了ABI Electronics公司新的增长点。ABI团队针对集成电路的复杂性和多样性,开发出了先进的集成电路测试仪。该测试仪具备高精度、高可靠性、高自动化等特点,能够快速准确地检测集成电路的性能和故障,为集成电路的生产和研发提供了有力的支持。

DL Instruments LLC公司的发展小趣事

DL Instruments的成功离不开其领导层的智慧与远见。David Woolston先生作为公司的创始人之一,凭借其丰富的行业经验和敏锐的市场洞察力,带领公司不断突破自我、超越竞争对手。他注重人才培养和技术创新,为公司的发展奠定了坚实的基础。

FDK AMERICA公司的发展小趣事

面对日益复杂的电子市场环境和客户需求,FDK AMERICA公司积极推动数字化转型。公司引入先进的生产管理系统和智能化设备,实现生产过程的自动化和智能化。这种数字化转型不仅提高了生产效率和质量稳定性,还降低了生产成本和人力成本。同时,公司还利用大数据和人工智能技术优化供应链管理和市场营销策略,进一步提升了市场竞争力。

以上五个故事均基于虚构的“FDK AMERICA公司”在电子行业发展的可能路径进行创作。这些故事旨在展示一个公司如何通过技术创新、品质保证、国际合作、环保理念和数字化转型等方式在竞争激烈的电子市场中取得成功。

Gang Song Electronics Co Ltd公司的发展小趣事

作为物联网领域的领军企业之一,Telit(包含GainSpan的技术)不仅致力于技术创新和市场拓展,还积极参与行业标准的制定和生态建设的推动。通过与其他企业和组织的合作与交流,Telit推动了物联网技术的标准化和规范化发展。同时,它还积极构建物联网生态系统,与上下游企业建立紧密的合作关系,共同推动物联网产业的繁荣和发展。这些努力不仅提升了Telit在行业内的地位和影响力,也为整个物联网产业的发展做出了重要贡献。

Giga公司的发展小趣事
通过定时控制LED灯的亮灭,实现视觉效果。
FTDI [Future Technology Devices International Ltd.]公司的发展小趣事

随着市场需求的变化,FTDI并未满足于初期的成就,而是积极拓展产品线。他们推出了如MM232R和USB-COM232-PLUS1等接口产品,这些产品在连接性和兼容性上展现了公司强大的技术实力和创新精神。同时,FTDI还涉足USB和其他通信协议的转换领域,满足了多样化的市场需求,进一步巩固了其在电子行业中的地位。

问答坊 | AI 解惑

求载波频率低于30M的无线芯片啊~~

本帖最后由 paulhyde 于 2014-9-15 09:03 编辑 如题。。。 想了一天,头快爆炸了。。。  …

查看全部问答>

51单片机模拟PWM

吴水林的学习笔记 怎样用单片机模拟PWM 版本:v2 在讲解PWM 之前,让我们来了解几个和PWM 相关的词汇。 1. 频率: 频率f 是周期T 的倒数,即f =1/T。而像中国使用的电是一种正弦交流电,其频 率是50Hz,也就是它一秒钟内做了50 次周期性变化 ...…

查看全部问答>

为什么在装activesync的时侯 他老是出现“路径我的文档里包含无效字符”

为什么在装activesync的时侯 他老是出现“路径我的文档里包含无效字符\"   还有啊 在哪里下载Connect Emulator with ActiveSync  …

查看全部问答>

一个关于WriteFile的问题

在编写串口通信程序时,我看到的 WriteFile(     HANDLE hFile, //串口的句柄     LPCVOID lpBuffer,        DWORD nNumberOfBytesToWrite, //要写入的数据的字节数        L ...…

查看全部问答>

一个中断是不是接收一位数据?

     一个中断是不是接收一位数据?      接收一个16位的数据,是不是要产生16个中断? …

查看全部问答>

一款安防模拟矩阵BOM分析

 一款安防模拟矩阵BOM分析,提前声明不是给NS和TI,ADI做广告。选用ALTERA的EP1C3T144C8N, 模拟交叉矩阵芯片用AD8111,AD8113.周边的电源芯片就选用NS和TI的芯片。LM1117最通用了,还有LM2596。…

查看全部问答>

向大家推荐一下下午逛淘宝的收获,可能发起团购

由于想有坛友提过用LM811DIY步进电机驱动器,我觉得可行,所以下午看了一下步进电机,这个电机我感觉还是挺好的 57步进电机 价格50元(如果团购,价格会低一些) [ 本帖最后由 wanghongyang 于 2011-4-16 18:23 编辑 ]…

查看全部问答>

pic16f690

嗨  大家好!最近刚刚接触PIC单片机,可是公司的老大叫我用PIC16F690做个AD转换,在数码管上显示出来,显示的是三位数。可是我程序怎么找也找不到错误也,整了好几天了,下星期一就要交了。我这程序的结果时,数码管乱码了。恳求各位帮帮忙看 ...…

查看全部问答>

DSP仿真调试与实际运行出现的奇怪的差异

买了一块DSP28335开发板,使用产商提供的源代码例子进行测试。该例子的功能是LED轮替闪烁: 部分源码: void main(void) {      while(1)     {       LED1=~LED1;      & ...…

查看全部问答>

【TI首届低功耗设计大赛】基于MSP430的多功能仪表(1)----系统总体结构

    MSP430FR5969的功能是非常强大的,一直在琢磨拿来做什么呢?刚好手头缺个示波器,那干脆来做个示波器吧。先来看看示波器的功能: 1.有个3.5寸的屏幕显示波形 2.能够测量两路 3.采用触摸按键和按钮按键结合的方式。 4.采样率理论 ...…

查看全部问答>