Вт фев 12, 2013 17:19:38
#include <htc.h>
#include <stdio.h>
#include <pic12f1822.h>;
__CONFIG(WDTE_OFF & FOSC_INTOSC & PWRTE_OFF & MCLRE_OFF & CP_OFF & CPD_OFF & BOREN_OFF & CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF & WRT_OFF & PLLEN_OFF & STVREN_OFF & LVP_OFF );
unsigned int porog, tmp;
void interrupt isr(void){
if (TMR1IF == 1) {
RA0 = 1;
TMR1IF = 0;
}
}
void
main (void)
{
OSCCON = 0b01101011; // 4Mhz
GIE = 1;
PEIE=1;
OPTION_REG=0b00100000;
INTCON=0b11100000;
CPSCON0 = 0b10001100;
ANSA2 = 1;// set sense-input to analog
TRISA2 = 1;
PORTA=0;
T1CON = 0b11000001; // TMR1 capacitive sensing osc, prescaler 1/1, decicated osc disabled,no synch,timer1 enabled
T1GCON = 0;
TMR1IE = 1;
TMR1L = 0x00;
TMR1H = 0x00;
TRISA0 = 0;
RA0 = 0;
while (1);
{}
}
}
Чт июн 11, 2020 09:44:31
#include <P12F1822.inc> ;f=32,0 MHz INTRC
list P=12F1822
__CONFIG _CONFIG1,_PWRTE_ON&_MCLRE_OFF&_IESO_OFF&_FOSC_INTOSC&_FCMEN_OFF;&_CP_ON
cblock 0x20
STATE,MEM,MEM1,NL0,NH0,NL1,NH1,SET_NL0,SET_NH0,SET_NL1,SET_NH1
PARA1
endc
;----------
#define SV0 PORTA,4 ;светодиод SV0
#define SV1 PORTA,5 ;светодиод SV1
;#define CPS0 PORTA,0 ;touchsensor CPS0
;#define CPS1 PORTA,1 ;touchsensor CPS1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ИНИЦИАЛИЗАЦИЯ
org 0x00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0x00
GOTO INIT_ALL
org 0x04
GOTO SRV_INT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INIT_ALL
BANKSEL PORTA
CLRF PORTA
;---------- ;настройка блока CPS
MOVLW B'11001000' ;ток Medium from FVR
;MOVLW B'10001000' ;ток Medium Fixed Voltage References
MOVWF CPSCON0 ;Fixed Voltage References
MOVLW B'00000000' ;канал сенсора CPS0
MOVWF CPSCON1
MOVLW B'11000101' ;источник для TMR1 от CPS
;MOVLW B'00000101' ;источник для TMR1 от OSC/4
MOVWF T1CON ;включен с преддел. 1:1
;MOVLW B'10000001' ;Gate от переполнения TMR0
;MOVWF T1GCON ;
;BSF T1GCON,T1GTM ;Togle mode
;BSF T1GCON,T1GPOL ;Polarity
;---------- ;настройка портов
BANKSEL LATA
CLRF LATA
MOVLW B'10001010' ;
MOVWF FVRCON ;выход 2,048V
BANKSEL ANSELA
MOVLW B'00000011'
MOVWF ANSELA ;сенсор CPS0,CPS1 аналог
BANKSEL TRISA
MOVLW B'00000011'
MOVWF TRISA ;сенсор CPS0,CPS1 на вход
;MOVLW B'00001100' ;неиспользуемый в CPS канал
;MOVWF ADCON0
;---------- ;настройка INTOSC и WDT
MOVLW B'11110000' ;F = 32 MHz INTRCIO
MOVWF OSCCON
MOVLW B'01010001' ;F = 32 MHz INTRCIO
MOVWF OSCSTAT
MOVLW B'00001000' ;16 msec
MOVWF WDTCON
;---------- ;настройка TMR0, TMR2
MOVLW B'00000110' ;настройка таймера TMR0
MOVWF OPTION_REG ;с преддел. 1:128
BANKSEL TMR2
MOVLW 0xFF ;
MOVWF PR2 ;T=4*Tosc*(PR2+1)*(TMR2 Prescale)
MOVLW B'00000111' ;включить TMR2
MOVWF T2CON ;предделитель TMR2 1:64
;BSF INTCON,PEIE ;разрешить прерывание периферии
;----------
ClrMem MOVLW 0x20 ;очистка памяти RAM
MOVWF FSR0 ;
ClrMem1 CLRF INDF0
INCF FSR0
BTFSS FSR0,7 ;всего кол-во памяти
GOTO ClrMem1
;----------
MOVLW 0 ;задержка 0,5 сек
MOVWF MEM
CALL D2
DECFSZ MEM
GOTO $-2
;----------
CALL NO_FINDER ;начальные значения CPS без пальца
;BSF INTCON,TMR0IE ;разрешить прерывание TMR0
;BSF INTCON,GIE ;разрешить прерывания
;BANKSEL PIE1
;BSF TMR2IE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN CALL D2 ;задержка 2 мсек
GOTO MAIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NO_FINDER ;сохраняем начальные значения без пальца в EEPROM
BANKSEL TMR0
CLRF CPSCON1 ;канал 0
CLRF EE_ADR ;нулевой адрес
;BANKSEL FVRCON
;BTFSS FVRCON,FVRRDY
;GOTO NO_FINDER
;BANKSEL TMR0
BSF T1CON,TMR1ON ;включить TMR1
CLRF TMR0
CLRF TMR1H
BCF PIR1,TMR1IF
CLRF TMR1L
BCF INTCON,TMR0IF ;ожидание 2 mсек
CLRWDT
BTFSS INTCON,TMR0IF
GOTO $-2
BCF T1CON,TMR1ON ;стоп TMR1
BTFSC PIR1,TMR1IF ;если переполнение TMR1
RETURN ;то выход без записи
MOVFW TMR1H
MOVWF EE_DATA
CALL EE_WR ;сохраняем TMR1H в EEPROM
INCF EE_ADR ;следующий адрес
MOVFW TMR1L
MOVWF EE_DATA
CALL EE_WR ;сохраняем TMR1L в EEPROM
INCF CPSCON1 ;следующий канал 1
INCF EE_ADR ;следующий адрес
BSF T1CON,TMR1ON ;включить TMR1
CLRF TMR0
CLRF TMR1H
BCF PIR1,TMR1IF
CLRF TMR1L
BCF INTCON,TMR0IF ;ожидание 2 mсек
CLRWDT
BTFSS INTCON,TMR0IF
GOTO $-2
BCF T1CON,TMR1ON ;стоп TMR1
BTFSC PIR1,TMR1IF ;если переполнение TMR1
RETURN ;то выход без записи
MOVFW TMR1H
MOVWF EE_DATA
CALL EE_WR ;сохраняем TMR1H в EEPROM
INCF EE_ADR ;следующий адрес
MOVFW TMR1L
MOVWF EE_DATA
CALL EE_WR ;сохраняем TMR1L в EEPROM
RETURN
Чт июн 11, 2020 11:34:14
Чт июн 11, 2020 14:05:52
Чт июн 11, 2020 16:11:41
Чт июн 11, 2020 17:39:30