|
|
|
Com base no programa em C fornecido, escreva as rotinas em assembly para:e teste o programa. Deve ter em atenção que apesar da gama escolhida ser entre -5 a +5 volts, o sinal de teste do potenciometro apenas varia entre 0 e +5 volts.
- init_adv: inicializar a placa para:
- leitura no canal 7 com uma gama de +/- 5 volts
- trigger da aquisição feito pelo PACER
- gerar interrupção IRQ5 quando completa conversão A/D.
- init_pacer: inicializar o relógio PACER com onda quadrada a 100Hz
- read_intadv: rotina chamada pela rotina de resposta à interrupção adv_int_handler para ler o valor do A/D e reduzi-lo a um byte.
Crie uma variante da rotina read_intadv, read_intadv_w, para devolver os 12 bits numa word. Pretende-se trabalhar com um sensor não linear, mas quadrático, e apresentar no ecran a resposta linearizada e reduzida a valores entre o e 255. Ou seja:
resposta_linearizada = ( sqrt(leitura-metade_da_gama) / sqrt(metade_da_gama) )*255Para tal escreva a função lineariza , que recebe e devolve um float. O cálculo deve ser feito em assembly e recorrendo a instruções do 80x87.