Chương trình điều khiển và kết quả thực nghiệm

Một phần của tài liệu NGHIÊN CỨU VÀ THIẾT KẾ HỆ THỐNGTHU THẬP VÀ XỬ LÝ DỮ LIỆU NHIỀU KÊNH, THÔNG MINH TRÊN CẢM BIẾN ÁNH SÁNG / TẦN SỐ DÙNG MC68HC11 (Trang 68 - 77)

XÂY DỰNG THỰC TẾ HỆ THỐNG THU THẬP DỮ LIỆU

4.3.Chương trình điều khiển và kết quả thực nghiệm

Thư mục cài đặt trên ổ cứng: c:\user\hc11\hc11_tool\wbench\6811\inc chứa hàm vào ra cơ sở của chương trình, chương trình đo tần số với một số hàm thư viên

được viết như sau: − Chương trình đo tần số #include <stdio.h> #include "afficheur.h" #include "afficheur_sup.h" #include "registres_hc11.h"

extern char freq(unsigned int,long *freq_q1632,char *unite); extern char freq_periode(long *freq_q1632, char *unite); extern void valid_it(void);

extern void affich_q1632(long,char *); extern void valid_xirq(void);

char tab_ini_aff[] = {0x38,0x0D,0x01,0x06,0x02,0x80,00}; Run

void main(void) {

long freq1632; char unite[20];char flag;

unsigned int tetams = 1000; char flag_methode = 0; config_aff(tab_ini_aff);

/* PACTL = PACTL | 0x50; valid_it();

while(1) {

if(flag_methode == 0)flag = freq(tetams,&freq1632,unite); else flag = freq_periode(&freq1632,unite);

efface_ligne();

affich_q1632(freq1632,unite);

if ( (flag_methode == 0)&& (flag ==-1) ){efface_ligne(); outchaine("Debordement +"); }

if ( (flag_methode == 1)&& (flag !=1) ){ efface_ligne(); outchaine("Debordement -");}

if( (flag_methode ==0) && (freq1632 < 65536.0*0.373 ) ) flag_methode = 1;

if( (flag_methode ==1) && (freq1632 > 353*65536 ) )flag_methode = 0; /* change_ligne(); efface_ligne(); outinteger(flag); change_ligne(); */ if(flag_methode ==1)tempo(1000); } }

char freq(unsigned int porte, long *f, char *unite) {

unsigned long N;float ff; unsigned int k;

unsigned int PACNTH; char flag=1;

static char flagini = 0;

if (flagini ==0) { PACTL = PACTL | 0x50; flagini = 1; } TOC1 = TCNT + 125; TFLG1 = 0x80; TFLG2 = 0x20; PACNT = 0; PACNTH = 0; for(k=0;k<porte;k++) {

while( (TFLG1&0x80)==0)if( (TFLG2 & 0x20) !=0 ) { PACNTH++; TFLG2=0x20;} TFLG1 = 0x80; TOC1 = TOC1+125; } N = (long)256*PACNTH+PACNT; ff = (float)N/porte; *f = (long)(65536.0*ff); strcpy(unite," KHz"); change_ligne(); efface_ligne(); outinteger(PACNTH);

change_ligne();

if(ff>750.1)flag = -1; return(flag);

}

char freq_periode(long * f, char *unite) {

unsigned int N1,N2; float ff;long N;char flag = 1; static char flagini = 0;

; if(flagini==0){ TCTL2 = TCTL2 | 0x01; flagini = 1;} TFLG1 = 0x01; while( (TFLG1 & 0x01) == 0); TFLG1 = 0x81; TFLG2 = 0x80; TOC1 = TCNT + 65535; N1 = TIC3; while( (TFLG1 & 0x01) == 0); N2 = TIC3; N = N2 - N1; if (N < 0)N = N+65536; ff = 65536.0*125000.0/N; *f=(long)ff; strcpy(unite," Hz" );

if( (TFLG1 & 0x80)!=0) flag = -1; return(flag);

Thư viên vào ra chuẩn stdio (adsbygoogle = window.adsbygoogle || []).push({});

/* - STDIO.H - */ #ifndef _STDIO_INCLUDED #define _STDIO_INCLUDED #ifndef NULL

#define NULL (void *) 0 #endif

#ifndef EOF #define EOF (-1) #endif

#ifndef size_t

#if sizeof((char*)0 - (char*)0) <= sizeof(int) #define size_t unsigned int

#else

#define size_t unsigned long #endif

#endif /* ===

#if __TID__ & 0x8000

#pragma function=intrinsic(0) #endif === */ #ifndef MEMORY_ATTRIBUTE #define MEMORY_ATTRIBUTE #endif

MEMORY_ATTRIBUTE int puts(const char *__s); MEMORY_ATTRIBUTE int putchar(int __value);

MEMORY_ATTRIBUTE int getchar(void);

MEMORY_ATTRIBUTE int sprintf(char *__s,const char *__format,...);

MEMORY_ATTRIBUTE int printf(const char *__format,...); MEMORY_ATTRIBUTE int scanf(const char *__format,...); MEMORY_ATTRIBUTE int sscanf(const char *__s, const char *__format,...);

MEMORY_ATTRIBUTE char *gets(char *__s); #if __TID__ & 0x8000

#pragma function=default #endif

#endif

Định nghĩa thanh ghi (registres_hc11.h)

#include <stdio.h>

#define OPTION *(char*)0x1039 #define ADCTL *(char*)0x1030 #define ADR2 *(char*)0x1032

#define ADR3 *(char*)0x1033 #define PORTC *(char*)0x1003

#define DDRC *(char*)0x1007 #define PIOC *(char*)0x1002 #define TMSK1 *(char*)0x1022 #define TMSK2 *(char*)0x1024 #define TFLG1 *(char*)0x1023 #define TFLG2 *(char*)0x1025

#define TCNT *(unsigned int*) 0x100E #define TOC1 *(unsigned int*) 0x1016

#define TOC2 *(unsigned int*) 0x1018 #define TOC3 *(unsigned int*) 0x101A #define TOC4 *(unsigned int*) 0x101C #define TIC1 *(unsigned int*)0x1010 #define TIC2 *(unsigned int*)0x1012 #define TIC3 *(unsigned int*)0x1014 #define SCDR *(char*)0x102F

#define SCCR1 *(char*)0x102C #define SCCR2 *(char*)0x102D #define SCSR *(char*)0x102E #define BAUD *(char*)0x102B #define TCTL2 *(char*)0x1021 #define PACTL *(char*)0x1026

#define PACNT *(unsigned char*)0x1027

Afficheur.h

extern void valid_it(void); extern void config_aff(char *); extern void outchaine(char *); extern void outinteger(int); extern void outhex16(int); extern void change_ligne(void); extern void efface_ligne(void); extern void curseur(char); extern void virgule(void); extern void espace(void);

extern void tempo(unsigned int ms); extern void putch(char);

afficheur_sup.h (adsbygoogle = window.adsbygoogle || []).push({});

extern void ecrire_ligne(char ligne, char *texte); extern void ecrire_entier(char ligne, int n);

extern void ecrire_q1632(char ligne, long q1632, char *texte); extern void efface(char ligne);

Kết lun

Trên cơ sở tìm hiểu lý thuyết, các kết quả thực nghiệm khoá luận trình bày cách thức xây dựng một hệ thống thu thập dữ liệu với sự trợ giúp của máy tính.Trong thời gian nghiên cứu hạn hẹp, em đã thu được một số kết quả sau:

Về mặt lý thuyết:

− Tìm hiểu nguyên lý cảm biến ánh sáng, ưu điểm của cảm biến ánh sáng tần số.

− Cấu trúc hệ thống thu thập dữ liệu nhờ cảm biến với sự trợ giúp của máy tính.

− Cấu trúc một hệ cảm biến thông minh, xử lý tín hiệu trong cảm biến thông minh.

− Cấu trúc họ vi điều khiển MC68HC11. Lập trình với họ vi điều khiển MC68HC11.

Về mặt thực nghiệm:

− Tự thiết kếđược một mạch cảm biến ánh sáng có lối ra tần số trong khoảng 5Khz tới 30Khz.

− Tìm hiểu cấu trúc của mạch hỗ trợ tính toán dành cho MC68HC11.

− Tìm hiểu, xây dựng chương trình điểu khiển hiện thị kết quảđo tần số

sang màn hình tinh thể lỏng trên hệ chương trình C-spy dành cho họ vi điều khiển HC11.

Mặc dù đã hết sức cố gắng, song do thời gian thực hiện khoá luận không nhiều, kiến thức còn hạn chế nên bản khoá luận không tránh khỏi những sai sót. Em kính mong nhận được sự thông cảm cùng sự chỉ bảo và đóng góp ý kiến của thầy cô và bạn bè.

Một phần của tài liệu NGHIÊN CỨU VÀ THIẾT KẾ HỆ THỐNGTHU THẬP VÀ XỬ LÝ DỮ LIỆU NHIỀU KÊNH, THÔNG MINH TRÊN CẢM BIẾN ÁNH SÁNG / TẦN SỐ DÙNG MC68HC11 (Trang 68 - 77)