КПК, чтобы захватить

M

mattycha

Guest
Привет.Я пытаюсь повторить лучший проект из-микроконтроллер на примере.

Это проект dectector ультразвуковой диапазон.Первоначально, она написана в 16F88

но я превращалась 18F2455.Кроме того, исходный код был написан в mikroC

но я переключения на C18.Проблема У меня в том, что хотя моя США диапазон детектора

О около 11см от стены, чтение ЖК 23641 ......

Я не знаю, почему ЖК проявляет такую большую ценность.Я изменил

бинарный в десятичную помощью функции "putdec".Я использую 20MHz кристалла и

Я подсчитал производить период 40kHz на RC1.RC2 является получение PIN-кода

пытаясь уловить сигнал, используя CCP1CON = 0b00000101.

Код:# включить <p18f2455.h>

# включить <delays.h>

# Pragma конфигурации FOSC = HS

# Pragma конфигурации WDT = OFF

# Pragma конфигурации PWRT = OFF

# Pragma конфигурации бор = OFF

# Pragma конфигурации LVP = OFF

# Pragma конфигурации MCLRE = ON# Pragma прервать MyHighInt

# Pragma Код high_vector = 0x08Пустота MyHighInt (VOID);

Пустота high_vector (VOID);

Пустота enable_interrupts (VOID);

Пустота disable_interrupts (VOID);

Пустота ультразвуковой (VOID);

Пустота дисплей (неподписанных Int стоимости);

Добро пожаловать Void ();

Пустота ClearLCD ();

Пустота writeData (неподписанные данные Char);

Пустота SendData (неподписанных данные Char);

Пустота WriteString (сопзЬ Char ROM * Str);

Пустота putdec (неподписанных Int N);неподписанных T1_O Int = 0; / / timer1 переполнение обновлен в прерывания

неподписанных t_capL Int = 0; / / низкое timer1

неподписанных t_capH Int = 0; / / timer1 высокой

неподписанных t_capO Int = 0; / / timer1 переполнение

неподписанных CapVal Int = 0; / / Capture

неподписанных краткий CapInt = 0; / / захватил что-то в прерывания

неподписанных краткий Capon = 1; / / захват только 1 Значение# DEFINE отправить PORTCbits.RC1

# DEFINE LCDData PORTB

# DEFINE RS PORTAbits.RA3

# DEFINE RW PORTAbits.RA2

# DEFINE EN PORTAbits.RA5high_vector Void (Пустота)

(

_asm GOTO MyHighInt _endasm

)# Pragma кодаMyHighInt Void (Пустота)

(

если (PIR1bits.TMR1IF == 1)

(

PIR1bits.TMR1IF = 0 / / четкое разрядные timer1 переполнение

T1_O ;

)если (PIR1bits.CCP1IF == 1)

(

PIR1bits.CCP1IF = 0 / / четкое захват флагаесли (Capon == 1)

(

Capon = 0;

t_capL = CCPR1L;

t_capH = CCPR1H;

t_capO = T1_O;

CapInt = 1;

)

)

)Основными Void (Пустота)

(

неподписанных Int Валя, S1, S2, TH, TL, с;

неподписанных долгое выч = 0;CCP1CON = 0b00000101 / / КПК, чтобы захватить всякий подъем края

T1CONbits.TMR1ON = 1; / / timer1 на

ADCON0 = 0;

ADCON1 = 0x0F;

PORTB = 0;

TRISB = 0;

TRISCbits.TRISC1 = 0; / /

TRISCbits.TRISC2 = 1; / / США получают сигнала

/ / LCD

TRISAbits.TRISA3 = 0;

TRISAbits.TRISA2 = 0;

TRISAbits.TRISA5 = 0;

RS = 0;

RW = 0;

En = 0;CapInt = 0; / / Сброс индикатора захватадля (;;)

(

Capon = 1; / / позволяют захватить значения

с = T1_O / / получить текущее значение

TH = TMR1H;

TL = TMR1L;t_capL = 0; t_capH = 0; t_capO = 0; / / Инициализация захватаультразвуковой ();

enable_interrupts ();

дисплей (Val);

disable_interrupts ();если (CapInt == 0) / / нет эха?

(

enable_interrupts ();

дисплей (Val);

disable_interrupts ();

)Else If (CapInt == 1) / / захваченных ничего?

(

CapInt = 0; / / сброс в следующий раз

S1 = (t_capH - е);

S2 = (t_capL - TL);

Calc = ((S1 <<8)) S2;

Calc *= 34;

Calc / = 10000 / / (1/20MHz) * 340м / с * 100см / м * 2

Val = (INT) Calc;

дисплей (Val);

)

ClearLCD ();

)

)
enable_interrupts Void (Пустота)

(

PIR1bits.TMR1IF = 0; / / timer1

PIR1bits.CCP1IF = 0; / / Capture

PIE1bits.CCP1IE = 1; / / разрешение прерывания

INTCONbits.GIE = 1; / / разрешить глобальные прерывания

INTCONbits.PEIE = 1; / / позволить периферийных прерываний

)
disable_interrupts Void (Пустота)

(

INTCONbits.GIE = 0; / / отключение глобального прерывания

INTCONbits.PEIE = 0; / / отключение периферийных прерываний

)
Пустота ультразвуковой (VOID)

(

Отправить = 1;

Delay10TCYx (6);

Delay1TCY ();

Delay1TCY ();

Delay1TCY ();

Отправить = 0;

Delay10TCYx (6);

Delay1TCY ();

Delay1TCY ();Отправить = 1;

Delay10TCYx (6);

Delay1TCY ();

Delay1TCY ();

Delay1TCY ();

Отправить = 0;

Delay10TCYx (6);

Delay1TCY ();

Delay1TCY ();Отправить = 1;

Delay10TCYx (6);

Delay1TCY ();

Delay1TCY ();

Delay1TCY ();

Отправить = 0;

Delay10TCYx (6);

Delay1TCY ();

Delay1TCY ();
Отправить = 1;

Delay10TCYx (6);

Delay1TCY ();

Delay1TCY ();

Delay1TCY ();

Отправить = 0;

Delay10TCYx (6);

Delay1TCY ();

Delay1TCY ();

)
Пустота дисплей (неподписанных Int Value) (

Добро пожаловать ();

SendData (0xC0); / / линия 2, 0 позиций

WriteString ( "Расстояние:");

SendData (0xC5);

putdec (стоимость);

Delay1KTCYx (5000) / / ждать 1second

)
Добро пожаловать Void ()

(

Delay1KTCYx (250); / / Wait 20ms

SendData (0x38) / / Установить ЖКД для 8-разрядном режиме, 2-строчный дисплей и 5 х 8 точек символа шрифта

Delay1KTCYx (250); / / Wait 2ms

SendData (0x0E); / / Turn Off ЖК-дисплей, курсоров и шоры Off Off

Delay1KTCYx (15); / / Wait 2ms

SendData (0x01); / / Открытый ЖК-дисплей

Delay1KTCYx (15); / / Wait 2ms

SendData (0x06) / / Установить ЖК вступления режиме увеличиваются на одну и перенести курсор вправо.
Нет изображения смены.SendData (0x80);

WriteString ( "Ультразвуковая в см);

)Пустота ClearLCD ()

(

Delay1KTCYx (250); / / Wait 20ms

SendData (0x38) / / Установить ЖКД для 8-разрядном режиме, 2-строчный дисплей и 5 х 8 точек символа шрифта

Delay1KTCYx (250); / / Wait 2ms

SendData (0x0E); / / Turn Off ЖК-дисплей, курсоров и шоры Off Off

Delay1KTCYx (15); / / Wait 2ms

SendData (0x01); / / Открытый ЖК-дисплей

Delay1KTCYx (15); / / Wait 2ms

SendData (0x06) / / Установить ЖК вступления режиме увеличиваются на одну и перенести курсор вправо.
Нет изображения смены.

)Пустота SendData (неподписанных данные Char) (

LCDData = данные;

RS = 0;

RW = 0;

En = 1;

Delay1KTCYx (1);

En = 0;

)Пустота writeData (неподписанные данные Char) (

LCDData = данные;

RS = 1;

RW = 0;

En = 1;

Delay1KTCYx (1);

En = 0;

)Пустота WriteString (сопзЬ Char ROM * ул) (

в то время (* ул) (

writeData (* Str);

Ул ;

)

)Пустота putdec (неподписанных Int N)

(

неподписанных Int бэр = N% 10;

неподписанных Int Quot = N / 10;

если (далее "> 0)

(

putdec (далее ");

)

writeData (REM '0 ');

)

 

Welcome to EDABoard.com

Sponsor

Back
Top