导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→初学者:怎么样写串行存储器93C46 [csf]

 *第4717篇: 初学者:怎么样写串行存储器93C46

  
楼 主:csf 2002年8月27日20:51
 初学者:怎么样写串行存储器93C46 
我按照93C46的资料编写了读子程序和写子程序,
但是总是写不进去,
也读不出来,想请高手朋友指点一下,
谢过!
我把程序列出,请指点:

;-----------------------;向93C46写"1"(起始位 子程序
INSB: SETB CS ;置片选无效
NOP
CLR SK ;时钟置低
NOP
SETB SD
NOP
NOP
NOP
NOP
CLR CS ;置片选有效
NOP
NOP
NOP
NOP
SETB SK ;时钟置高,移入数据 
NOP
NOP
NOP
NOP
CLR SK
RET 
;-----------------------;向93C46送8位数据子程序
WR1: MOV R4,#8 ;写入的数据位数
W10: RLC A
NOP
NOP
MOV SD,C ;将CY输入DI
NOP
NOP
NOP
NOP
SETB SK ;时钟置高,移入数据
NOP
NOP
NOP
NOP
CLR SK ;时钟置低
NOP
NOP
DJNZ R4,W10 ;未写完,继续
RET
;-----------------------;从DE引脚读取8位数据子程序
;入口:A(存放DE引脚输出的8位串行数据 
RD1: MOV R4,#8 ;读取的数据位数
R10: NOP
NOP
NOP
NOP
SETB SK ;时钟置高,移出数据
NOP
NOP
NOP
NOP
CLR SK
NOP
NOP ;时钟置低
MOV C,SD ;数据从DO读入CY
RLC A
DJNZ R4,R10 ;未读完,继续
RET
;----------------;写数据:入口:B(存放要写入的8位指令:两位操作码,6位地址码A5~A0 
; R2(存入写入数据的高8位 ,R3(存入写入数据的低8位 
WRITE: LCALL INSB ;写允许指令
MOV A,B
ANL A,#30H ;
LCALL WR1
LCALL INSB ;写入指令
MOV A,B
ORL A,#40H
LCALL WR1
MOV A,R2 ;写入高位字节
LCALL WR1
MOV A,R3 ;写入低位字节
LCALL WR1
SETB CS ;置片选无效
NOP 
NOP
NOP
NOP 
CLR CS ;片选有效
NOP
NOP
NOP
NOP
SETB SD
NOP
NOP
NOP
NOP
WAIT: JNB SD,WAIT ;编程未完,等待
LCALL INSB ;写禁止指令
MOV A,#0
LCALL WR1
SETB CS ;置片选无效
RET
;-----------------------;读16位串行数据,入口参数:B(2位操作码,6位地址码 
;出口参数:R2(存放从DE引脚读取的串行数据的高8位 
; R3(存放从DE引脚读取的串行数据的低8位 
READ: LCALL INSB ;写读取指令
MOV A,B
ORL A,#80H
LCALL WR1
NOP
NOP
NOP
NOP
LCALL RD1
MOV R2,A ;读出高位字节
LCALL RD1
MOV R3,A ;读出胝位字节
SETB CS ;置片选无效
RET


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:初学者:有谁做过用AT89C51来发送POCSAG码的源程序

[下一篇主题]:tft-lcd