Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Прога для эмулятора 23.11.01 22:25
Автор: I Статус: Незарегистрированный пользователь
|
Написал прогу для эмуля таксофонной карты, да не работает у меня по непонятным причинам, но в MPLAB'e все ОК. Приверьте, знающие люди, плиз. Чип - PIC16F84A 4 мегагерца, схема понятна из самой проги:
list p=16f84a
#include p16f84a.inc
PIN_CLK equ 0
PIN_RES equ 1
PIN_IO equ 2
W_CMD equ 0xC
CNT equ 0xD
TMP equ 0xE
BYTEF equ 0xF
#define BANK0 bcf STATUS,RP0
#define BANK1 bsf STATUS,RP0
#define IO_1 bsf PORTB,PIN_IO
#define IO_0 bcf PORTB,PIN_IO
#define GIEON bsf INTCON,GIE
org 0
goto Init
org 4
btfsc PORTB,PIN_RES
movlw 2
addwf PCL,1
goto Read
goto WWC
goto Reset
WWC:
btfss W_CMD,0
goto Write
goto WriteC
Init:
movlw 8
movwf EEADR
BANK1
bsf EECON1,RD
BANK0
movf EEDATA,1
btfss STATUS,Z
goto Init2
movlw 9
movwf EEADR
BANK1
bsf EECON1,RD
BANK0
movf EEDATA,1
btfss STATUS,Z
goto Init2
movlw 0xA
movwf EEADR
BANK1
bsf EECON1,RD
BANK0
movf EEDATA,1
btfss STATUS,Z
goto Init2
movlw 0xB
movwf EEADR
BANK1
bsf EECON1,RD
BANK0
movf EEDATA,1
btfss STATUS,Z
goto Init2
movlw 0xC
movwf EEADR
BANK1
bsf EECON1,RD
BANK0
movf EEDATA,1
btfss STATUS,Z
goto Init2
movlw 0xF
movwf EEDATA
movlw 0xA
movwf EEADR
BANK1
bsf EECON1,WREN
movlw 0x55
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON1,WR
btfsc EECON1,WR
goto $-1
bcf EECON1,WREN
BANK0
movlw 0x1F
movwf EEDATA
movlw 0xB
movwf EEADR
BANK1
bsf EECON1,WREN
movlw 0x55
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON1,WR
btfsc EECON1,WR
goto $-1
bcf EECON1,WREN
BANK0
movlw 0xF
movwf EEDATA
movlw 0xC
movwf EEADR
BANK1
bsf EECON1,WREN
movlw 0x55
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON1,WR
btfsc EECON1,WR
goto $-1
bcf EECON1,WREN
BANK0
Init2:
movlw b'00001111'
movwf BYTEF
clrw
BANK1
bcf TRISB,PIN_IO
BANK0
bsf INTCON,INTE
bsf INTCON,GIE
Monitor:
GIEON
btfss PORTB,PIN_RES
goto $-1
movlw 1
goto $
Reset:
movf CNT,W
andlw b'11111000'
btfsc STATUS,Z
goto Monitor
clrf CNT
IO_1
bcf W_CMD,0
clrw
goto Monitor
Read:
incf CNT,1
rlf CNT,W
movwf TMP
swapf TMP,W
andwf BYTEF,W
movwf EEADR
BANK1
bsf EECON1,RD
BANK0
movlw b'00000111'
andwf CNT,W
call Filter
andwf EEDATA,1
btfss STATUS,Z
IO_1
btfsc STATUS,Z
IO_0
bcf W_CMD,0
clrw
goto Monitor
Write:
movf CNT,W
andlw b'11000000'
btfsc STATUS,Z
goto Monitor
rlf CNT,W
movwf TMP
swapf TMP,W
andwf BYTEF,W
movwf TMP
movwf EEADR
BANK1
bsf EECON1,RD
BANK0
movlw b'00000111'
andwf CNT,W
call FilterW
andwf EEDATA,1
movf TMP,W
movwf EEADR
BANK1
bsf EECON1,WREN
movlw 0x55
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON1,WR
btfsc EECON1,WR
goto $-1
bcf EECON1,WREN
BANK0
bsf W_CMD,0
clrw
goto Monitor
WriteC:
movf CNT,W
andlw b'11000000'
btfsc STATUS,Z
goto Monitor
rlf CNT,W
movwf TMP
swapf TMP,W
andwf BYTEF,W
movwf TMP
movwf EEADR
BANK1
bsf EECON1,RD
BANK0
movlw b'00000111'
andwf CNT,W
call Filter
iorwf EEDATA,1
movf TMP,W
movwf EEADR
BANK1
bsf EECON1,WREN
movlw 0x55
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON1,WR
btfsc EECON1,WR
goto $-1
bcf EECON1,WREN
BANK0
bcf W_CMD,0
clrw
goto Monitor
Filter:
addwf PCL,1
retlw b'10000000'
retlw b'01000000'
retlw b'00100000'
retlw b'00010000'
retlw b'00001000'
retlw b'00000100'
retlw b'00000010'
retlw b'00000001'
FilterW:
addwf PCL,1
retlw b'01111111'
retlw b'10111111'
retlw b'11011111'
retlw b'11101111'
retlw b'11110111'
retlw b'11111011'
retlw b'11111101'
retlw b'11111110'
org 0x2100
data 0xE9
data 0x22
data 0xEE
data 0x22
data 0x74
data 0x38
data 0xAD
data 0x2C
data 0x00
data 0x00
data 0x0F
data 0x1F
data 0x0F
END
|
|
|