// filename dstestb.C // Jonathan W. Valvano // 12/13/99 SPI solution to DS1620 interface // See Valvano, Embedded Microcomputer Systems, Chap 7 // test of DS1620 interface #include "HC12.h" #include "SCI12.H" #include "DS1620.H" // Nonvolatile structure placed in EEPROM const struct Node{ unsigned char Letter; void (*fnctPt)(void); const struct Node *Next;}; typedef const struct Node NodeType; typedef NodeType * NodePtr; void CommandReadT(void){ int T; OutString("\nRead Temperature "); T=DS1620ReadT(); OutSDec(T); } void CommandReadTH(void){ int TH; OutString("\nRead TH "); TH=DS1620ReadTH(); OutSDec(TH); } void CommandReadTL(void){ int TL; OutString("\nRead TL "); TL=DS1620ReadTL(); OutSDec(TL); } void CommandReadConfig(void){ unsigned int config; OutString("\nRead Config "); config=DS1620ReadConfig(); OutUHex(config); } void CommandStart(void){ OutString("\nStart "); DS1620Start(); } void CommandWriteTH(void){ int TH; OutString("\nWrite TH, provide value "); TH=InSDec(); DS1620WriteTH(TH); } void CommandWriteTL(void){ int TL; OutString("\nWrite TL, provide value "); TL=InSDec(); DS1620WriteTL(TL); } void Help(void){ OutString("\n s starts temperature measurement"); OutString("\n t display last temperature measurement"); OutString("\n H sets TH threashold"); OutString("\n h displays TH"); OutString("\n L sets TL threashold"); OutString("\n l displays TL");} // load into EEPROM NodeType LL[8]={ { 't', &CommandReadT, &LL[1]}, { 'h', &CommandReadTH, &LL[2]}, { 's', &CommandStart, &LL[3]}, { 'c', &CommandReadConfig, &LL[4]}, { 'H', &CommandWriteTH, &LL[5]}, { 'L', &CommandWriteTL, &LL[6]}, { '?', &Help, &LL[7]}, { 'l', &CommandReadTL, 0 }}; void Init(void){ COPCTL=0x00; // disable COP DDRT|=0x40; // PortT bit 6 is output to LED TSCR=0x80; // TEN(enable) } void main(void){ NodePtr Pt; char string[40]; InitSCI(); Init(); // disable COP, enable Port T DS1620Init(); DS1620WriteConfig(0x03); // CPU mode, single shot OutString("\nDS1620 SPI interface 12/13/99 -JWV"); Help(); OutString("\nEnter a single letter command followed by "); while(1){ PORTT ^= 0x40; // toggle LED OutString("\n>"); InString(string,39); Pt=&LL[0]; // first node to check while(Pt){ if(string[0]==Pt->Letter){ Pt->fnctPt(); Pt=0;} else{ Pt=Pt->Next; if(Pt==0) OutString(" Error");}}}} #include "SCI12.C" #include "DS1620b.C" extern void _start(); #pragma abs_address:0xfffe void (*reset_vector[])() = { _start }; #pragma end_abs_address