Чт июл 06, 2017 20:56:11
Чт июл 06, 2017 21:15:11
Чт июл 06, 2017 22:06:18
но если склероз не изменяет - "котята ловятся" на невырубленной до конца периферии (ADC, компаратор).
Чт июл 20, 2017 13:55:43
Чт июл 20, 2017 14:14:51
Сб июл 22, 2017 01:42:00
Вс июл 23, 2017 07:07:49
Пн июл 24, 2017 19:17:44
Ср июл 26, 2017 15:30:45
Сб июл 29, 2017 08:23:45
Вс июл 30, 2017 22:54:52
Вс июл 30, 2017 23:09:42
Вс июл 30, 2017 23:19:01
Пн июл 31, 2017 07:27:48
Пн июл 31, 2017 10:27:52
Vadynik писал(а):Как вообще бороться с этой гадостью? timestep too smal
Пн июл 31, 2017 10:41:23
Vadynik писал(а):Как вообще бороться с этой гадостью? timestep too smal
Ср авг 02, 2017 20:33:53
Чт авг 03, 2017 18:00:31
list p=12f675
#include <p12f675.inc>
__CONFIG _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_ON & _PWRTE_ON & _WDTE_OFF & _INTRC_OSC_NOCLKOUT
F equ 1
W equ 0
W_temp equ 20h ;INITIALIZED INTO INTERCOM
STATUS_temp equ 21h ;INITIALIZED INTO INTERCOM
reg_33h equ 36h
varTMR0 equ 22h ;interrupt counter for TMR0 interrupt
varT equ 23h
byte equ 24h
byte_counter equ 25h ;for counting key bytes
bit_counter equ 26h ;for counting bits in the byte when each byte is transmitted
key_number_bits equ 27h ;bits of one byte when each byte is transmitted DOESN'T NEED INITIALIZED
reg_1 equ 28h
reg_2 equ 29h
reg_3 equ 30h
reg_4 equ 31h
reg_5 equ 32h
reg_6 equ 33h
reg_7 equ 34h
reg_8 equ 35h
org 0x0000
goto Init
;.............................................
;.............................................
;.............................................
org 0x0004
movwf W_temp ;saving key register values
swapf STATUS,W
clrf STATUS
movwf STATUS_temp
decfsz varTMR0,F ;--varTMR0
goto met1 ;--varTMR0 <>0
bcf INTCON,T0IE ;--varTMR0 = 0 --> disable TMR0 owerflow interrupt
;........;interrupt actions
bsf STATUS,RP0
bsf TRISIO,0 ;GPIO as input
bcf STATUS,RP0
;........;;;;;;;;;;;;
goto escape
met1 bsf STATUS,RP0
bcf INTCON,T0IF ;clear TMR0 interrupt flag
;movwf 00h&TMR0
MOVLW 01h
MOVWF TMR0
escape swapf STATUS_temp,W ;?????????????? ???????? ???????? ?????????
movwf STATUS
swapf W_temp,F
swapf W_temp,W
retfie ;????? ?? ???????????? ????????? ??????????
;.............................................
;.............................................
;.............................................
Init
bcf STATUS,RP0;BANK 0
movlw b'00000001'
movwf GPIO ;LOW lvl http://avr.ru/beginer/understand/1wire ????????..... so to press data bus DO GPIO.1 as OUTPUT!!!
MOVLW 07h ;Set GP<2:0> to
MOVWF CMCON ;digital IO
bsf STATUS,RP0;BANK 1
CLRF ANSEL ;Digital I/O
MOVLW b'11111111'
MOVWF TRISIO ;all ports as inputs
bsf INTCON,T0IF
bcf INTCON,T0IE
bcf INTCON,GIE
MOVLW b'11010111' ; ~, ~, CLKOUT, ~, TMR0, prescaller 256
MOVWF OPTION_REG
MOVLW b'00001001'
MOVWF bit_counter
MOVLW b'00110011'
MOVWF reg_33h
bcf STATUS,RP0;BANK 0
wait_buttons
bsf STATUS,RP0
MOVLW b'11111111'
MOVWF TRISIO
bcf STATUS,RP0
movlw b'00000001'
movwf GPIO
wait_buttons_wr
btfsc GPIO,5 ;Is the button 5 NOT pressed?
goto com33h ;Pressed 0 lvl
;not pressed 0 lvl
btfsc GPIO,4 ;Is the button 4 NOT pressed?
call comRESET ;Pressed 1 lvl
goto wait_buttons_wr ;not pressed
;===========RESET==============
comRESET
;НАЧАЛО Антидребезг или что-то типа=================== Антидребезг или что-то типа
btfss GPIO,4 ;с этим кодом Антидребезг или что-то типа
goto $+3 ;!!!!!СВЕТОДИОД НЕ ГОРИТ!!!! Антидребезг или что-то типа
call Delay117mcs ;для Source code ;Вот. Антидребезг или что-то типа
goto comRESET
;КОНЕЦ Антидребезг или что-то типа====================
nop
bsf STATUS,RP0
bcf TRISIO,0 ;GPIO.0 as output Turn on LED
call Delay0.5s
bcf STATUS,RP0
;!!!!!!!!!!!!!!REMEMBER about 480mcs
bsf STATUS, RP0
bcf TRISIO,1 ;GPIO as output-->eat voltage
call Delay117mcs ;+2
call Delay117mcs ;234mcs+4
call Delay117mcs ;351mcs+6
call Delay117mcs ;468mcs+8
nop
nop
nop
nop
bsf TRISIO,1 ;GPIO as input-->does't eat voltage
;bcf STATUS,RP0 ;BANK 0
;btfsc GPIO,1 ;Did Slave answer PREFERENCE?
;goto $-1 ;No
;Yes
;bsf STATUS,RP0 ;BANK 1
call Delay117mcs ;+2
call Delay117mcs ;234mcs+4
call Delay117mcs ;351mcs+6
call Delay117mcs ;468mcs+8
nop
nop
nop
nop
goto wait_buttons
;============
;===========GIVE ME YOUR KEY NUM============
com33h
btfsc GPIO,5
goto com33h
nop
bsf STATUS,RP0;BANK 1
bcf TRISIO,0 ;GPIO.0 as output Turn on LED
call Delay0.5s
bcf STATUS,RP0
next_bit
rrf reg_33h,f
btfsc STATUS,0
goto TX_1 ;C = 1
goto TX_0 ;C=0
further
decfsz bit_counter,f ;--bit_counter of bits in 33h
goto next_bit ;--bit_c<>0
;all bites were transmitted
MOVLW 09h
MOVWF bit_counter
goto wait_buttons
;goto Key_Save
;============
;==========TX_1=======
TX_1
bsf STATUS,RP0
bcf TRISIO,1 ;GPIO.1 always low lvl. TRISIO.1 as output=>eat voltage
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop ;10 mcs
bsf TRISIO,1 ;TRISIO.1 as input =>doesn't eat voltage
call Delay117mcs
goto further
;=======
;=========TX_0========
TX_0 ;120mcs
bsf STATUS,RP0
bcf TRISIO,1 ;GPIO.1 always low lvl. TRISIO.1 as output=>eat voltage
call Delay117mcs
nop
nop ;+2mcs
bsf TRISIO,1 ;TRISIO.1 as output =>doesn't eat voltage
goto further
;==========SAVE KEY NUM============
Key_Save
;bsf STATUS,RP0
bcf TRISIO,1 ;GPIO.1 always low lvl. TRISIO.1 as output=>eat voltage
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop ;10mcs
nop
nop ;12mcs
bsf TRISIO,1 ;GPIO.1 always low lvl. TRISIO.1 as input=> doesn't eat voltage
bcf STATUS,RP0;BANK 0
btfss GPIO,1 ;DOES GPIO.1 have high lvl? 14mcs
goto RD_0 ;NO, GPIO has low lvl !!!!!!!CHECK IN KEY CODE TIME LIMITS
btfss GPIO,1 ;DOES GPIO.1 have high lvl? 15mcs
goto RD_0 ;NO, GPIO has low lvl
btfss GPIO,1 ;DOES GPIO.1 have high lvl? 16mcs
goto RD_1 ;NO, GPIO has low lvl
;==================
;===============MACRO======
next_byte macro ;key_number_bits
reg_#v(byte_counter) dw key_number_bits
endm
;===========
RD_1 bsf STATUS,1
goto writing
RD_0 bcf STATUS,1
goto writing
writing
bsf STATUS,RP0;BANK 1
rrf key_number_bits,f ;writing into reg_bit
decfsz bit_counter,f ;8 times cyclic shift to the right was? init in RESET and at the beginning
;Do we need next byte_reg?
goto Key_Save ;No bit_counter-- >0 go for the next BIT
next_byte ;Yes bit_counter-- = 0 go for the next BYTE_REG
decfsz byte_counter,f
goto Key_Save ;b_c<>0 Not all key bytes are transmitted
bcf TRISIO,0 ;GPIO.0 as output Turn on LED
call Delay0.5s
bcf STATUS,RP0
goto wait_buttons ;All bytes were transmitted
;===
;===========DELAY 5 000 000 cycles====
Delay0.5s
bcf STATUS,RP0;BANK 0
MOVLW 05h
MOVWF varTMR0
MOVLW 01h
MOVWF TMR0
bsf STATUS,RP0
bcf INTCON,T0IF
bsf INTCON,T0IE
bsf INTCON,GIE
return
;========
;==========DELAY 117mcs===============
Delay117mcs
MOVLW 39h ;39*3=117
MOVWF varT
mr decfsz varT,f
goto mr ;--varT <>0
return
;=======
end
Чт авг 03, 2017 18:40:29
Чт авг 03, 2017 20:21:30