Memoria
La memòria d’aquest darrer mòdul l’hem estructurat de la següent manera:
Primer hem adjuntat els esquemes que hem dissenyat (esquema general, esquema deles tecles del comandament, l’esquema d’algunes funcions implantades...)
Després hem explicat la distribució del projecte en fitxers, és a dir, que trobem dins dels diferents arxius de suports: timers.h, timers.c, ports.h...
Hem inclòs els codis de Timers.c i Ports.c tots dos comentats.
Hem inclòs el codi de Robot.c comentat i amb un comentari general al final.
Finalment hemintentat desenvolupar algunes de les funcions opcionals del mòdul (emmagatzemar i reproduir).
ESQUEMA DEL FUNCIONAMENT GENERAL
INICIALITZAR
TECLA REBUDA?
IDENTIFICACIÓ DE LA TECLA
INICIALITZEM VARIABLES
INICIALITZAEM PORTS
INICIALITZEM TIMERS
MOURE ROBOT
obrir_pinca
tancar_pinca
gir_horari
pujar
gir_antihorari
baixar
enrere
endevant
SÍ
NO
ESQUEMA TECLES
2
TANCAR1
OBRIR
3
A
B
6
5
BAIXAR
4
PUJAR
C
9
8
ENDAVANT
7
ENRERE
D
#
0
GIR HOR.
*
GIR A.H.
ESQUEMA MOTORS POSICIÓ INICIAL
Comprobar que no ens trobem ja a l’inici.
CRIDAR A LA FUNCIO “inici()”
MOTORS EN POSICIÓ INICIAL
CRIDEM A
“Retard ()”
PARAR MOTORS
ESQUEMA PROCÉS MOURE ROBOT
IDENTIFICACIÓ DE LA TECLA
TECLA REBUDA
INTERRUPCIONS JA HABILITADES
INTRODUIRLES DADES REBUDES EN LA VARIABLE LOCAL
CRIDAR A LA FUNCIÓ “moure_motor()”
Port2
MOURE MOTOR
Retard (40) INTRODUIM UN RETARD DE 40ms.
Durant un temps d’espera queden inhabilitades les interrupcions i no es poden rebre noves instruccions.
PARAR MOTOR
SetP2(0xFF)
PODEM REBRE NOVES INSTRUCCIONS
DISTRIBUCIÓ DEL PROJECTE EN FITXERS:
Expliquem breument el contingut dels diferents fitxers desuport que usarem en el projecte:
Ports.h Capçalera amb els prototips i les variables de ports.c
Ports.c Inclou les inicialitzacions dels ports..
Timers.h Capçalera amb els prototips i les variables de timers.c
Timers.c Inclou les inicialitzacions y las interrupcions dels “timers”
Robot.h Capçalera amb els prototips i les variables de robot.c
Robot.c És el nuclide l’aplicació, aquí és on trobem el main i les crides a les funcions.
TIMERS.C (comentaris al final del codi)
#include <embedded.h>
#include "typedefs.h"
#include "int.h"
#include "register.h"
#include "timers.h"//funcions de control dels temporitzadors
// Variables globals
int iTick;//control del pas per la RSI de la base de temps
// Inicialització dels temporitzadorsvoid IniTimers(void)
{
BYTE far *pbyReg;//punter a un registre
//substituir el vector d'interrupció de la base de temps
disable();//no permetre cap interrupció
setvect(INTBASETEMPS, RSIBaseTemps);
enable();
//crear el punter al registre de control del processador PRC
pbyReg = (BYTE far *)MK_FP(RSEG, PRC);
//modificar el registre PRC per a una int cada 2.05 ms
*pbyReg =0x04;//RAM interna deshabilitada
//Freqüència clk de 4 MHz
//apuntar al registre TBIC
pbyReg = (BYTE far *)MK_FP(RSEG, TBIC);
*pbyReg &= 0xBF;//activar interrupcions BT
}
// Retorna després d'un retard de 'iTemps' ticks de la base de temps.
void Retard(int iTemps)
{
//modificar el valor de la variable de control
disable();
iTick = iTemps;
enable();
//esperar 'iTemps'while(iTick != 0)
enable();
}
// Servei d'interrupció de la base de temps
void interrupt RSIBaseTemps(void)
{
enable();//permetre altres interrupcions.
if(iTick > 0)
--iTick;//marcar la passada
FINT;
}
Comentaris de Timers.c Estem configurant el registre PRC per tal d’aconseguir una interrupció cada 2,5 ms i d’aquesta manera, aconseguir treballar a una freqüència de...
Regístrate para leer el documento completo.