Missing DEFINES (0.5p)¶
Työskentelemme näyttörekisterin kanssa, joka on samanlainen kuin se, jonka olette nähneet Bitwise operations osiossa.

Olemme luoneet kirjaston, jossa on kaksi funktiota: yksi kirjoittaa dataa LCD:lle (muokkaa bittien 10-3 arvoja ja nollaa R/W-bitti, eli asettaa bitin 1 arvoon 0) ja toinen, joka nollaa LCD:n (eli asettaa RS-bitin, eli asettaa bitin 0 rekisterissä arvoon 1). Koodi on seuraava:
#include <stdio.h>
#include <stdint.h>
void write_data_to_LCD(uint16_t* lcd_register, uint8_t data);
void reset_LCD(uint16_t* lcd_register);
// Kirjoita dataa LCD:lle
void write_data_to_LCD(uint16_t* lcd_register, uint8_t data) {
// Tyhjennä aiemmat tiedot
*lcd_register = *lcd_register & ~DATA_MASK; // 0b0000011111111000
// Aseta uudet tiedot
*lcd_register = *lcd_register | ((uint16_t)data << 3);
// Nollaa R/W-bitti merkiksi, että kyseessä on kirjoitustoiminto
CLEAR(*lcd_register,RW_BIT);
}
// Nollaa LCD. Tämä asettaa Reset-bittiin arvon 1
void reset_LCD(uint16_t* lcd_register) {
SET(*lcd_register,RESET_BIT);
}
// Kirjoita dataa LCD:lle ja nollaa se
int main() {
uint16_t lcd_register = 0x00C8;
write_data_to_LCD(&lcd_register,0x19);
printf("Kirjoitettu data LCD:lle. LCD-rekisterin sisältö: %#06X \n",lcd_register);
reset_LCD(&lcd_register);
printf("Nollataan rekisteri. LCD-rekisterin sisältö: %#06X \n",lcd_register);
return 0;
}
Käytimme opiskelijan tekemää kirjastoa, joka määritteli makrot
CLEAR
, SET
sekä vakioarvojen määrittelyt DATA_MASK
, RW_BIT
ja RESET_BIT
. Kirjastotiedosto kuitenkin korruptoitui, emmekä voi enää avata sitä, eikä meillä ole varmuuskopiota (kyllä, tiedämme, että tämä on vakava huolimattomuus). Haluaisimme, että loisit puuttuvat makrot ja vakioarvot (define-määritykset) ja lisäisit ne koodiin.Emme välitä, kirjoitatko makrot, joita voi käyttää minkä tahansa bitin asettamiseen ja nollaamiseen rekisterissä, vai makrot, jotka on tarkoitettu vain tähän tapaukseen. Tärkeintä on, että koodi toimii.
Löysimme joitain aiemman kehittäjän muistiinpanoja, jotka saattavat auttaa sinua:
//ASETUS KIRJOITUSTILAAN: NOLLAA RW-bitti (RW -> 0) uint16_t MASK_RS = 0x01;0b0000 0000 0000 0001 uint16_t MASK_RW = 0x02;0b0000 0000 0000 0010 uint16_t lcd = 0x024F; lcd = lcd & ~MASK_RW. //Ehkä voisin käyttää &= operaattoria.
//LCD:N NOLLAUS: ASETTAA RS-BITTI (RS -> 1) uint16_t MASK_RS = 0x01;0b0000 0000 0000 0001 uint16_t MASK_RW = 0x02;0b0000 0000 0000 0010 uint16_t lcd = 0x024F; lcd = lcd | MASK_RS // Ehkä voisin käyttää |= operaattoria
Sinun tulee palauttaa tiedosto, joka sisältää koko koodin, mukaan lukien puuttuvat makrot ja vakioarvojen määrittelyt. Et saa muuttaa mitään muuta koodissa. Luo vain puuttuvat makrot.
VINKKI: Tutki kurssin kalvoja.
Vihjeet
Viestit