Заработало можно сказать с НУЛЕВОГО раза т е мгновенно
скопировал аsm листинг main с кодевижена .
на всяк случай оставил инит выклченного компаратора. задержка с прошлого проекта
заполнение 55 % включается выключается . можно сказать меандр .
Все
подправил вторую задержку до 0.3 сек лучше срабатывает кнопка
Код: Выделить всё
.INCLUDE "1200def.inc"
.equ Fo=4000000
;NAME DEFINITIONS FOR GLOBAL VARIABLES ALLOCATED TO REGISTERS
.def COUNTER=R20
.DEF _PowerOn=R3
.CSEG
.ORG $0000
RJMP INIT ; Reset Handler
RJMP EXT_INT0 ; IRQ0 Handler
;.ORG $0006
.ORG $0002
CLI
EXT_INT0:
INIT:
; 0000 0071 // Analog Comparator initialization
; 0000 0072 // Analog Comparator: Off
; 0000 0073 // The Analog Comparator's positive input is
; 0000 0074 // connected to the AIN0 pin
; 0000 0075 // The Analog Comparator's negative input is
; 0000 0076 // connected to the AIN1 pin
; 0000 0077 ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
LDI R30,LOW(128)
OUT 0x8,R30
; 0000 0078 // Digital input buffer on AIN0: On
; 0000 0079 // Digital input buffer on AIN1: On
; 0000 007A DIDR=(0<<AIN0D) | (0<<AIN1D);
LDI R30,LOW(0)
OUT 0x1,R30
; 0000 007B
; 0000 007C
; 0000 007D
; 0000 007E
; 0000 007F DDRD=0x00;PORTD=0x01;
OUT 0x11,R30
LDI R30,LOW(1)
OUT 0x12,R30
; 0000 0080 DDRB=0x1C;PORTB=0x00;
LDI R30,LOW(28)
OUT 0x17,R30
LDI R30,LOW(0)
OUT 0x18,R30
; 0000 0081 PowerOn=1;
LDI R30,LOW(1)
MOV R3,R30
; 0000 0082 while (1)
_0x3:
; 0000 0083 {
; 0000 0084 if (PIND.0 ==0)
SBIC 0x10,0
RJMP _0x6
; 0000 0085
; 0000 0086 { PORTB=0x1C;
LDI R30,LOW(28)
OUT 0x18,R30
; 0000 0087 delay_ms(100);
; ------------------------
LDI R20,BYTE3(100*Fo/1000/5)
LDI R21,BYTE2(100*Fo/1000/5)
LDI R22,BYTE1(100*Fo/1000/5)
RCALL DELAY
; 0000 0088 PORTB=0x0;
LDI R30,LOW(0)
OUT 0x18,R30
; 0000 0089 if (PIND.0 ==0 )
SBIC 0x10,0
RJMP _0x7
; 0000 008A { if ( PowerOn==0) PowerOn=1;
TST R3
BRNE _0x8
LDI R30,LOW(1)
MOV R3,R30
; 0000 008B else PowerOn=0;
RJMP _0x9
_0x8:
CLR R3
; 0000 008C delay_ms(300);
_0x9:
LDI R20,BYTE3(300*Fo/1000/5)
LDI R21,BYTE2(300*Fo/1000/5)
LDI R22,BYTE1(300*Fo/1000/5)
RCALL DELAY
; 0000 008D }
; 0000 008E }
_0x7:
; 0000 008F if (PowerOn==1)
_0x6:
LDI R30,LOW(1)
CP R30,R3
BRNE _0xA
; 0000 0090 {
; 0000 0091 PORTB=0x1C;
LDI R30,LOW(28)
OUT 0x18,R30
; 0000 0092 PORTB=0x1C;
OUT 0x18,R30
; 0000 0093 PORTB=0x1C;
OUT 0x18,R30
; 0000 0094 PORTB=0x1C;
OUT 0x18,R30
; 0000 0095 PORTB=0x1C;
OUT 0x18,R30
; 0000 0096 PORTB=0x1C;
OUT 0x18,R30
; 0000 0097 PORTB=0x1C;
OUT 0x18,R30
; 0000 0098 PORTB=0x1C;
OUT 0x18,R30
; 0000 0099 PORTB=0x1C;
OUT 0x18,R30
; 0000 009A PORTB=0x1C;
OUT 0x18,R30
; 0000 009B PORTB=0x0;
LDI R30,LOW(0)
OUT 0x18,R30
; 0000 009C }
; 0000 009D }
_0xA:
RJMP _0x3
; 0000 009E
; 0000 009F }
_0xB:
RJMP _0xB
; .FEND
;
;
;-----------------------------
DELAY:
SUBI R22,BYTE1(1)
SBCI R21,BYTE2(1)
SBCI R20,BYTE3(1)
BRNE DELAY
RET
спасибо тов akl за процедуру задержки .
ух ты.... показывает