부산IT학원/스마트컨트롤러

20140507 (ADCL, ADCH, 광센서 실습, 서적관리 프로그램 구현)

EHOzlO 2014. 5. 7. 12:30

55일차











--------------------

ATMega128 ADC

--------------------



--- 값이 바뀌지 않은 이유




이전 소스에서 ADCH를 먼저 읽고 ADCL을 읽었다.

ADCL을 읽을때, ADC Reg는 ADCH가 읽어질 때까지 업데이트 되지 않는다. 라고 한다.

해석이 맞는지 모르겠다;;

어쨌든 ADCL 을 먼저 읽고 ADCH를 읽어야 한다고 한다.

실습을 해봤는데 잘됐었다.

그런데 이전으로 바꿔서 다시 안되게 해봤는데

잘된다...;;; 이유를 모르겠지만 다음부터는 ADCL을 먼저 읽고

그보다 데이터시트를 잘 봤으면 좋겠다.(영어가 딸려ㅠㅠ)






--- 광센서

빛의 세기에 따라 저항값이 바뀌는 센서



--- ADLAR Reg

ADLAR Reg 의 값의 크기에 따라 조작하기 편하게 정렬을 하면 좋다.


ex)

unsigned int Adc_Run(unsigned char ucCh)

{

ADMUX = ADMUX | (ucCh & MASK_MUX);  // Setting Channel.

ADCSRA = ADCSRA | (1<<ADSC);  //  to enable


while(0 == (ADCSRA & (1<<ADIF)) );  // to check ADIF bit.


return ADCL;                           // 모든 값이 다 읽어짐

return ADCH;                           // 상위 2bit만 읽어짐

return ((ADCL>>2)<<2);           // 상위 2bit만 짤림.  (최대값 1020)

}


















- C

---------------

Linked List

---------------



--- 서적관리 프로그램 구현.


--- 함수 추가



- LinkedList.c


void Book_AllDel(Book * stpData)

{
  Book * stpNext;
  
  while(0 != stpData)
  {
    stpNext = stpData->next;

    free(stpData);

    stpData = stpNext;
  }
}


Book * Book_Insert(Book * Head)
{
  Book * stpNew;
  Book * stpFront;
  Book * stpRear;

  stpFront = Head;
  stpRear = Head;
  stpNew = malloc(sizeof(Book));

  Book_Stdin(stpNew);

  while(0 != stpRear)  //  삽입 위치 검색
  {
    if(0 > strcmp(stpNew->caTitle , stpRear->caTitle) )  // 삽입 위치 판단
    {
      break;
    }
    stpFront = stpRear;
    stpRear = stpRear->next;
  }

  if(Head != stpRear)  // 처음인지 그 이후인지 확인.
  {  // 중간, 끝
    stpNew->next = stpRear;
    stpFront->next = stpNew;
  }
  else  // 맨 앞
  {
    stpNew->next = Head;
    Head = stpNew;
  }
  
  return Head;
}


void Book_Print(Book * Head)
{
  while(0 != Head)
  {
    Book_Stdout(Head);
    Head = Head->next;
  }
}




--- 현재까지 전체 소스


- LinkedList.h

LinkedList.h


- LinkedList.c

 LinkedList.c


- main.c

 main.c