0
#include <mega8535.h> 
#include <delay.h>

#define clk     DDRA.0
#define dio     DDRA.1
#define cs      DDRA.2  

#define diopin  PINA.1 

#define clkx     PORTA.0
#define diox     PORTA.1
#define csx      PORTA.2  

#define OUTPUT  1
#define INPUT   0
#define LOW     0
#define HIGH    1

// Standard Input/Output functions
#include <stdio.h>   

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

// Declare your global variables here 

int buffx[33],buffy[33];

int rvCount[12];
int MSBCount=0;
int b,i;
int vCount;
int axCount;
int ayCount;

int axdata;
int aydata;

int count;
int frac;
float mVolts;
float gForce;    

int readdata(int set_D1,int set_D0)
{
  
  dio=OUTPUT;
  diox=LOW;
  csx=LOW; 
  clkx=LOW;      
  #asm ("cli");
  #asm ("nop");
  #asm ("nop");
  #asm ("sei");
  
  // start bit
  clkx=HIGH; 
  #asm ("cli");
  #asm ("nop");
  #asm ("nop");
  #asm ("sei");
  clkx=LOW; 
  #asm ("cli");
  #asm ("nop");
  #asm ("nop");
  #asm ("sei");
  diox=HIGH; 
  clkx=HIGH; 
  #asm ("cli");
  #asm ("nop");
  #asm ("nop");
  #asm ("sei");
  clkx=LOW; 
  #asm ("cli");
  #asm ("nop");
  #asm ("nop");
  #asm ("sei");
  diox=LOW; 
  
  //control bit: single
  diox=HIGH;
  clkx=HIGH; 
  #asm ("cli");
  #asm ("nop");
  #asm ("nop");
  #asm ("sei");
  diox=LOW; 
  clkx=LOW; 
  #asm ("cli");
  #asm ("nop");
  #asm ("nop");
  #asm ("sei");
  
   //control bit: d2
  clkx=HIGH; 
  #asm ("cli");
  #asm ("nop");
  #asm ("nop");
  #asm ("sei");
  clkx=LOW; 
  #asm ("cli");
  #asm ("nop");
  #asm ("nop");
  #asm ("sei");
  
  //control bit: d1
  if (set_D1==0)
    diox=LOW;
  if (set_D1==1) 
    diox=HIGH;
    
  clkx=HIGH; 
  #asm ("cli");
  #asm ("nop");
  #asm ("nop");
  #asm ("sei");
  clkx=LOW; 
  #asm ("cli");
  #asm ("nop");
  #asm ("nop");
  #asm ("sei");
  diox=LOW;
  
  //control bit: d0
  if (set_D0==0)
    diox=LOW;
  if (set_D0==1) 
    diox=HIGH;     
    
  clkx=HIGH; 
  #asm ("cli");
  #asm ("nop");
  #asm ("nop");
  #asm ("sei");
  clkx=LOW; 
  #asm ("cli");
  #asm ("nop");
  #asm ("nop");
  #asm ("sei");
  diox=LOW;
  
   //delay bit
  clkx=HIGH; 
  #asm ("cli");
  #asm ("nop");
  #asm ("nop");
  #asm ("sei");
  clkx=LOW; 
  #asm ("cli");
  #asm ("nop");
  #asm ("nop");
  #asm ("sei");
 
   dio=INPUT;
  
  //data bits
 for (i=0; i<=11; i++) 
 {
  clkx=HIGH;
  #asm ("cli");
  #asm ("nop");
  #asm ("nop");
  #asm ("sei");
  clkx=LOW; 
  rvCount[i] = diopin; 
  #asm ("cli");
  #asm ("nop");
  #asm ("nop");
  #asm ("sei");
  }
 
 MSBCount = 0;
 
 b=2048;   
 
 for (i = 0; i <= 11; i++)
  {  
      MSBCount += (rvCount[i]*b);
      b=b/2;
  }
  
csx=HIGH;
 
  return MSBCount; 
  
 }

void mulai()
{ 
 
  vCount = readdata(1,1);
  axCount = readdata(0,0);
  ayCount = readdata(0,1);
  
  axdata=2048-axCount;
  aydata=2048-ayCount;
    
  printf(" X_CH0: ");  
  printf("%i\n\r",axdata);   
  printf(" Y_CH1: ");
  printf("%i\n\r",aydata);

printf(" g-forces:\n\r");

for (i=1; i<=3; i++) {
  
  switch (i) 
  {
    case 1:
      count = axCount;
      break;
    case 2:
     count = ayCount;
      break;
  }
  
  if (count >= vCount)
  {
        gForce = (((long)count) - ((long)vCount))*0.0022;
  }
  else
  {
  gForce = -(((long)vCount) - ((long)count)) * 0.0022;
  } 
  printf(" ");
  printf("%i",(int)gForce);
  printf(".");
  
  if (gForce >= 0)
          frac = (gForce - ((int)gForce)) * 1000;
  else
          frac = (((int)gForce)- gForce) * 1000;
  
  printf("%d\n\r",frac) ;
 }    
 
 //printf("\n\r");
  
  mVolts = vCount*0.00080586;
  
  printf(" VRef Volts: ");
  printf("%i",(int)mVolts);
  printf(".");
  
  if (mVolts >= 0)
          frac = (mVolts - ((int)mVolts)) * 1000;
  else
          frac = (((int)mVolts)- mVolts ) * 1000;

  printf("%d\n\n\r",frac) ; 

  delay_ms(300);
}      

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=Out 
// State7=T State6=T State5=T State4=T State3=T State2=1 State1=0 State0=0 
PORTA=0x04;
DDRA=0x07;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x4D;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;       

// LCD module initialization
lcd_init(16);

cs=OUTPUT;
clk=OUTPUT;
dio=OUTPUT;
csx=HIGH; 
  
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("  Memsic2125  ");
lcd_gotoxy(0,1);
lcd_putsf("2-Axis  Accelero");   

delay_ms(1500);

while (1)
      {
      // Place your code here  
      mulai();  
      lcd_clear();
      lcd_gotoxy(0,0);
      lcd_putsf(" X     Y ");
      lcd_gotoxy(0,1);
      sprintf(buffx,"%i",axdata);
      lcd_puts(buffx);  
      sprintf(buffy,"%5i",aydata);
      lcd_puts(buffy);
    
      
      };
}

Can you help me how to fix this program? ^_^

When I try to compile it, it would give me the warning
--> Suspicious pointer in function main.


Thanks before......

Edited by Nick Evan: Added code-tags

2
Contributors
1
Reply
2
Views
7 Years
Discussion Span
Last Post by Nick Evan
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.