历史上的今天
今天是: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_(); //实验中没有启用
}
上一篇:C51独立按键的识别示例程序
史海拾趣
|
吴水林的学习笔记 怎样用单片机模拟PWM 版本:v2 在讲解PWM 之前,让我们来了解几个和PWM 相关的词汇。 1. 频率: 频率f 是周期T 的倒数,即f =1/T。而像中国使用的电是一种正弦交流电,其频 率是50Hz,也就是它一秒钟内做了50 次周期性变化 ...… 查看全部问答> |
|
为什么在装activesync的时侯 他老是出现“路径我的文档里包含无效字符” 为什么在装activesync的时侯 他老是出现“路径我的文档里包含无效字符\" 还有啊 在哪里下载Connect Emulator with ActiveSync … 查看全部问答> |
|
在编写串口通信程序时,我看到的 WriteFile( HANDLE hFile, //串口的句柄 LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, //要写入的数据的字节数 L ...… 查看全部问答> |
|
一款安防模拟矩阵BOM分析,提前声明不是给NS和TI,ADI做广告。选用ALTERA的EP1C3T144C8N, 模拟交叉矩阵芯片用AD8111,AD8113.周边的电源芯片就选用NS和TI的芯片。LM1117最通用了,还有LM2596。… 查看全部问答> |
|
由于想有坛友提过用LM811DIY步进电机驱动器,我觉得可行,所以下午看了一下步进电机,这个电机我感觉还是挺好的 57步进电机 价格50元(如果团购,价格会低一些) [ 本帖最后由 wanghongyang 于 2011-4-16 18:23 编辑 ]… 查看全部问答> |
|
买了一块DSP28335开发板,使用产商提供的源代码例子进行测试。该例子的功能是LED轮替闪烁: 部分源码: void main(void) { while(1) { LED1=~LED1; & ...… 查看全部问答> |
|
【TI首届低功耗设计大赛】基于MSP430的多功能仪表(1)----系统总体结构 MSP430FR5969的功能是非常强大的,一直在琢磨拿来做什么呢?刚好手头缺个示波器,那干脆来做个示波器吧。先来看看示波器的功能: 1.有个3.5寸的屏幕显示波形 2.能够测量两路 3.采用触摸按键和按钮按键结合的方式。 4.采样率理论 ...… 查看全部问答> |




