单片机51和adc0809进行模数转换,还有显示(0---255)程序,同时用51产生500kHZ的脉冲给0809,怎么实现

作者&投稿:由哑 (若有异议请与网页底部的电邮联系)
51单片机 ADC0809模数转换汇编程序 程序有什么问题 数码管不显示(0—5)V~

你要说清楚显示是什么方式送数据,多长时间扫描数码管我才好回答你的问题哦

正好做过,就给你吧!
*************************************
;* *
;* 主程序和中断程序入口 *
;* *
;*************************************
ORG 0000H
LJMP START
ORG 0003H
RETI
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
ORG 002BH
RETI
;
;*************************************
;* *
;* 初始化程序中的各变量 *
;* *
;*************************************
CLEARMEMIO: CLR A
MOV P2,A
MOV R0,#70H
MOV R2,#0DH
LOOPMEM: MOV @R0,A
INC R0
DJNZ R2,LOOPMEM
MOV 20H,#00H
MOV A,#0FFH
MOV P0,A
MOV P1,A
MOV P3,A
RET
;
;*************************************
;* *
;* 主 程 序 *
;* *
;*************************************
START: LCALL CLEARMEMIO ;初始化
MAIN: LCALL TEST ;测量一次
LCALL DISPLAY ;显示数据一次
AJMPMAIN
NOP;PC值出错处理
NOP
NOP
LJMPSTART
;
;*************************************
;* 显 示 控 制 程 序 *
;*************************************
;
DISPLAY: JB 00H,DISP11 ;
MOV R3,#04H ;4路信号循环显示控制
MOV R0,#70H ;显示数据初址70H~73H
MOV 77H,#00H ;显示通道路数初值
DISLOOP1: LCALL TUNBCD ;显示数据转为三位BCD码存入76H、75H、74H(最大5.00v)
MOV R2,#0FFH ;每路显示时间控制 4MS*255
DISLOOP2: LCALL DISP ;调四位显示程序
LCALL KEYWORK1 ;
DJNZ R2,DISLOOP2 ;
INC R0 ;显示下一路
INC 77H ;通道显示数加一
DJNZ R3,DISLOOP1
RET
;
DISP11: MOV A,77H ;
SUBB A,#01H ;
MOV 77H,A ;
ADD A,#70H ;
MOV R0,A ;
DISLOOP11: LCALL TUNBCD ;显示数据转为三位BCD码存入7AH、79H、78H(最大5.00v)
MOV R2,#0FFH ;每路显示时间控制 4MS*25
DISLOOP22: LCALL DISP ;调四位显示程序
LCALL KEYWORK2 ;
DJNZ R2,DISLOOP22
INC 77H ;通道显示数加一
RET
;
;*************************************
;* 显示数据转为三位BCD码程序 *
;*************************************
;显示数据转为三位BCD码存入76H、75H、74H(最大值5.00v)
;
TUNBCD: MOV A,@R0 ;255/51=5.00V运算
MOV B,#51 ;
DIV AB ;
MOV 76H,A ;个位数放入76H
MOV A,B ;余数大于19H,F0为1,乘法溢出,结果加5
CLR F0
SUBB A,#1AH
MOV F0,C
MOV A,#10 ;
MUL AB ;
MOV B,#51 ;
DIV AB
JB F0,LOOP2 ;
ADD A,#5
LOOP2: MOV 75H,A ;小数后第一位放入75H
MOV A,B
CLR F0
SUBB A,#1AH
MOV F0,C
MOV A,#10 ;
MUL AB ;
MOV B,#51 ;
DIV AB
JB F0,LOOP3 ;
ADD A,#5
LOOP3: MOV 74H,A ;小数后第二位放入74H
RET
;
;*************************************
;* ? 显?示 程 序 *
;*************************************
;共阳显示子程序,显示内容在74H—77H
;
DISP: MOV R1,#74H ;共阳显示子程序,显示内容在74H—77H
MOV R5,#0FEH ;数据在P1输出,列扫描在P3.0-P3.3
PLAY: MOV P1,#0FFH
MOV A,R5
ANL P3,A
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
JB P3.2,PLAY1 ;小数点处理
CLR P1.7 ;小数点显示(显示格式为XX.XX)
PLAY1: LCALL DL1MS
INC R1
MOV A,P3
JNB ACC.3,ENDOUT
RL A
MOV R5,A
MOV P3,#0FFH
AJMP PLAY
ENDOUT: MOV P3,#0FFH
MOV P1,#0FFH
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
;
;*************************************
;* ? ? 延时程序 *
;*************************************
;
DL10MS: MOV R6,#0D0H ;10MS延时子程序
DL1: MOV R7,#19H
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET
;
DL1MS: MOV R4,#0FFH ;513+513=1MS
LOOP11: DJNZ R4,LOOP11
MOV R4,#0FFH
LOOP22: DJNZ R4,LOOP22
RET
;
;*************************************
;* ? 电压测量(A/D)子程序 *
;*************************************
; 一次测量数据4个,依次放入70H-73H单元中
;
TEST: CLR A ;模数转换子程序
MOV P2,A
MOV R0,#70H ;转换值存放首址
MOV R7,#04H ;转换4次控制
LCALL TESTART ;启动测试
WAIT: JB P3.7,MOVD ;等A/D转换结束信号
AJMP WAIT
;
TESTART: SETB P2.3 ;测试启动
NOP
NOP
CLR P2.3
SETB P2.4
NOP
NOP
CLR P2.4
NOP
NOP
NOP
NOP
RET
;
MOVD: SETB P2.5 ;取A/D转换数据
MOV A,P0
MOV @R0,A
CLR P2.5
INC R0
MOV A,P2 ;通道地址加1
INC A
MOV P2,A
CJNE A,#04H,TESTEND ;等8路A/D转换结束
TESTEND: JC TESTCON
CLR A ;结束恢复端口
MOV P2,A
MOV A,#0FFH
MOV P0,A
MOV P1,A
MOV P3,A
RET
;
TESTCON: LCALL TESTART
LJMP WAIT
;
;*************************************
;* ? 按键检测子程序 *
;*************************************
;
KEYWORK1: JNB P3.5,KEY1
KEYOUT: RET
;
KEY1: LCALL DISP ;延时消抖
JB P3.5,KEYOUT
WAIT11: JNB P3.5,WAIT12
CPL 00H
MOV R2,#01H
MOV R3,#01H
RET
;
WAIT12: LCALL DISP ;键释放等待时显示用
AJMP WAIT11
;
KEYWORK2: JNB P3.5,KEY1
JNB P3.6,KEY2
RET
;
KEY2: LCALL DISP ;延时消抖用
JB P3.6,KEYOUT
WAIT22: JNB P3.6,WAIT21
INC 77H
MOV A,77H
CJNE A,#04H,KEYOUT11
KEYOUT11: JC KEYOUT1
MOV 77H,#00H
KEYOUT1: RET
;
WAIT21: LCALL DISP ;键释放等待时显示用
AJMP WAIT22
;
END

附录3:
单片机C源程序清单
/*********************************************************************/
// 四路电压表C程序
// 使用keil C51 ver7.09
/*********************************************************************/
/*使用AT89C52单片机,12MHZ晶振,P0口读入AD值,P2口作AD控制,用共阳LED数码管
P1口输出段码,P3口扫描,最高位指示通道(0-7)。*/
#include "reg52.h" //52系列单片机定义文件
#include "intrins.h" //调用_nop_();延时函数用
#define ad_con P2 //AD控制口
#define addata P0 //AD数据计入读入口
#define Disdata P1 //显示数据段码输出口
#define uchar unsigned char//无符号字符(8位)
#define uint unsigned int //无符号整数(16位)
sbit ALE=P2^3; //锁存地址控制位
sbit START=P2^4; //启动一次转换位
sbit OE=P2^5; //0809输出数据控制位
sbit EOC=P3^7; //转换结束标志位
sbit DISX=Disdata^7; //LED小数点
//
//
uchar code dis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
/* 共阳七段LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" */
uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7}; //四位列扫描控制字
uchar data ad_data[8]={0x00,0x00,0x00,0x00};//定义4个数据内存单元
uint data dis[5]={0x00,0x00,0x00,0x00,0x00}; //定义4个显示数据单元、1个数据暂存单元
//
//
/********1毫秒延时子函数**********/
delay1ms(uint t)
{
uint i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++)
;
}
//
//
/***********显示扫描子函数**********/
scan()
{
uchar k,n;
int h;
dis[3]=0x00; //通道初值为0
for(n=0;n<4;n++) //每次显示4个数据
{
dis[2]=ad_data[n]/51; //测得值转换为三位BCD码,最大为5.00V
dis[4]=ad_data[n]%51; // 余数暂存
dis[4]=dis[4]*10; //计算小数第一位
dis[1]=dis[4]/51; //
dis[4]=dis[4]%51; //
dis[4]=dis[4]*10; //计算小数第二位
dis[0]=dis[4]/51; //
for(h=0;h<500;h++) //每个通道值显示时间控制(约1秒)
{
for(k=0;k<4;k++) //四位LED扫描控制
{
Disdata=dis_7[dis[k]];
if(k==2){DISX=0;}
P3=scan_con[k];delay1ms(1);P3=0xff;
}
}
dis[3]++; //通道值加1
}
}
//
//
/*******0809AD转换子函数***********/
test()
{
uchar m;
uchar s=0x00;
ad_con=s;
for(m=0;m<4;m++)
{
ALE=1;_nop_();_nop_();ALE=0; //转换通道地址锁存
START=1;_nop_();_nop_();START=0; //开始转换命令
_nop_();_nop_();_nop_();_nop_(); //延时4微秒
while(EOC==0); //等待转换结束
OE=1;ad_data[m]=addata;OE=0;s++;ad_con=s;//取AD值,地址加1
}
ad_con=0x00; //控制复位
}
//
//
/**************主函数****************/
main()
{
P0=0xff; //初始化端口
P2=0x00;
P1=0xff;
P3=0xff;
while(1)
{
scan(); //依次显示4个通道值一次
test(); //测量转换一次
}
}
//
//
//*********************结束**************************//

呵呵 为你解答
单片机51和adc0809进行模数转换,如何产生500kHZ的脉冲给0809的实现方法:
adc0809的时钟频率一般都很高,可选用500KHZ,都是靠89s51单片机的ALE地址锁存信号
做为adc0809的时钟,ALE地址锁存信号的频率为89s51单片机振荡频率的1/6,如果单片机
的振荡频率=3MHZ,则ALE地址锁存信号的频率=500KHZ.

如果单片机的振荡频率=6MHZ,则ALE地址锁存信号的频率=1MHZ. 要通过一个2分频器后,将频率变为500KHZ.再做adc0809的时钟使用。

呵呵 靠单片机编程来提供500KHZ时钟信号很难做到。 显示电路就自己设计吧,其它的就没什么难度了。

记着,别忘给俺加分啊。

用51产生500kHZ的脉冲,这个可能有点悬,频率达不到。
建议用DDS来做频率。 可以选择ADS9851,

搜:

做而论道 ADC0809

百度一下,即可找到。


求数字稳压电源 用c51单片机做的。要求从键盘输入所需的电压并使用8位...
键盘输入、LED扫描输出的代码,很多地方有例子,自己研究改动一下应该就能用;我认为,DAC输出直接到U2B就可以,不需要U2A;如果需要单片机测量电压,还需要ADC,推荐使用STC12C5410ADC,国产片,便宜,51指令。

微控制器都有哪些型别
PHLIPIS 51PLC系列微控制器(51微控制器): PHILIPS公司的微控制器是基于80C51核心的微控制器,嵌入了掉电检测、模拟以及片内RC振荡器等功能,这使51LPC在高整合度、低成本、低功耗的应用设计中可以满足多方面的效能要求。 STC微控制器 :STC公司的微控制器主要是基于8051核心,是新一代增强型微控制器,指令程式码完全...

做基于单片机的平衡小车,选STM32对比选51的优势
STM32是32位单片机,具有MMU,可以上操作系统。51只是普通的8位单片机。STM32单片机的特点:内核:ARM32位Cortex-M3 CPU,最高工作频率72MHz,1.25DMIPS\/MHz。单周期乘法和硬件除法。存储器:片上集成32-512KB的Flash存储器。6-64KB的SRAM存储器。时钟、复位和电源管理:2.0-3.6V的电源供电和I\/O...

求单片机发展简史,最好别太短。。。
在单片机家族中,80C51系列是其中的佼佼者,加之Intel公司将其MCS –51系列中的80C51内核使用权以专利互换或出售形式转让给全世界许多著名IC制造厂商,如Philips、 NEC、Atmel、AMD、华邦等,这些公司都在保持与80C51单片机兼容的基础上改善了80C51的许多特性。这样,80C51就变成有众多制造厂商支持的、发展出上百品种的大家...

...经常听说底层,中间层,应用层,什么意思? 51单片机也需要这么分层吗...
中间层大概要找比较熟悉应用的人来把硬件功能来做扩展,应用层就随便抓一把人来开发了。这样,多个项目可以公用一个硬件层,有两到三组中间层的支持工程师,然后每个项目各有一组应用工程师就好了。51也可以这样做,这和效率无关,层做得好,执行效率不会影响很大,开发效率提高很多。

c8051f020介绍
片内含CIP-51的CPU内核,它的指令系统与MCS-51完全兼容。其中的C8051F020单片机含有64kB片内Flash程序存储器,4352B的RAM、8个I/O端口共64根I/O口线、一个12位A/D转换器和一个8位A/D转换器以及一个双12位D/A转换器、2个比较器、5个16位通用定时器、5个捕捉/比较模块的可编程计数/定时...

C8051F340的概述
C8051F340器件是完全集成的混合信号片上系统型MCU。y 高速、流水线结构的8051兼容的微控制器内核(可达48MIPS)y 全速、非侵入式的在系统调试接口(片内)y 通用串行总线(USB)功能控制器,有8个灵活的端点管道,集成收发器和1K FIFO RAMy 电源稳压器y 真正10位200 ksps的单端\/差分ADC,带模拟多路器y ...

80c51单片机和c8051单片机有什么区别呢?
C805lFxxx系列单片机是完全集成的混合信号系统级芯片,具有与8051指令集完全兼容的CIP-51内核。它在单片内集成了构成一个单片机数据采集或控制系统所需要的几乎所有模拟和数字外设及其它功能部件。这些外设或功能部件包括:ADC、可编程增益放大器、DAC、电压比较器、电压基准、温度传感器、SMBus\/I2C、UART、SPI、定时器、...

谁有C8051F320的片内温度传感器的程序,越简单越好!大家帮帮忙!不是很...
void ADC0_Init (void); void UART0_Init (void); void PORT_Init (void); void Timer2_Init (int); void Write_COM(unsigned yjcom ); void Write_CHAR(unsigned char yjchar); void YJ_Init(void); void calibrate(void); void wait_one_second (void); int get_temp (void); void SPI0_Init...

关于单片机的种类问题
丰富的片上外围模块 MSP430 系列单片机的各成员都集成了较丰富的片内外设。它们分别是看门狗( WDT )、模拟比较器 A 、定时器 A ( Timer_A )、定时器 B ( Timer_B )、串口 0 、 1 ( USART0 、 1 )、硬件乘法器、液晶驱动器、 10 位 \/12 位 ADC 、 I 2 C 总线直接数据存取( DMA )、端口 O ...

炉霍县13751732476: 单片机ADC0809是如何实现模数转换的? -
银韵艾林: ADC0809 就是模数转换的芯片,从输入端加模拟信号,启动转换后,就开始转换了,结束后,单片机就可以读出结果了.这些,都要写程序的.但首先要画出仿真图,在仿真图上实现.如果有实物开发板就更好了.

炉霍县13751732476: 模数转换器AD0809介绍 -
银韵艾林: 1、AD0809 的逻辑结构 ADC0809 是8 位逐次逼近型A/D转换器.它由一个8路模拟开关、一个地址锁存译码 器、一个A/D 转换器和一个三态输出锁存器组成(见图1).多路开关可选通8个模拟通道, 允许8 路模拟量分时输入,共用A/D 转...

炉霍县13751732476: 单片机数据采集系统设计(51核心,ADC0809模数转换),结合键盘显示器实现八路信号采集,存储,显示功能. -
银韵艾林: 1、假如你要IN0~IN7都显示,那么需要8个n位数码管模块,假如你只用一个n位数码管模块动显8个通道数据,只会一直闪烁.但是,你可以用LCD12864或者1206显示.方法是把采集回来的数据保存到寄存器,然后给1206写数据时一并显示. 2、定义键盘不难,假如你的ADC转换函数为ADC_tran()(函数里面有通道选择),你只需添加形式参数就可以了,比如按键1的时候,会有一个键码key=0x01,channel=key&(相应的转换,成通道值); ADC_tran(uchar channel){ Addr_0809=channel; //Addr_0809是选择通道,后面接着你的转换数据操作程序}

炉霍县13751732476: 51单片机c语言,ADC模数转换的问题 -
银韵艾林: 对于这个,要这么看:假设中断A是优先级高的中断,中断B是优先级低的中断 如果在正常执行的过程中,发生中断A,那么,中断A执行完成后,会返回正常程序; 如果在正常执行过程中,发生中断B,又在中断B处理过程中发生中断A,那么,中断A执行完成后,一定要返回的是中断B,这是由硬件决定的,不是软件决定的,所以,软件没有任何指令可以让中断A执行完成后直接跳过还没有执行完的中断B而直接回到主程序,因为这是硬件决定的,软件做不到,即便你在高级中断A中关闭了中断B,但是因为你原来的中断B还没有执行完,所以,仍然要把没执行完的部分执行下去,才能返回到正常程序.对于ARM系列的可以,对于51来说,是不行的,因为51软件指令不允许修改PC寄存器的值

炉霍县13751732476: 在ADC0809转换启动后,通过中断方式将转换结果读到CPU的正确顺序...
银韵艾林: 利用单片机AT89S51与ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,但要求使用的元器件数目最少. 2. 电路原理图 系统板上硬件连线 a) 把“单片机系统”区域中的P1.0-P1.7与“动态数码显示”区域中的...

炉霍县13751732476: adc0809模数转换后让LCD1602显示汇编怎么处理 -
银韵艾林: 先利用电压互感器将市电高压降为低压,此时是电流信号经过一放大器转换为电压信号,此时依然是交流信号;然后再经过一芯片转换成有效值直流信号,由于此时信号比较小,再需要经过放大器放大,接入AD芯片,将模拟信号数字化(量化...

炉霍县13751732476: AD(模数转换器)做信号采集 前端需要做哪些处理 -
银韵艾林: 前端一般都需要有信号调理电路,让输入信号满足AD输入的要求.比如电压电流的转换,输入范围等等 另外还可能有滤波,放大器等电路,前端需做什么处理,完全取决于你的AD输入参数,和外部输入信号的特性

炉霍县13751732476: 数字电压表的程序设计,谁有啊?说下,谢谢
银韵艾林: 一、设计题目 数字式电压表设计. 二、设计任务 数字式电压表是电压测量的常用仪表,本课题即要求应用单片机、A/D转换器及其他器件组成数字式电压检测仪表. 三、设计要求 1、基本要求 (1)以MCS-51系列单片机为核心器件,组成一个...

炉霍县13751732476: AD0809的接法 -
银韵艾林: ADC0809应该是8位并行数据线的AD芯片吧,八位数据线D0~D7依次接到单片机的某8位IO就好了,地址线AD0~AD2接地,REF+接5V的VCC,REF-接地.而IN0~IN7是模拟电压输入通道,可以依次检测8个通道的模拟电压,因为AD0~AD2接地了,所以模拟量从IN0输入.ALE和START短接,接到单片机任意一个IO,其他的CLOCK,ENABLE和EOC都是一样接到任意一个IO

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网