Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CheatReader.doc
Скачиваний:
11
Добавлен:
30.04.2013
Размер:
353.28 Кб
Скачать

Технические характеристики

Питание: 4 батарейки типа “ААА”

Потребляемый ток: 12 мА

Микроконтроллер (нормальный/спящий) 5/0.8 мА

Память 5 мА

ЖКИ (без подсветки/с подсветкой) 2/25 мА

Операционная система для ПО: Windows95/98

Интерфейс связи с компьютером: RS232

Скорость передачи данных (в среднем) 2 Кбайт/с

Кодировка текста: Windows

Объём памяти: 64 Кбайт

Габаритные размеры (д/в/ш мм): 105 х 55 х 26

Список литературы

  1. “8-bit AVR microcontroller with 2K byte of in-system programmable flash AT90S2313”, “2-wire serial EEPROM 512K AT24C512”, “Instruction set”, 1999-2002 г.г. Atmel

  2. “The I2C-bus and how to use it”, 1995 г. Philips Semiconductors

  3. “HD44780U”, 1998 г. Hitachi

  4. “KS0066U”, 1999 г. Samsung

  5. “БЭК” 8-е издание, 1999 г. Корнюхин

Программа в микроконтроллере

Основная программа CheatReader.asm

;Programm for CheatReader by Kiki

;Version 1.0, need parameters: 4MHz oscillator

.nolist

.include "2313DEF.asm"

.list

.def temp =r25

.def data =r24

.def data1 =r23

.def buttons =r17

.def curCHIP =r19

.def PACCL =r15

.def PACCH =r14

.def PACML =r13

.def PACMH =r12

;I n t e r r u p t h a n d l i n g

.cseg

rjmp RESET ;reset

.org 6

rjmp tmr0int

.org $B

;I n i t i a l i z a t i o n p a r t

RESET: clr buttons ;clearing variables

sbi ACSR,7 ;disable Analog Comparator

ldi temp,RAMEND ;preparing stack pointer

out SPL,temp

ldi temp,2

out TIMSK,temp

ldi temp,5

out TCCR0,temp

ser temp ;preparing ports

out DDRB,temp

ldi temp,0b1000001

out DDRD,temp

ldi temp,0b0111110

out PORTD,temp

clr del

clr del1

ldi del2,2 ;delay before LCD init

rcall delay

rcall PC204_init

clr YL ;Y for data in 24C512

clr YH

ldi curCHIP,0b10100000

rcall i2c_addrinit

ldi data,low(msg_greet*2)

ldi data1,high(msg_greet*2)

rcall msgout

clr del1

ldi del2,40

rcall delay

sei

;M a i n b o d y o f t h e p r o g r a m m

loop: rcall I2C_pgread

rcall PC204_scrprnt

butwait:clr del1 ;Button press waiting

ldi del2,4

rcall delay

rcall wtfbtn

;Buttons handling

cpi buttons,4 ;Button 3

brne nxtcmd1

tst YH

brne fstcmd

cpi YL,80

breq butwait

fstcmd: sbiw YH:YL,60

sbiw YH:YL,60

sbiw YH:YL,40

rcall i2c_addrinit

rjmp loop

nxtcmd1:cpi buttons,8 ;Button 4

brne nxtcmd3

rjmp loop

nxtcmd3:cpi buttons,1 ;Button 1

brne nxtcmd4

cpi YL,80

brne jmptbeg

tst YH

breq butwait

jmptbeg:clr YL

clr YH

rcall i2c_addrinit

rjmp loop

nxtcmd4:cpi buttons,3 ;Button 1+2

brne nxtcmd5 ;Data receive

clr del1

ldi del2,20

rcall delay

ldi data,low(msg_actload*2)

ldi data1,high(msg_actload*2)

rcall msgout

rcall UART_getch

mov PACMH,data

rcall UART_putch

rcall UART_getch

mov PACML,data

rcall UART_putch

ldi data,low(msg_load*2)

ldi data1,high(msg_load*2)

rcall msgout

clr YL

clr YH

clr PACCL

clr PACCH

pacrecv:mov data,PACCL

rcall UART_putch

rcall UART_packrcv

sbrs buttons,1

rjmp noabort

ldi data,1 ;1 means - "download abort"

rcall UART_putch

clr YL

clr YH

rcall I2C_addrinit

ldi data,low(msg_ldabort*2)

ldi data1,high(msg_ldabort*2)

rcall msgout

ldi del2,30

rcall delay

rcall PC204_clear

rjmp loop

noabort:rcall I2C_pgwrite

ldi temp,1

add PACCL,temp

clr temp

adc PACCH,temp

cp PACCH,PACMH

brlo pacrecv

cp PACCL,PACML

brlo pacrecv

ldi data,low(msg_loaddn*2)

ldi data1,high(msg_loaddn*2)

rcall msgout

clr del1

ldi del2,30

rcall delay

clr YL

clr YH

rcall I2C_addrinit

rcall PC204_clear

rjmp loop

nxtcmd5:rjmp butwait ;Other...

;P r o c e d u r e s

wtfbtn: tst buttons

breq wtfbtn

ret

tmr0int:in buttons,PIND

lsr buttons

lsr buttons

com buttons

andi buttons,$F

reti

;U n i t s i n c l u d i n g

.include "PC2004.asm" ; to control LCD PC2004

.include "I2C_24C512.asm" ; to control AT24C512

.include "UART.asm" ; for communicationing CheatReader with PC

.include "Delays.asm" ; delays

.include "DATA.asm" ; of text data

.exit

Модуль PC2004.asm

;parameters: data1:(x)(x)(x)(x)(x)(x)(x)(RS)-RS bit, data-DB0~DB7

.def symbcnt =r18

.equ E =6

.equ RS =1

.equ PC204l2p0 =$C0

.equ PC204l3p0 =$94

.equ PC204l4p0 =$d4

PC204_write:

cbi PORTD,RS ;RS = 0

sbi DDRD,RS

sbrc data1,0 ;setting him or not

sbi PORTD,RS

bst data1,0 ;storing him in T-bit

ldi del,8 ;init bit-counter

mov temp,data

clr data1

PC_swp:ror temp ;swapping highest with lowest bits in data

rol data1 ; according the scheme of CheatReader

dec del

brne PC_swp

out PORTB,data1 ;outputting

sbi PORTD,E

nop

cbi PORTD,E

clr data1 ;restoring RS-bit

bld data1,0

ret

PC204_init: ;display initialization

clr data1

ldi data,$38 ;8-bit interf, 2-line display

rcall PC204_write

rcall symb_del

ldi data,1 ;clearing

rcall PC204_write

ldi del1,8

ldi del2,1

rcall delay

ldi data,$C ;switching on, cursor is blinking

rcall PC204_write

rcall symb_del

ret

PC204_scrprnt:

cli

clr symbcnt ;full screen output

ldi ZL,$60

PC204_cyc:

inc symbcnt

ld data,Z+ ;loading indirect byte to data

tst data

brne PC204nz

ldi data,$CD

PC204nz:cpi data,10 ;Special chars converting

brne PC204o1

ldi data,$FE

rjmp PC204n

PC204o1:cpi data,13

brne PC204o2

ldi data,$FE

ldi temp,$20

st Z,temp

rjmp PC204n

PC204o2:cpi data,9 ;Tab symb 2 paragraph symb

brne PC204o3

ldi data,$FD

rjmp PC204n

PC204o3:cpi data,$5C ;"\" -> "/"

brne PC204o4

ldi data,$2F

rjmp PC204n

PC204o4:cpi data,$7E ;"~"

brne PC204o5

ldi data,$E9

rjmp PC204n

PC204o5:cpi data,$7B ;"{" -> "<<"

brne PC204o6

ldi data,$C8

rjmp PC204n

PC204o6:cpi data,$7D ;"}" -> ">>"

brne PC204o7

ldi data,$C9

rjmp PC204n

PC204o7:cpi data,$7C ;"|"

brne PC204t1

ldi data,$D1

rjmp PC204n

PC204t1:cpi data,$C0 ;$80 for CP866

brlo PC204n

;cpi data,$B0

;brsh PC204t2

push ZL

push ZH

ldi ZL,low(tab1*2)

ldi ZH,high(tab1*2)

subi data,$C0 ;$80 for CP866

add ZL,data

brcc PC204nc

inc ZH

PC204nc:lpm

pop ZH

pop ZL

mov data,r0

rjmp PC204n

PC204n: ldi data1,1 ;setting RS = 1

rcall PC204_write ;printing symbol

rcall symb_del ;waiting some

cpi symbcnt,20 ;jumping from line to line

brne PC204ntst1

ldi data,PC204l2p0

rcall PC204_goto

PC204ntst1:

cpi symbcnt,40

brne PC204ntst2

ldi data,PC204l3p0

rcall PC204_goto

PC204ntst2:

cpi symbcnt,60

brne PC204ntst3

ldi data,PC204l4p0

rcall PC204_goto

PC204ntst3:

cpi symbcnt,80

breq PC204dn

rjmp PC204_cyc

PC204dn:sei

ret

PC204_clear:

push data

push data1

clr data1

ldi data,1

rcall PC204_write

ldi del1,8

ldi del2,1

rcall delay

pop data1

pop data

ret

PC204_goto:

clr data1

rcall PC204_write

rcall symb_del

ret

msgout: rcall PC204_clear

ldi symbcnt,$60

msgloop:mov ZL,data

mov ZH,data1

lpm

adiw ZH:ZL,1

mov data,ZL

mov data1,ZH

mov ZL,symbcnt

st Z,r0

inc symbcnt

cpi symbcnt,$B0

brne msgloop

rcall PC204_scrprnt

ret

Модуль I2C_24C512.asm

.equ SCL = 0 ; SCL Pin number

.equ SDA = 1 ; SDA Pin number

I2C_start:

sbi DDRD,SDA

sbi PORTD,SDA ;making start condition...

sbi PORTD,SCL

cbi PORTD,SDA

cbi PORTD,SCL

ret

I2C_write:

sbi DDRD,SDA ;setting direction to "write"

ldi temp,8 ;initializing bit-counter

I2C_ntw:cbi PORTD,SDA

rol data ;rotating left through Carry

brcc I2C_ov ;if data bit is low skip next op

sbi PORTD,SDA ;writing current bit...

I2C_ov: sbi PORTD,SCL

nop

nop

nop

cbi PORTD,SCL

dec temp

brne I2C_ntw ;if 8 bits were tr-f-ed then get ack

rol data ;getting ACK

sbi PORTD,SDA ;setting SDA

cbi DDRD,SDA ;setting direction to read

sbi PORTD,SCL ;making strobe...

nop

nop

I2Cwait:sbic PIND,SDA ;if there is no ack then wait

rjmp I2Cwait

cbi PORTD,SCL

ret

I2C_read:

cbi DDRD,SDA ;setting direction of SDA pin to "read"

sbi PORTD,SDA

clr data ;clearing data buffer

ldi temp,8 ;initializing bit-counter

clc

I2C_ntr:rol data ;rotating left data buffer

nop

sbi PORTD,SCL ;making strobe

nop

sbic PIND,SDA ;reading SDA in carry

ori data,1 ;setting carry if SDA is high

nop

cbi PORTD,SCL

dec temp

brne I2C_ntr ;if 8 bits were tr-f-ed then get ack

;putting ACK

sbi DDRD,SDA ;setting direction of SDA pin to "write"

cbi PORTD,SDA ;sending "0" as acknowledge...

brtc I2Cack

sbi PORTD,SDA

I2Cack: sbi PORTD,SCL

nop

nop

cbi PORTD,SCL

ret

I2C_pgread:

rcall I2C_start

mov data,curCHIP

ori data,1

rcall I2C_write

ldi ZL,$60 ;setting begining RAM address to $60

clt

I2Crdloop:

rcall I2C_read

st Z+,data

cpi ZL,$AF

brne I2Crdloop

set

rcall I2C_read

st Z+,data

rcall I2C_stop

adiw YH:YL,60

adiw YH:YL,20

ret

I2C_pgwrite:

rcall I2C_start

mov data,curCHIP

rcall I2C_write

mov data,YH

rcall I2C_write

mov data,YL

rcall I2C_write

ldi ZL,$60 ;setting begining RAM address to $60

I2Cwrloop:

ld data,Z+

rcall I2C_write

cpi ZL,$A0

brne I2Cwrloop

rcall I2C_stop

adiw YH:YL,32

adiw YH:YL,32

ldi del1,100

ldi del2,1

rcall delay

ret

I2C_addrinit:

rcall I2C_start

mov data,curCHIP

rcall I2C_write

mov data,YH

rcall I2C_write

mov data,YL

rcall I2C_write

rcall I2C_stop

ret

I2C_stop:

sbi DDRD,SDA ;setting direction of SDA pin to "write"

cbi PORTD,SDA

sbi PORTD,SCL ;setting SCL high

sbi PORTD,SDA ;setting SDA high

cbi PORTD,SCL ;release SCL

ret

Модуль UART.asm

;parameters: data-receive/transmitt data byte

.equ RxD=5

.equ TxD=4

.equ HBIT=11 ;11

.equ BIT=21 ;21

UART_getch:

clt

brid UARTnoint1

set

cli

UARTnoint1:

ldi temp,8 ;8 data bit

clr data

sbi PORTD,RxD

cbi DDRD,RxD

UART_wt:sbic PIND,RxD ;Wait for start bit(0)

rjmp UART_wt

ldi del,HBIT ;half-bit delay

UART_d1:dec del

brne UART_d1

UART_gc:ldi del,BIT ;bit belay

UART_d2:dec del

brne UART_d2

clc ;clearing carry

sbic PIND,RxD ;if RX pin low then skip setting carry

sec ;

ror data ;rotating bit through carry into data

dec temp

brne UART_gc

nop

ldi del,HBIT ;half-bit delay

UART_d5:dec del

brne UART_d5

brtc UARTdsint1

sei

UARTdsint1:

ret

UART_putch:

clt

brid UARTnoint2

set

cli

UARTnoint2:

ldi temp,9 ;8 data + 1 start bit

sbi PORTD,TxD

sbi DDRD,TxD

clc

rjmp UARTstb

UART_pc:ror data ;rotating bit through carry into data

UARTstb:brcc UARTov1 ;watching to the carry and setting

sbi PORTD,TxD ; TxD-bit if carry is

UARTov1:brcs UARTov2

cbi PORTD,TxD ; and clearing TxD-bit if not

UARTov2:ldi del,BIT-1 ;bit belay

UART_d3:dec del

brne UART_d3

dec temp

brne UART_pc

ror data

sbi PORTD,TxD

ldi del,BIT ;stop bit belay

UART_d4:dec del

brne UART_d4

brtc UARTdsint2

sei

UARTdsint2:

ret

UART_packrcv:

ldi ZL,$60

UARTpgl:rcall UART_getch

st Z+,data

cpi ZL,$A0

brne UARTpgl

ret

Модуль Delays.asm

.def del =r22

.def del1 =r21

.def del2 =r20

symb_del:

ldi del,45

ldi del1,1

ldi del2,1

rcall delay

ret

delay: dec del ;3-byte delay

brne delay

dec del1

brne delay

dec del2

brne delay

ret

Модуль DATA.asm

.cseg

;Russian alphabet table: ABVGD...

; abvgd...

tab1: .db $41,$A0,$42,$A1,$E0,$45,$A3,$A4,$A5,$A6,$4B,$A7,$4D,$48,$4F,$A8,$50,$43,$54,$A9,$AA,$58,$E1,$AB,$AC,$E2,$AD,$AE,$62,$AF,$B0,$B1

.db $61,$B2,$B3,$B4,$E3,$65,$B6,$B7,$B8,$B9,$BA,$BB,$BC,$BD,$6F,$BE,$70,$63,$BF,$79,$E4,$78,$E5,$C0,$C1,$E6,$C2,$C3,$C4,$C5,$C6,$C7,$CD,$B5

;Greetings message:

msg_greet:

.db "-=made by KikiWare=- 20 Greetings! 03 "

.db $42,$61,$63," ",$BE,$70,$B8,$B3,$65,$BF,$63,$BF,$B3,$79,$65,$BF," CheatReader v1.0 "

;"Downloading data..."

msg_load:

.db " Downloading data... Press 2 to abort "

;"Downloading is done."

msg_loaddn:

.db " Downloading is done. "

;"Download mode..."

msg_actload:

.db " Download mode is on.Waiting for begin... "

;"Downloading aborted..."

msg_ldabort:

.db " Downloading aborted! "

Соседние файлы в предмете Вычислительные машины, системы и сети