Kod: Markera allt
#include <htc.h>
void main(void) {
int foo;
OSCF = 0; // 4MHz INTOSC
TRISA = TRISB = PORTA = PORTB = 0;
SPBRG = 103; // 9615 bps
TXIE = GIE = 0;
TXSTA = 0;
CSRC = 1; // Master mode
SYNC = 1; // Synchronous
RCSTA = 0;
SPEN = 1; // Serial Port Enable
TXEN = 1;
while (1) {
TXREG = 0b11001100;
// some delay
for (foo = 0; foo < 15000; foo++) {}
}
}
I tidigare projekt har jag bit-bangat SPI, och då har jag kört allting lågt (0V) om inget är aktivt, och mina SPI-enheter har fungerat utan problem. I detta test har jag inte använt en extern SPI-enhet som tar emot datan från 628an, utan jag har bara läst av CK/DT med oscilloskop eftersom jag aldrig använt USART-modulen förut och ville bara undersöka hur den beter sig.
I 628ans datablad står det att om jag vill avbryta en sändning så ska jag sätta TXEN till 0, och då kommer DT/CK att sättas till high impedance. Nu vill jag ju inte avbryta något men jag vet inte vad det innebär att pinnarna sätts till high-Z, men det är den enda ledtråd jag kan hitta.
Min fråga, slutligen, lyder: Hur gör jag för att på DT-pinnen se en 1a som +5V och en 0a som 0V på oscilloskopet? Har jag konfiguerat USART-modulen fel eller har jag missat något annat?
(Fotnot: Hårdvaran för detta test består av en 628:a med WISP inkopplad. Inga övriga komponenter än ett motstånd på MCLR-pinnen och en konding över Vdd/Vss)