单片机AT89S52和ADC0809连用时单片机启动ADC0809的汇编程序

单片机AT89S52和ADC0809连用时单片机启动ADC0809的汇编程序,第1张

启动ADC0809的汇编程序,仅仅两行而已:

MOV DPTR, #ADC0809的地址 这个地址,取决于单片机和0809的之间连线

MOVX @DPTR, A

这两行执行后,0809就启动了。

/*  名称:ADC0809 数模转换与显示

说明:ADC0809 采样通道 3 输入的

模拟量,转换后的结果显示在数码管上。*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

//各数字的数码管段码(共阴)

uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}

sbit CLK=P1^3  //时钟信号

sbit ST=P1^2  //启动信号

sbit EOC=P1^1  //转换结束信号

sbit OE=P1^0  //输出使能

//延时

void DelayMS(uint ms)

{

uchar i

while(ms--) for(i=0i<120i++)

}

//显示转换结果

void Display_Result(uchar d)

{

P2=0xf7  //第4 个数码管显示个位数

P0=DSY_CODE[d%10]

DelayMS(5)

P2=0xfb  //第3 个数码管显示十位数

P0=DSY_CODE[d%100/10]

DelayMS(5)

P2=0xfd  //第2 个数码管显示百位数

P0=DSY_CODE[d/100]

DelayMS(5)

}

//主程序

void main()

{

TMOD=0x02  //T1 工作模式 2

TH0=0x14

TL0=0x00

IE=0x82

TR0=1

P1=0x3f  //选择 ADC0809 的通道3(0111)(P1.4~P1.6)

while(1)

{

ST=0ST=1ST=0  //启动 A/D转换

while(EOC==0)  //等待转换完成

OE=1

Display_Result(P3)

OE=0

}

}

//T0 定时器中断给 ADC0809 提供时钟信号

void Timer0_INT() interrupt 1

{

CLK=~CLK

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7873498.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存