<실제 프로그램>
JTAGEN- 에뮬레이터의 접속 표준
체크시- 에뮬레이터에 접속가능 (ADC4번 부터 사용불가)
체크 해지시- 다른 용도로 사용 가능하다
OCDEN - PWM 활성화 시키는 것이라고 추정
BODLEVEL - Brown out - 프로그램 다운 감지를 활성화
WDTON - watch dog 활성화
단일입력은 0~1023처리 됨
차동입력은 부호가 있음 -512~511가 처리가 됨
<차동입력 ADC 세팅> #include "smart.h"
int main(void) { unsigned char i; DDRF = 0xFE; DDRC= 0xFF; DDRG= 0XFF; ADC_Init(); ADCSRA = 0b10000111; // ADEN=1, ADPS2=1, ADPS1=1, ADPS0=1, 분주비 128, 125kHz
ADEN을 1로 설정하면 A/D컨버터의 모든 동작이 허용되고 0로 설정하면 A/D 컨버터의 모든 동작이 금지
ADCSRB = 0b00000000;
//avcc-5v인가 Differential ADC3(+),ADC2(-), ADRL=0 ADMUX = 0b01111011; // ADMUX 5번bit(ADRL=1) MUX4=1, MUX3=1 MUX2=0, MUX1=1, MUX0=1
/*차동 입력 시 ADCH부터 읽어줌, ADRL를 set 하는 것이 데이터 처리에 유리하다 avcc-5v인가 Differential ADC3(+),ADC2(-),Gain(1x) */
sum =0; for(i=0; i<16; ++i) { ADCSRA = ((1<<ADEN) |(1<<ADSC)| (1<<ADIF)| (1<<ADPS2)| (1<<ADPS0));//0b11010101 // ADIF=1, A/D 변환 완료 인터럽트를 요청 while((ADCSRA & 0X10)!=0X10); //ADIF=1, 이 인터럽트가 처리되기 시작하면 이 플랙 비트는 다시 자동적으로 0으로 클리어 됨 sum += (((((int)ADCH))<<8)+(int)ADCL)>>6);
} sum =(sum/16); //sum >>=4; return 0; }
|
|
PAGE 296 꼭 읽어서 정리 하십시오~
<아날로그 비교기>
ACSR 5번 BIT 빼고는 우리가 인의적으로 변경가능
#include "smart.h"
int main() { DDRA = 0xFF; //OutPut: PORTA ACSR =0b01000011; // +입력 =1.1v
ACBG를 set하면 양극성 입력 AIN0에는 내부 기준 전압 1.1V가 선택되고, 0으로 하면AIN0단자로 입력되는 전압이 선택됨 ADCSRA=0b00000000; //ADEN =0 0로 설정하면 A/D 컨버터의 모든 동작이 금지 ADCSRB=0b01000000; //ACME=1 ADMUX =0b00000001; //-입력 =ADC1
while(1) { if((ACSR & 0b00100000)==0b00100000) { PORTA=0xF0; } else { PORTA=0X0F; } } return 0; } |
---------------------------------------------S.W-------
압축 명령어 tar
gnu에서 사용하는 것
-gzip = gnu zip
linux에서는 지울때 조심 해야 한다
rm -rf
r는 물어 보지 않음
f는 다 지우는 것
rf/하면 다 날라감 /가 root
#include <stdio.h> #include <stdlib.h> #pragma pack(1)
typedef struct _node { int iNum; struct _node *sTnext;
}Node; #pragma pack(4)
int main() { Node * head=0; head=malloc(sizeof(Node));
head->iNum=100; head->sTnext=malloc(sizeof(Node));
head->sTnext->iNum=200; head->sTnext->sTnext=malloc(sizeof(Node)); head->sTnext->sTnext->iNum=300; head->sTnext->sTnext->sTnext=0;
//출력 방법// printf("%d->", head->iNum); printf("%d->", head->sTnext->iNum); printf("%d->", head->sTnext->sTnext->iNum); printf("NULL\n");
free(head->sTnext->sTnext); free(head->sTnext); free(head);
return 0; } |
코드가 계속 증가 되지 않도록 세련되게 코드 수정
코드를 보면 head->sTnext가 주로 중복 되므로
temp라는 변수를 지정
main함수를 너덜너덜 하게 만들기
#include <stdio.h> #include <stdlib.h>
#pragma pack (1)
typedef struct _node{ int inum; struct _node * stNext; }Node;
#pragma pack (4)
void node_print(Node * temp); void node_free(Node * head);
int main(){ Node * head = 0; head = malloc(sizeof(Node));
head->inum = 100; head->stNext = malloc(sizeof(Node)); head->stNext->inum = 200; head->stNext->stNext = malloc(sizeof(Node)); head->stNext->stNext->inum = 300; head->stNext->stNext->stNext = 0;
node_print(head); node_free(head);
return 0; }
void node_print(Node * temp) { while(temp != 0) { printf("%d -> ", temp->inum); temp = temp->stNext; } if(temp == 0) { printf("NULL\n"); } }
void node_free(Node * head) { Node * temp = 0; while(head != 0) { temp = head->stNext; printf("[%d] Node Free\n", head->inum); free(head); head = temp; } printf("\n"); }
|