打印

紧急,有偿求助93LC46

[复制链接]
2224|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lfchh|  楼主 | 2009-10-30 10:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AN, AD, TE, WRITE, rc
以前一直用24C02,后来客户说用93LC46,本来觉得很简单,但折腾了一下午还没完成,郁闷啊。按 data sheet 写了以下程序,可是每次读出数据都为00H。还有D0好象一直低电平,那就一直BUSY吗?请各位大侠帮忙查查原因在哪里?今天内要解决,如何那位大侠愿意帮忙,留个联系方式。
;MCU:SAMSUNG S3C8XXX
;---------define-------
P1_CLK   EQU 00000001B  ;93LC46B clock
P1_CS   EQU 00000010B  ;chip select
P1_DI   EQU 00000100B  ;data input
P0_DO   EQU 01000000B  ;data output
P1_CLK_Clr  EQU 11111110B   
P1_CS_Clr  EQU 11111101B  
P1_DI_Clr  EQU 11111011B
P0_DO_Clr  EQU 10111111B

;-----------------------------------------------------
sub_init:
NOP
AND P1, #P1_CS_Clr  ;clear CS
NOP
AND P1, #P1_DI_Clr  ;clear DI
NOP
AND P1, #P1_CLK_Clr  ;clear CLK
NOP
RET
;-----------------------------------------------------
sub_start:
AND P1, #P1_CLK_Clr  ;clear CLK
NOP
OR P1, #P1_CS   ;set CS
NOP
OR P1, #P1_DI   ;set DI
NOP
OR P1, #P1_CLK   ;set CLK
NOP
NOP
NOP
NOP
NOP
NOP
AND P1, #P1_CLK_Clr  ;clear CLK
RET
;------------------------------------------------------
sub_write_command:    ;input R1
NOP
LD R0, #8
entry0:
RLC     R1   
JR NC, entry1
        OR P1, #P1_DI   ;set DI
        JR     entry2
entry1:
        AND P1, #P1_DI_Clr  ;clear DI
entry2:
        NOP
        NOP
        NOP
        NOP
        OR P1, #P1_CLK    ;set CLK
        NOP
        NOP
        NOP
        NOP
        AND P1, #P1_CLK_Clr  ;clear CLK   
        DEC R0
        JR NZ, entry0
        NOP
        RET
;-----------------------------------------------------
sub_erase_write_enable:    ;EWEN :10011xxxx
NOP
CALL sub_start   ;1xxxxxxxx
NOP
LD R1, #00110000B  ;x0011xxxx
CALL sub_write_command
        NOP
        AND P1, #P1_CS_Clr  ;clear CS
        NOP
        RET      
;--------------------------------------  ;address R2; data R3 R4; R0 shift
sub_write:     ;WRITE 101AAAAAA
NOP
CALL sub_start   ;1xxxxxxxx
LD R0, #00111111B
AND R0, R2
RCF
ADD R0, #01000000B  ;x01AAAAAA
LD R1, R0     
CALL sub_write_command
        NOP     ;R3 R4:16 bit data
        LD R1, R3
        CALL sub_write_command
        LD R1, R4
        CALL sub_write_command
        NOP
        AND P1, #P1_CS_Clr
        NOP
        RET        
;--------------------------------------------
sub_write_eeprom_data:
NOP
CALL sub_init
NOP
CALL sub_erase_write_enable
NOP
LD R2, #00H
CLR R3
LD R4, Data1
CALL sub_write

LD R2, #02H
CLR R3
LD R4, Data2
CALL sub_write

LD R2, #04H
CLR R3
LD R4, Data3
CALL sub_write

RET
;-------------------------------------------- ;input address R2; output data R3 R4; R0 shift
sub_read:     ;READ 110AAAAAA
NOP
CALL sub_start   ;1xxxxxxxx
LD R0, #00111111B
AND R0, R2
RCF
ADD R0, #10000000B  ;x10AAAAAA
LD R1, R0   
CALL sub_write_command

LD R1, #0
CALL sub_read_data
LD R3, R1

LD R1, #0
CALL sub_read_data
LD R4, R1

NOP
        AND P1, #P1_CS_Clr  ;clear CS
        NOP
RET
;----------------------------------------------
sub_read_data:
NOP
LD R0, #8
sread0:
OR P1, #P1_CLK   ;set CLK
NOP
NOP
NOP
NOP
NOP
NOP
AND P1, #P1_CLK_Clr  ;clear CLK
TM P0, #P0_DO   ;test D0
JP Z, sread1
SCF     ;
JP sread2
sread1:
RCF
NOP
NOP
NOP
NOP
sread2:
RLC R1
DEC R0
JP NZ, sread0
NOP

相关帖子

沙发
古道热肠| | 2009-10-30 12:40 | 只看该作者
哈哈,这个都搞不定呀,是思路不对吧.
1.先用编程器写内容,用程序读,不成功时,查硬件连接并换几个芯片试试关系.
2.然后测试写数据,用编程器读是否正确.
贴个参考程序,是用C语言写的,您可以用您自己最熟悉的单片机来测试硬件,再移植到您这三星单片机上.调硬件时要保证软件是好的,调软件时要保证硬件是无故障的.

Serial.rar

8.48 KB

24系列,93系列.X5045芯片的驱动

使用特权

评论回复
板凳
lfchh|  楼主 | 2009-10-30 15:59 | 只看该作者
谢谢古道热肠,按上述方法测试了,要写三个16BIT数据,用编程器读出来,只用第一个16BIT数据写进去了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

149

帖子

2

粉丝