Creeaza.com - informatii profesionale despre


Evidentiem nevoile sociale din educatie - Referate profesionale unice
Acasa » scoala » informatica » catia
Exemple de programe scrise in C

Exemple de programe scrise in C


Exemple de programe scrise in C

Se prezinta in continuare un pachet de fisiere sursa C, care permit exploatarea interfetei ADA1110.

Fisierul ada1110.h defineste prin intermediul unor directive preprocesor adresele relative ale porturilor componente:

#define PPI_A 0

#define PPI_B 1

#define CHANNEL_SLCT 1

#define GAIN_SLCT 1

#define PPI_C 2

#define PPI_CTRL 3

#define TIMER_A 4

#define TIMER_B 5

#define TIMER_C 6

#define TIMER_CTRL 7

#define START_CONVERSION 8

#define READ_DATA_MSB 8

#define READ_DATA_LSB 9

#define STATUS_BYTE 10

#define DAC_UPDATE 10

#define DAC1_LSB 12

#define DAC1_MSB 13

#define DAC2_LSB 14

#define DAC3_MSB 15

#define PPI_PORT_A 0

#define PPI_PORT_B 1

#define PPI_PORT_C 2

#define BIPOLAR 1

#define UNIPOLAR 0

Fisierul ada1110.inc contine mai multe functii generale utilizabile in scopul diferitelor utilizari ale ADA1110.



#include<dos.h>

#define ENABLED 1

#define DISABLED 0

#define INPUT 1

#define OUTPUT 0

#define TRUE 1

#define FALSE 0

unsigned BaseAddress;

float  VoltageRange,

DACSlope,

ConversionFactor,

BaseLine;

int DACOffset;

unsigned char ANDBits;

/*Functia InitializeBoardSettings() este utilizata pentru setarea adresei de baza si determinarea factorului de conversie*/

void InitializeBoardSettings(unsigned BA, float Range, char Polarity)

/*Functia Function DigitalToReal() converteste o valoare intreaga intr-o valoare reala corespunzand unei tensiuni analogice exprimate in volti*/

float DigitalToReal(int DigitalValue)

/*Functia ResetBoard() este utiliyat[ pentru resetarea (reinitialiyarea) lui ADA1110; interfata 8255 este configuratia astfel ca porturile A si C sunt porturi de intrare, iar portul B este port de iesire; de asemenea declanseaza efectuarea unei conversii elementare*/

void ResetBoard(void)

/*Functia SetChannel este utiliyata pentru setarea bitilor canalului activ CAN in registrul atasat; se precizeaza canalul activ*/

void SetChannel(unsigned char ChannelNumber)

/*Functia StartConversion() declanseaza conversia AN*/

void StartConversion(void)

/*Functia ConversionDone() returneaza TRUE(#0) daca conversia AN este completa si FALSE daca este in desfasurare*/

char ConversionDone(void)

/*Functia ReadData() recupereaza cei 2 octeti ai CAN si ii combina intr-o valoare intreaga*/

int ReadData(void)

/*Functia ClockMode() este utilizata pentru a stabili modul de lucru al timerului 8254 si a selecta canalul clock =*/

void ClockMode(unsigned char Clock, unsigned char Mode)

/*Functia ClockDivisor() este utilizata pentru incarcarea canalului desemnat prin clock cu o valoare pe 2 biti, care va fi utilizata in functie de modul de lucru ales*/

void ClockDivisor(unsigned char Clock, unsigned int Divisor)

void SetUserClock(float Rate) //programeaza cele 3 canale 8254 in modul 2 incarcandu-le cu //diferite valori*/

char ClockDone(unsigned char Timer) //citeste valoarea curenta a canalului precizat prinTimer //si returneaza False la valori mai mari ca 0

/*Functia ReadDigitalIO() returneaza (citeste) valoarea unui port al interfetei 8255, precizat prin PPI_A, PPI_B, PPI_C*/

unsigned char ReadDigitalIO(unsigned char InputPort)

/* Functia WriteDigitalIO() realizeaza inscrierea in portul lui 8255 precizat de OutPort = PPI_A, B, C a valorii v*/

void WriteDigitalIO(unsigned char OutputPort, unsigned char v)

void ConfigureIOPorts(unsigned char PortA, unsigned char PortC)

//este utilizata pentru configurarea porturilor A si C; portul B ramane setat ca port de iesire; //1=input port, 0=output port

/*Functia UpdateDAC() selecteaza domeniul de tensiuni in cazul conversiilor NA; variabilele DACSlope si DACOffset trebuie setate reprezentand factorii de conversie si de translatie pentru domeniul de iesire al tensiunilor CAN, conform tabelului in cazul conversiilor pe 12 biti*/

void UpdateDAC(unsigned char DAC, float Volts)

Functia SetMUXChannel() selecteaza un canal al multiplexorului; inaintea apelarii acesteia portul C al lui 8255 trebuie configurat ca port de iesire*/

Void SetMUXChannel(unsigned char Channel)

Programul dac.c demonstreaza utilizarea CAN din cadrul placii ADA1110; programul realizeaza scanarea (parcurgerea) domeniului de iesire in tensiuni al convertoarelor CAN cu un pas de valoare egala cu un milivolt*/

#include<dos.h>

#include<conio.h>

#include "ADA1110.h">

#include "ADA1110.inc">

int i, ScanStart, ScanEnd;

int AtoDConversion(unsigned char Channel)

//aceasta functie realizeaza conversia invers returnand valoarea numerica

void ProgramTitle(char St[]) //gestiunea ecranului

void main()

UpdateDAC(1,0.0);  //seteaza CNA1 la 0.0 volti

getch();

clrscr();

}

Programul (fisierul) digital.c demonstreaza scrierea si citirea porturilor interfetei paralele 8255.

#include<dos.h>

#include<stdio.h>

#include<conio.h>

#include "ADA1110.h">

#include "ADA1110.inc">

char ExitProgram, S[10], C;

unsigned char B;

void ProgramTitle(char S[]);

void main(void)

ConfigureIOPorts(INPUT,INPUT); //Port A=INPUT, port C=INPUT

clrscr();

}

Programul softtrig.c realizeaza achizitia de date utilizand "triggerare" soft:

#include<dos.h>

#include<conio.h>

#include "ADA1110.h"

#include "ADA1110.inc"

void ProgramTitle(char St[])

void main()

Programul timer.c demonstreaza programarea circuitului timer/numarator 8254 aflat pe placa ADA1110; programul utilizeaza tehnica pooling, pentru depistarea sfarsitului unui ciclu (de numarare,) al lui 8255.

#include<dos.h>

#include<conio.h>

#include "ADA1110.h"

#include "ADA1110.inc"

char C;

Programul intrpts.c demonstreaza utilizarea timerului 8254 in scopul generarii intreruperilor transmise la controlerul de intreruperi 8259.

#include<dos.h>

#include<stdio.h>

#include<conio.h>

#include "ADA1110.h"

#include "ADA1110.inc"

unsigned char OLDIMRMask; //variabila pentru memorarea IMR

unsigned char IRQ;

int ADValue; //valoare citita de la CAN

void interrupt(*OldINT)(void);

void ClearBitIMR(unsigned char Bit) //aceasta functie reseteaza (clear) bitul IMR al 8259 , //pentru a face linia omoloaga disponibila in a accepta //intreruperea

void SetBitInIMR(unsigned char Bit) //functia este asemanatoare cu ClearBitInIMR, cu deosebirea ca aceasta seteaza (pune pe 1) bitul dorit al IMR

void VectorInterrupt(int InterruptNumber, void interrupt(*ISR)())

//este utilizata pentru a asigna un nou vector pentru intreruperea respectiva

void interrupt NewISR(void)

//aceasta functie este apelata cand apare o cerere de intrerupere la liniile IRQ; este interzisa //apelarea functiilor DOS sau BIOS in cadrul functiei de tratare a intreruperii pentru a nu crea //evenimente imprevizibile

void ConfigureIRQ(unsigned char IRQ)

void RestoreStartupIRQ(void) //restaureaza IMR initiala salvata de functia anterioara, care se va //apela intotdeauna inaintea apelului acestei functii

void ProgramTitle(char St[80])

void main()

getch(); //citire caracter de la tastatura

RestoreStartupIRQ();  //restaurare sistemului de intreruperi initial

clrscr();

}





Politica de confidentialitate


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.