Компьютеры

       

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


.INCLUDE "1200def.inc" ; AT90S1200 @ 1 MHz .CSEG

.DEF Byte=r16 .DEF LoopCounter=r18 .DEF Byte0=r19 .DEF Byte1=r20 .DEF Byte2=r21 .DEF Byte3=r22 .DEF Byte4=r23 .DEF Byte5=r24 .DEF Byte6=r25 .DEF Byte7=r26

.ORG 000 rjmp RESET ; Reset Handler .ORG 001 rjmp EXT_INT0 ; IRQ0 Handler

RESET: ; Настраиваем направление работы портов. ; Все линии портов после сброса настроены на работу в качестве входов, ; а на неиспользуемых включены pull-up резисторы. cli ldi r31,0 out DDRB,r31 out DDRD,r31 ldi r31,$ff out PORTB,r31 ldi r31,$72 out PORTD,r31 ; Ждем прихода импульса на вход INT0 находясь в режиме Power Down. ldi r31,$40 out GIMSK,r31 ldi r31,$30 out MCUCR,r31 UnLoop: sei sleep rjmp UnLoop

EXT_INT0: ; Если PD3=0, данные относятся к принтеру. sbis PIND,3 reti ; Включение ключа. ldi r31,$02 out DDRD,r31 ldi Byte0,$31 ldi Byte1,$32 ldi Byte2,$33 ldi Byte3,$34 ldi Byte4,$35 ldi Byte5,$36 ldi Byte6,$37 ldi Byte7,$38 MainLoop: rcall Byte8Exchange ; Здесь должен быть код заменяющий часть защищаемой программы или ; шифрование данных. sbis PIND,3 rjmp RESET ; работа с ключем завершена, переполнение стека допустимо rjmp MainLoop

Byte8Exchange: mov Byte,Byte0 rcall ByteExchange mov Byte0,Byte mov Byte,Byte1 rcall ByteExchange mov Byte1,Byte mov Byte,Byte2 rcall ByteExchange mov Byte2,Byte mov Byte,Byte3 rcall ByteExchange mov Byte3,Byte mov Byte,Byte4 rcall ByteExchange mov Byte4,Byte mov Byte,Byte5 rcall ByteExchange mov Byte5,Byte mov Byte,Byte6 rcall ByteExchange mov Byte6,Byte mov Byte,Byte7 rcall ByteExchange mov Byte7,Byte ret

ByteExchange: ;Обмен одним байтом данных. ldi LoopCounter,8 ; Обработка положительного фронта сигнала синхронизации. Loop8: sbrs Byte,7 ; вывод бита cbi PORTD,1 sbrc Byte,7 sbi PORTD,1 Wait1: sbis PIND,2 ; ждем прихода положительного фронта rjmp Wait1 sec ;c=1 ; прием бита sbis PIND,0 clc ;c=0 rol Byte Wait0: sbic PIND,2 ; ждем прихода отрицательного фронта rjmp Wait0 ; Цикл для 8 бит байта. dec LoopCounter brne Loop8 ret .EXIT



Содержание раздела