80C51 P1.7~P1.4分别与93C46 CS SK DI和DO相接 试将AT93C4
问题详情
80C51 P1.7~P1.4分别与93C46 CS、SK、DI和DO相接,试将AT93C46首址为30H的8字节数据读出取反后再存入AT93C46首址为50H的区域中。设93046虚拟串行传输归一化子程序软件包已装入ROM。
参考答案
编程如下:
CS EQU P1.7 ;伪指令定义CS
SK EQU P1.6 ;伪指令定义SK
DI EQU P1.5 ;伪指令定义DI
DO EQU P1.4 ;伪指令定义DO
RD8:MOV R0,#30H ;置数据存储区首址
LCALL STATRD ;启动读
MOV A,#30H ;置93C46读出单元首址
LCALL INADR ;输出93C46读出单元首址
RD80:LCALL READ ;读一个字节数据
CPL A ;取反
MOV @R0,A ;存一个字节数据
INC R0 ;指向下一存储单元地址
CJNE R0,#38H,RD80 ;判8字节数据读完否?未完继续
CLR CS ;8字节数据读完,置93C46低功耗备用状态
WR8:MOV R0,#30H ;置写入数据区首址
MOV R1,#50H ;置93C46写入单元首址
WR80:LCALL STATWR ;启动写
MOV A,R1 ;置93C46写入单元地址
LCALL INADR ;输出93C46写入地址单元
MOV A,@R0 ;读写入数据
LCALL WRIT ;写入一个字节
LCALL DLY1ms ;延时1ms(略)
INC R0 ;指向80C51下一数据地址
INC R1 ;指向93046下一写入单元地址
CJNE R0,#38H,WR81 ;判8字节数据写完否?未完继续
CLR CS ;93C46进入备用状态,降低功耗
RET ;8字节数据写完,结束返回
WR81:JB D0,WR80 ;判REDAY/