ĐTC để nắm bắt

M

mattycha

Guest
Chào.Tôi cố gắng để nhân rộng một dự án từ tốt nhất-vi điều khiển-ví dụ.

Đây là một loạt dự án dectector siêu âm.Ban đầu, nó được viết bằng 16F88

nhưng tôi thay đổi thành 18F2455.Ngoài ra, mã ban đầu được viết bằng mikroC

nhưng tôi chuyển sang C18.Vấn đề tôi gặp là mặc dù Hoa Kỳ phát hiện phạm vi của tôi là

khoảng 11cm về từ tường, đọc LCD là 23.641 ......

Tôi không chắc chắn là lý do tại sao các hình LCD hiển thị như một giá trị lớn.Tôi đã thay đổi

nhị phân thành thập phân bằng cách sử dụng một chức năng "putdec".Tôi đang sử dụng 20MHz tinh thể và

Tôi tính để sản xuất một khoảng thời gian 40kHz trên RC1.RC2 là pin tiếp nhận,

cố gắng nắm bắt tín hiệu bằng cách sử dụng CCP1CON = 0b00000101.

Mã số:# include <p18f2455.h>

# include <delays.h>

# pragma config FOSC = HS

# pragma config WDT = OFF

# pragma config PWRT = OFF

# pragma config BOR = OFF

# pragma config LVP = OFF

# pragma config MCLRE = ON# pragma ngắt MyHighInt

# pragma code high_vector = 0x08void MyHighInt (void);

void high_vector (void);

void enable_interrupts (void);

void disable_interrupts (void);

void siêu âm (void);

void display (int value);

void welcome ();

void clearLCD ();

void writeData (unsigned char dữ liệu);

void sendData (unsigned char dữ liệu);

void writeString (rom char * str);

void putdec (int n);int T1_O = 0; / / timer1 tràn cập nhật trong ngắt thường lệ

int t_capL = 0; / / timer1 thấp

int t_capH = 0; / / timer1 cao

int t_capO = 0; / / timer1 tràn

int CapVal = 0; / / chụp

unsigned short CapInt = 0; / / chiếm được một cái gì đó trong ngắt thường lệ

unsigned short capon = 1; / / chụp chỉ có 1 giá trị# define gửi PORTCbits.RC1

# define LCDData PORTB

# define rs PORTAbits.RA3

# define PORTAbits.RA2 rw

# define en PORTAbits.RA5void high_vector (void)

(

_asm GOTO MyHighInt _endasm

)# pragma mãvoid MyHighInt (void)

(

nếu (PIR1bits.TMR1IF == 1)

(

PIR1bits.TMR1IF = 0; / / rõ ràng tràn timer1 bit

T1_O ;

)nếu (PIR1bits.CCP1IF == 1)

(

PIR1bits.CCP1IF = 0; / / rõ ràng chụp flagnếu (capon == 1)

(

Capon = 0;

t_capL = CCPR1L;

t_capH = CCPR1H;

t_capO = T1_O;

CapInt = 1;

)

)

)void main (void)

(

int val, s1, s2, tH, TL, tO;

unsigned long calc = 0;CCP1CON = 0b00000101; / / ĐTC để nắm bắt mọi cạnh tăng

T1CONbits.TMR1ON = 1; / / timer1 ngày

ADCON0 = 0;

ADCON1 = 0x0F;

PORTB = 0;

TRISB = 0;

TRISCbits.TRISC1 = 0; / /

TRISCbits.TRISC2 = 1; / / nhận tín hiệu Mỹ

/ / LCD

TRISAbits.TRISA3 = 0;

TRISAbits.TRISA2 = 0;

TRISAbits.TRISA5 = 0;

rs = 0;

rw = 0;

en = 0;CapInt = 0; / / đặt lại chụp chỉ báofor (;;)

(

Capon = 1; / / cho phép chụp một giá trị

tO = T1_O; / / lấy giá trị hiện tại

tH = TMR1H;

TL = TMR1L;t_capL = 0; t_capH = 0; t_capO = 0; / / khởi tạo chụpsiêu âm ();

enable_interrupts ();

hiển thị (val);

disable_interrupts ();nếu (CapInt == 0) / / không echo??

(

enable_interrupts ();

hiển thị (val);

disable_interrupts ();

)if (CapInt == 1) / / chiếm được bất cứ điều gì??

(

CapInt = 0; / / đặt lại cho thời gian tới

s1 = (t_capH - tH);

s2 = (t_capL - TL);

calc = ((s1 <<8)) s2;

calc *= 34;

calc / = 10000; / / (1/20MHz) * 340m / s * 100cm / m * 2

val = (int) calc;

hiển thị (val);

)

clearLCD ();

)

)
void enable_interrupts (void)

(

PIR1bits.TMR1IF = 0; / / timer1

PIR1bits.CCP1IF = 0; / / chụp

PIE1bits.CCP1IE = 1; / / ngắt bật

INTCONbits.GIE = 1; / / cho phép ngắt toàn cầu

INTCONbits.PEIE = 1; / / cho phép ngắt ngoại vi

)
void disable_interrupts (void)

(

INTCONbits.GIE = 0; / / vô hiệu hóa toàn cầu ngắt

INTCONbits.PEIE = 0; / / vô hiệu hóa ngắt ngoại vi

)
void siêu âm (void)

(

gửi = 1;

Delay10TCYx (6);

Delay1TCY ();

Delay1TCY ();

Delay1TCY ();

gửi = 0;

Delay10TCYx (6);

Delay1TCY ();

Delay1TCY ();gửi = 1;

Delay10TCYx (6);

Delay1TCY ();

Delay1TCY ();

Delay1TCY ();

gửi = 0;

Delay10TCYx (6);

Delay1TCY ();

Delay1TCY ();gửi = 1;

Delay10TCYx (6);

Delay1TCY ();

Delay1TCY ();

Delay1TCY ();

gửi = 0;

Delay10TCYx (6);

Delay1TCY ();

Delay1TCY ();
gửi = 1;

Delay10TCYx (6);

Delay1TCY ();

Delay1TCY ();

Delay1TCY ();

gửi = 0;

Delay10TCYx (6);

Delay1TCY ();

Delay1TCY ();

)
void display (int value) (

welcome ();

sendData (0xC0); / / dòng 2, vị trí 0

writeString ( "Quận:");

sendData (0xC5);

putdec (giá trị);

Delay1KTCYx (5000); / / chờ 1second

)
void welcome ()

(

Delay1KTCYx (250); / / Đợi 20ms

sendData (0x38); / / Set LCD đến 8-bit hoạt động, 2-hiển thị dòng và 5 x 8 dot character font

Delay1KTCYx (250); / / Wait 2ms

sendData (0x0E); / / Turn off màn hình LCD, con trỏ chuột ra và blinker off

Delay1KTCYx (15); / / Wait 2ms

sendData (0x01); / / Xoá màn hình LCD

Delay1KTCYx (15); / / Wait 2ms

sendData (0x06); / / Đặt chế độ nhập LCD để tăng bởi một và để chuyển con trỏ đến bên phải.
Không có thay đổi sẽ hiển thị.sendData (0x80);

writeString ( "siêu âm trong cm");

)void clearLCD ()

(

Delay1KTCYx (250); / / Đợi 20ms

sendData (0x38); / / Set LCD đến 8-bit hoạt động, 2-hiển thị dòng và 5 x 8 dot character font

Delay1KTCYx (250); / / Wait 2ms

sendData (0x0E); / / Turn off màn hình LCD, con trỏ chuột ra và blinker off

Delay1KTCYx (15); / / Wait 2ms

sendData (0x01); / / Xoá màn hình LCD

Delay1KTCYx (15); / / Wait 2ms

sendData (0x06); / / Đặt chế độ nhập LCD để tăng bởi một và để chuyển con trỏ đến bên phải.
Không có thay đổi sẽ hiển thị.

)void sendData (unsigned char data) (

LCDData = dữ liệu;

rs = 0;

rw = 0;

en = 1;

Delay1KTCYx (1);

en = 0;

)void writeData (unsigned char data) (

LCDData = dữ liệu;

rs = 1;

rw = 0;

en = 1;

Delay1KTCYx (1);

en = 0;

)void writeString (rom char * str) (

while (* str) (

writeData (* str);

str ;

)

)void putdec (int n)

(

int rem = n% 10;

int quot = n / 10;

nếu (quot> 0)

(

putdec (quot);

)

writeData (rem '0 ');

)

 

Welcome to EDABoard.com

Sponsor

Back
Top