电子产业
数字化服务平台

扫码下载
手机洽洽

  • 微信小程序

    让找料更便捷

  • APP

    随时找料

    即刻洽谈

    点击下载PC版
  • 公众号

    电子元器件

    采购信息平台

  • 移动端

    生意随身带

    随时随地找货

  • 华强商城公众号

    一站式电子元器件

    采购平台

  • 芯八哥公众号

    半导体行业观察第一站

AT89C2051实现A/D转换的C51程序

来源: 作者:华仔 浏览:659

标签:

摘要:* 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 &quo

* 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

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

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

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

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

// 全局变量定义
Uchartimer1, // 通用延时计数器
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_();//实验中没有启用
}

型号 厂商 价格
EPCOS 爱普科斯 /
STM32F103RCT6 ST ¥461.23
STM32F103C8T6 ST ¥84
STM32F103VET6 ST ¥426.57
STM32F103RET6 ST ¥780.82
STM8S003F3P6 ST ¥10.62
STM32F103VCT6 ST ¥275.84
STM32F103CBT6 ST ¥130.66
STM32F030C8T6 ST ¥18.11
N76E003AT20 NUVOTON ¥9.67
Baidu
map