проблема с записью в EEPROM
Микроконтроллер Holtek HT48R50a-1
EEPROM Holtek HT24LC02V120
Эмулятор HT-ICE
HT-IDE3000V6
не работает запись\чтение в EEPOM
вот текст программы:
может я что-то не так делаю?
подскажите плз если есть возможность.
#include ht48r50a-1.inc
#define SCL pc.0
#define SDA pc.1
;-------------------------------------------------------
data .section 'data'
AddrLo db ?;Младший байт адреса в EEPROM
AddrHi db ?;Старший байт адреса в EEPROM
Cnt db ?;Счетчик
Temp db ?;Регистры для хранения переменных разного назначения
TempTr db ?;
InitPortC equ 00000000b
SDARecPortC equ 00000010b
code .section at 0 'code'
org 00h
jmp start
start:
mov a,0bch ;Запись значения 0x55 по адресу 0x2bc
mov AddrLo,a ;
mov a,02h ;
mov AddrHi,a ;
mov a,07h;
call Transmitt ;
mov a,0bch ;Чтение байта по адресу 0x2bc
mov AddrLo,a ;
mov a,02h ;
mov AddrHi,a ;
call Receive ;Полученное значение будет в регистре w
Init proc;Общая инициализация
mov a,InitPortC ;
mov pcc,a ;
ret ;
init endp
SwReceive proc ;Переключение SDA на вход
mov a,SDARecPortC
mov pcc,a
ret
swreceive endp
Transmitt proc
mov TempTr,a ;
set SDA ;
call Init ;Переключить линию для передачи
clr SDA ;Start
clr SCL ;
clr c ;Передача байта управления
rlca AddrHi ;и трех старших бит адреса
or a,10100000b ;
call SendByte ;
call SwReceive ;Переключить линию для приема подтверждения
set SCL ;Прием подтверждения
sz SDA ;
jmp Transmitt ;Подтверждение отсутствует
clr SCL ;
call Init ;Переключить на передачу
mov a,AddrLo ;Передать младший байт адреса
call SendByte ;
call SwReceive ;Переключить линию для приема подтверждения
set SCL ;прием подтверждения
sz SDA ;
jmp Transmitt ;Подтверждение отсутствует
clr SCL ;
call Init ;Переключить на передачу
mov a,TempTr ;Передача байта
call SendByte ;
call SwReceive ;Переключить линию для приема подтверждения
set SCL ;Прием подтверждения
sz SDA ;
jmp Transmitt ;Подтверждение отсутствует
clr SCL ;
call Init ;Переключить на передачу
clr SDA ;Stop
set SCL ;
set SDA ;
ret
transmitt endp
SendByte proc;Подпрограмма передачи одного байта
mov Temp,a
mov a,08d
mov Cnt,a
SendBt:
clr wdt
clr SDA
rlc Temp
sz C
set SDA
set SCL
clr SCL
sdz Cnt
jmp SendBt
ret
sendbyte endp
Receive proc
set SDA ;
call Init ;Переключить на передачу
clr SDA ;Start
clr SCL ;
clr C ;Передача байта управления
rlca AddrHi ;и трех старших бит адреса
or a,10100000b ;
call SendByte ;
call SwReceive ;Переключить на прием
set SCL ;Прием подтверждения
sz SDA ;
jmp Receive ;Подтверждение отсутствует
clr SCL ;
call Init ;Переключить на передачу
mov a,AddrLo ;Передать младший байт адреса
call SendByte ;
call SwReceive ;Переключить на прием
set SCL ;Прием подтвержедния
sz SDA ;
jmp Receive ;Подтверждение отсутствует
clr SCL ;
call Init ;Переключить на передачу
set SDA ;Повторный Start
set SCL ;
clr SDA ;
clr SCL ;
set C ;Передача байта управления
rlca AddrHi ;и трех старших бит адреса
or a,10100000b ;
call SendByte ;
call SwReceive ;Переключить на прием
set SCL ;прием подтверждения
sz SDA ;
jmp Receive ;Подтверждение отсутствует
clr SCL ;
call ReceiveByte ;Прием байта
clr SDA ;
call Init ;Переключить на передачу
set SCL ;Передача подтверждения
set SDA ;Stop
ret
receive endp
ReceiveByte proc ;Подпрограмма приема одного байта
mov a,08d
mov Cnt,a
ReceiveBt:
clr wdt
set SCL
clr C
sz SDA
set C
rlc Temp
clr SCL
sdz Cnt
jmp ReceiveBt
mov a,Temp
mov TempTr,a
ret
receivebyte endp
end
|