电阻R36、R37在图6-17电路中有何作用。请在100字以内简要说明。 以下是利用MCS-51系列单片机汇编语言实现模拟I2C总线接收N个字节数据的程序段(RDNBYTE),请将汇编程序代码中(9)~(13)空缺处的内容填写完整。表6-21所示为MCS

admin2009-02-15  42

问题 电阻R36、R37在图6-17电路中有何作用。请在100字以内简要说明。
以下是利用MCS-51系列单片机汇编语言实现模拟I2C总线接收N个字节数据的程序段(RDNBYTE),请将汇编程序代码中(9)~(13)空缺处的内容填写完整。表6-21所示为MCS-51系列单片机部分汇编指令及寄存器说明。

程序中已定义了标号为START的启动位子程序、标号为STOP的停止位子程序、标号为MACK的发送应答位子程序、标号为MNACK的发送非应答位子程序、标号为 CACK的应答位检查子程序、标号为WRBYT的向VSDA线上发送1个数据字节的子程序、标号为RDBYT的从VSDA线上读取1个数据字节的子程序。调用RDNBYTE程序的归一化操作命令是        MOV SLA,#SLAR        MOV NUMBYTE,#N        LCALL RDNBYT   【汇编程序代码】        VSDA    EQU    P1.6      ;虚拟I2C总线数据线        VSCL    EQU    P1.5      ;虚拟I2C总线时钟线        SLA     EQU    50H       ;寻址字节存放单元        NUMBYTE EQU    51H       ;传送字节数存放单元        MTD     EQU    30H       ;发送数据缓冲区        MRD     EQU    40H       ;接收数据缓冲区        SLAW0   EQU    0AOH      ;写AT24C64(器件地址为0AOH)        SLAR0   EQU    0A1H      ;读24C64        SLAW1   EQU    40H       ;写PCF8574(器件地址为040H)        SLAR1   EQU    41H       ;读PCF8574        ;模拟I2C总线接收N个字节数据        RDNBYTE:MOV     R3,NUMBYTE                 LCALL   START   ;发送启动位                 MOV     A,SLA  ;发送寻址字节(读)                  (9)                    (10)                   JB      F0,RDNBYTE        RDN:    MOV     R1,#MRD        RDN1:    (11)                   MOV     @R1,A                 DJNZ    R3,ACK  ;N个字节读完否?未完转                  (12)                   LCALL   STOP     ;发送停止位                 RET        ACK:(13)                   INC     R1                 SJMP    RDN1     ;转读下一个字节数据    (9)~(13)空缺处供选择的答案    A.LCALL START     B.LCALL MACK     

C.LCALL CACK     D.LCALL RDBYT     
E.LCALL WRBYT    F.LCALL MNACK    G.LCALL STOP

选项

答案(9)E或LCALL WRBYT (10)C或LCALL CACK (11)D或LCALL RDBYT (12)F或LCALL MNACK (13)B或LCALL MACK 这是一道要求读者掌握汇编语言程序分析的综合题。本题的解答思路源于图6-18所给出的I2C总线开始条件与停止条件的时序图。根据该时序图及题干中已定义的各个子程序可知,(9)空缺处应选择“LCALL WRBYT”;(10)空缺处应选择“LCALL CACK”;(11)空缺处应选择“LCALL RDBYT”;(12)空缺处应选择“LCALL MNACK”;(13)空缺处应选择“LCALL MACK”。 以下给出完整的模拟I2C总线接收N个字节数据的程序段(RDNBYTE)及其各条语句的功能注释。 RDNBYTE:MOV R3,NUMBYTE ;取所需传送的字节数,即N值 LCALL START ;发送启动位 MOV A,SLA ;读取寻址字节类型 LCALL WRBYT ;发送寻址宁节(读) LCALL CACK ;检查应答位 JB F0,RDNBYTE ;用户标志位为1时,转移至RDNBYTE标号 ;处,否则向下执行 RDN: MOV R1,#MRD ;取接收数据缓冲区的首地址 RDN1: LCALL RDBYT ;读入一个字节 MOV @R1,A ;将所读入的内容送至接收数据缓冲区 DJNZ R3,ACK ;N个字节读完否?未完转至ACK标号处 LCALL MNACK ;N个字节读完后,发送非应答位 LCALL STOP ;发送停止位 RET ;子程序返回 ACK: LCALL MACK ;发送应答位 INC R1 ;接收数据缓冲区的地址指针增1 SJMP RDN1 ;无条件转至RDN1标号处,继续读下一个字 ;节数据

解析
转载请注明原文地址:https://jikaoti.com/ti/FgI7FFFM
0

最新回复(0)