Итак, ниже полный вариант в АСМе. Сначала с ним. Подтяжки нет в "железе" и Протеусе
В Протеусе на входе кнопки, неопределённое состояние, но при симуляции отрабатывается правильно, как будто подтяжка есть.
В железе подтяжки нет, программка начинает работать так, как будто кнопка нажата.
Код: Выделить всё
//мк ATtiny13a 9,6MHz
.include "tn13adef.inc"
.list
.def T1 = R16
.def wreg = R17
.def T = R18
.equ KEY = 0 ;
/************************************************************/
;.dseg
;.cseg
;--------------------------------------------
//.org 0
//rjmp RESET
;.org 3
;rjmp TIMER0_OVF
;----
;TIMER_OVF
;--
;reti
;--------
//RESET:
;-------------------------------------------
; инициализация
; ------------------------------------------
;ldi r23, (0<<PUD)
;out MCUCR, r23
;ldi r21, (1<<PB0)
;out PORTB,r21
;ldi r22, (1<<DDB4)|(1<<DDB1)
;out DDRB,r22
ldi wreg, 0b00000001
out PORTB, wreg
ldi wreg, 0b00010010
out DDRB, wreg
;---------- инициализация стека----------------
;ldi wreg, high (RAMEND)
;out sph, wreg
;ldi wreg, low (RAMEND)
;out spl, wreg
;--------------------------------------------
; инициализация АЦП
;--------------------------------------------
;cli ; запретить прерывания
ldi wreg, 0b10000110;0b10000011 ; Вкл. Ацп, Однокр. преобр., Прерывание запрещено, СК/8 (125 kHz)
out ADCSRA, wreg
ldi wreg,0b00000011 ;AVcc, пр.выравн, ADC Channel 3
out ADMUX, wreg
;--------------------------------------------
rcall adc_convert
mov T1, wreg
mov T, T1
Cycle:
sbic PINB, KEY
rjmp m
rcall imp_4
rcall imp_4
rcall imp_4
rcall imp_1
rcall imp_1
rcall imp_1
rjmp Cycle
m:
ldi wreg, 0b00010010
out PORTB, wreg
rjmp Cycle
;*********************DELAY_1****************************
delay_1:
ldi r19, 30
ldi r20, 30
L1: dec r20
brne L1
dec r19
brne L1
ret
;********************** AD CONVERTION *******************
adc_convert:
sbi ADCSRA, ADSC ; Start Convertion
sbic ADCSRA, ADSC
rjmp PC-1
in wreg, ADCL ; просто формальность (первым всегда читается ADCL)
;in wreg, ADCH ; wreg contains result
ret
;********************************************
imp_1:
ldi wreg, 0b00000010
out PORTB, wreg
rcall delay_1
dec T
brne PC-2
mov T, T1
ldi wreg, 0b00000000
out PORTB, wreg
rcall delay_1
dec T
brne PC-2
mov T, T1
ret
;******************************************
imp_4:
ldi wreg, 0b00010000
out PORTB, wreg
rcall delay_1
dec T
brne PC-2
mov T, T1
ldi wreg, 0b00000000
out PORTB, wreg
rcall delay_1
dec T
brne PC-2
mov T, T1
ret
;******************************************