Terje Sjomark

IRSCI and Flash memory programming issue. - MC68HC908AP64

Discussion created by Terje Sjomark on Aug 18, 2009
Latest reply on Aug 19, 2009 by Terje Sjomark



I have a few problems.

I finnaly got the IRSCI working (echoing). Thanks.

But it ignores my code when i try to send bytes only.. ?


I have also done some testing on writing direct to the flash memory.

I followed the information in datasheet, but i'm not sure i'm doing it correct.

I will not know before i get the IRSCI TX to work.


By the way, Does anybody know where to find a complete interrupt driven uart code for MC68HC908AP64/32/16 ?


Please check my code below and comment what i do wrong.


#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
#include "MCUinit.h"

// A pointer to memory where i want to store information.
unsigned char *EEPROM = (unsigned char*)0xF000;

void Delay (int pause) {
  int a;
   for(a=0;a<pause;a++) {

unsigned char GetByte() {
   // This part should read a byte from address 0xF000.
   return *EEPROM;

void SetByte(unsigned char val) {
 // The delays below is not adjusted yet. Maybe i should use a timer.
 // This function should store one byte in address 0xF000.
 // Tryed to follow the instructions in datasheet.
 // Will this code work ?
 FLCR |=FLCR_PGM;  // Disable program controll bit
 *EEPROM=0x01; // Write to the memory area. (Will not be stored.)
 Delay(20);    // Wait
 FLCR |= FLCR_HVEN;    // Highvoltage enabled
 *EEPROM=val;          // Write byte to flash memory
 FLCR &=~FLCR_PGM;     // Disable program controll bit
 FLCR &=~FLCR_HVEN;  // Highvoltage disabled


void main(void) {
  int b=0;
  int a=0;
  byte tmp;

  // Init function produced by Device Initialization in Code Warrior.

  SetByte(66); // Set the number 66 at address 0xF000
  a=GetByte(); // Read the byte on address 0xF000
  for(b=0;b<10;b++) {
  // Send the byte 10 times to IR UART.
  // I am not sure about next part.
  while(((IRSCS1 & IRSCS1_SCTE)==IRSCS1_SCTE) && ((IRSCS1 & IRSCS1_TC)==IRSCS1_TC));
  // Send the byte to IR uart. Should send ABCDEFGHIJ to the comport.


  for(;:smileywink: {
    for(b=0;b<100;b++) {
    // The code below works fine
    // it echoes back the characters to the terminal connected to uart.
    while((IRSCS1 & IRSCS1_SCRF)==0);



Message Edited by NLFSJ on 2009-08-18 10:00 AM