漫途悠悠 2024-06-04 15:52 采纳率: 50%
浏览 39
已结题

8051单片机关于ADC0809的应用

如下图所示,8051单片机的P1口接有D0~D7八个LED灯,并通过总线扩外部ROM(27128)和AD转换芯片ADC0809(8)。

img

请根据《微机原理与单片机技术》这门课所学知识,完成下列任务:

  1. 模数转换芯片ADC0809(8)是分别用8051的哪些IO口作为数据总线、地址总线和控制总线?ADC0809(8)的地址范围是多少?
  2. 外部程序存储器27128是分别用8051的那些IO口作为数据总线、地址总线和控制总线?27128的地址范围是多少?
  3. 简述74LS373的功能和作用
  4. 请问图中采用的是什么编址方法?
  5. 利用汇编语言和查询方式完成:依次采样ADC0809(8)的8路模拟输入IN0~IN7;每次转换完成后,将转换结果用8051的P1口所连LED灯显示出来(提示:ACC中转换结果取反再传给P1即可);将八个通道的转换结果依次保存到8051片内RAM中地址30H开始的八个字节中。(提示:不用考虑延时,IN7采样完再返回IN0不断循环)
  6. 利用汇编语言和中断方式完成:依次采样ADC0809(8)的8路模拟输入IN0~IN7;每次转换完成后,将转换结果用8051的P1口所连LED灯显示出来(提示:ACC中转换结果取反再传给P1即可);将八个通道的转换结果依次保存到8051片内RAM中地址30H开始的八个字节中。(提示:不用考虑延时,IN7采样完再返回IN0不断循环,做好外部中断1入口)
  • 写回答

18条回答 默认 最新

  • bug菌¹ 优质创作者: Java、算法与数据结构技术领域 2024-06-05 00:17
    关注

    该回答引用ChatGPT,望对题主有所帮助/启发;若有帮助,还望采纳🤝🤝🤝


    ADC0809是一款8位模拟数字转换器,8051单片机是常用的微控制器,与ADC0809结合使用可以实现模拟信号的采集和转换。以下是对您提出问题的回答:

    ADC0809与8051单片机的接口

    1. 数据总线:ADC0809的数据总线D0~D7通常与8051单片机的P0口相连。

    2. 地址总线和控制总线:ADC0809使用3条地址线ALE、ALE'(地址锁存器使能)和WR(写信号)进行通信。其中,ALE通常连接到P1.0,ALE'连接到P1.1,WR连接到P1.2。

    3. 地址范围:ADC0809的地址范围取决于其连接方式和8051的地址映射。如果ADC0809的地址线直接连接到8051的某些I/O端口,那么地址范围就是这些端口的输出值。

    外部ROM 27128与8051单片机的接口

    1. 数据总线:27128的数据总线D0~D7通常与8051单片机的P0口相连。

    2. 地址总线:27128的地址总线A0A15或A0A17(取决于27128的型号)通常连接到8051单片机的P2口。

    3. 控制总线:27128的控制线包括OE(输出使能)和CE(芯片使能),它们可以连接到8051的某些I/O端口。

    4. 地址范围:27128的地址范围取决于8051单片机的地址空间和27128的地址线。例如,如果使用P2口作为地址线,且P2口所有位都连接到27128,则地址范围为0x0000到0x3FFF。

    74LS373的功能和作用

    74LS373是一个8位三态D型寄存器,它具有以下功能:

    • 数据锁存:在写操作时,可以锁存数据到寄存器中。
    • 三态输出:输出可以是高电平、低电平或高阻态,这使得它可以用于总线驱动。

    在8051单片机系统中,74LS373通常用于扩展数据总线,允许多个设备共享同一数据总线。

    编址方法

    图中可能采用的是内存映射编址方法,其中外设(如ADC0809和27128)被映射到特定的内存地址空间。

    汇编语言编程

    查询方式编程

    ORG 100h ; 程序起始地址
    MOV DPTR, #ADC0809_CONTROL ; ADC0809控制寄存器地址
    MOV R0, #30H ; 结果存储起始地址
    MOV A, #080H ; 初始通道设置为IN0
    
    START: MOVX A, @DPTR ; 写入通道选择和开始转换命令
    ANL A, #0F0H ; 清除低四位
    ORL A, #08H ; 设置输入通道
    MOVX @DPTR, A ; 发送控制字
    
    WAIT: JB ADC0809_EOC, WAIT ; 等待转换结束
    
    MOVX A, @ADC0809_DATA ; 读取转换结果
    CPL A ; 取反显示
    MOV P1, A ; 显示到LED
    MOV @R0, A ; 存储到RAM
    INC R0 ; 增加存储地址
    INC A ; 增加通道号
    CJNE A, #081H, START ; 如果不是IN7,则继续
    SJMP START ; 循环回到IN0
    

    中断方式编程

    中断方式编程需要设置外部中断1,并在中断服务程序中处理ADC0809的数据采集。以下是中断服务程序的示例:

    ORG 30H ; 中断向量地址
    AJMP INT1 ; 跳转到中断服务程序
    
    ORG 100H ; 程序起始地址
    MOV TMOD, #20H ; 设置定时器1为8位自动重装模式
    MOV TH1, #0FDH ; 定时器1重装值
    MOV TL1, #0FDH ; 定时器1初始值
    MOV PCON, #00H ; 关闭掉SMOD位
    SETB TR1 ; 启动定时器1
    
    SETB EX1 ; 开启外部中断1
    SETB IT1 ; 设置外部中断1为边沿触发
    SETB EA ; 开启全局中断
    
    MOV DPTR, #ADC0809_CONTROL ; 初始化ADC0809控制寄存器地址
    MOV R0, #30H ; 初始化结果存储起始地址
    MOV A, #080H ; 设置初始通道为IN0
    
    MAIN: SJMP MAIN ; 主循环,等待中断
    
    INT1: MOVX A, @DPTR ; 发送控制字开始转换
    ANL A, #0F0H
    ORL A, #08H
    MOVX @DPTR, A
    
    WAIT_INT: JB ADC0809_EOC, WAIT_INT ; 等待转换结束
    CLR EX1 ; 清除外部中断1标志
    
    MOVX A, @ADC0809_DATA ; 读取转换结果
    CPL A ; 取反显示
    MOV P1, A ; 显示到LED
    MOV @R0, A ; 存储到RAM
    INC R0 ; 增加存储地址
    INC A ; 增加通道号
    CJNE A, #081H, INT1_END
    MOV A, #080H ; 循环回到IN0
    
    INT1_END: SETB EX1 ; 设置外部中断1
    RETI ; 中断返回
    
    ADC0809_EOC EQU 20H ; ADC0809转换结束标志位
    ADC0809_DATA EQU 40H ; ADC0809数据端口地址
    ADC0809_CONTROL EQU 80H ; ADC0809控制端口地址
    

    请注意,以上代码仅为示例,具体的寄存器地址和标志位需要根据实际硬件连接和配置来确定。此外,汇编语言编程需要对8051单片机的指令集和编程模型有深入的理解。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(17条)

报告相同问题?

问题事件

  • 系统已结题 6月16日
  • 已采纳回答 6月8日
  • 赞助了问题酬金50元 6月4日
  • 创建了问题 6月4日