회원가입 ID/PW 찾기
AA

램프 켜는것부터 배우는데 코드 봐도 잘 모르겠어요

설명좀 부탁드려요ㅠ

 

 

#include <avr/io.h>   

void Delay_us(unsigned char time_us)   

{ register unsigned char i;

for(i = 0; i < time_us; I++) 

{asm volatile(" PUSH RO "); 

asm volatile(" POP RO "); 

asm volatile(" PUSH RO "); 

asm volatile(" POP RO "); 

asm volatile(" PUSH RO "); 

asm volatile(" POP RO "); 

}

}

void Delay_ms(unsigned int time_us)           

{ register unsigned int i;          

for (i = 0; i < time_ms; I++)

{ Delay_us (250);                   

Delay_us (250);                    

Delay_us (250);

Delay_us (250);

}

}

 

int mian(void)

{

int iDelay=250;

char b = 0;

DDRA = 0x00;

DDRB = 0xFF;

PORTA=0xFF; 

 

while(1)       

{

b = PINA;

b&=0x0F;

PORTB=b;

Delay_ms(iDelay);

}

}

댓글 1
  • No Profile
    #include <avr/io.h>   

    //Delay 1usec루틴입니다. 이 코드는 시스템클럭이 16MHz인 경우에 해당합니다.
    //PUSH POP은 각각 2사이클이 소요되고, 모두 12사이클이 소요됩니다.
    //나머지는 이 함수를 Call(프로그램카운터를 스택에 저장)하고 Return(스택에서 PUSH된 PC를 가져옮)하고 for 루프를 소요하는데 소요됩니다.
    //계산상으로는 모두 16사이클이 수행되어야지 1usec Delay가 만들어집니다. 아주 정확한 타이밍을 요하지 않으면 시간지연함수를
    //써도 무방하나, 정확한 타이밍을 요할 경우는 Timer Interrupt를 사용해야합니다.

    void Delay_us(unsigned char time_us)   
    { register unsigned char i;
    for(i = 0; i < time_us; I++) 
    {asm volatile(" PUSH RO "); //2 cycle 
    asm volatile(" POP RO ");  //2 cycle
    asm volatile(" PUSH RO ");  //2 cycle
    asm volatile(" POP RO ");  //2 cycle
    asm volatile(" PUSH RO ");  //2 cycle
    asm volatile(" POP RO ");  //2 cycle
    }
    }

    // 위의함수를 다시 호출한 1msec단위의 Delay함수 
    void Delay_ms(unsigned int time_us)           
    { register unsigned int i;          
    for (i = 0; i < time_ms; I++)
    { Delay_us (250);                   
    Delay_us (250);                    
    Delay_us (250);
    Delay_us (250);
    }
    }
     
    int mian(void)
    {
    int iDelay=250;
    char b = 0;
    DDRA = 0x00; //PORT A 를 전부 입력 포트로 설정
    DDRB = 0xFF; //PORT B 를 전부 출력 포트로 설정

    // SFIOR레지스터내 PUD비트가 Clear되어 있고
    // PORT A가 입력으로 설정되어 있을때 PORTA에 1을 쓰면 내장 풀업저항을 ON시킴
    // 이 프로그램 내에서 SFIOR을 별도로 세팅하지 않았으므로 SFIOR의 전 비트는 0으로 default되어있음
    // 풀업저항을 사용한다는 의미는 입력 포트에 아무것도 연결하지않아도 입력은 1(high)인 상태로 읽혀집니다.
    // 만약 풀업저항을 설정하지 않을 경우는 필히 외부에서 High또는 Low신호를 인가해야합니다.
    // 그 이유는 해당포트가 Open된 상태로 방치하면 Unknown값이되며 때에 따라서는 Middle레벨로 신호가 인가되어
    // Input Port의 N-MOS와 P-MOS가 동시에 ON되는 경우가 발생할 수도 있기 때문입니다. 이때 MCU내부적으로
    // Vcc와 GND사이에 N-MOS와 PMOS의 Drain과 Source사이에 도통하는 경로가 생겨 전류가 급격히 많이 흐르는 현상이
    // 발생되어 소비전력이증가하거나, 심할 경우 해당 포트가 파괴되는 경우가 있습니다. 그래서 포트를 입력으로
    // 설정할 경우는 각별한 주의가요구됩니다.(필히 입력포트는 내부풀업을 설정하거나, High 또는 Low신호를 인가하여야만 됩니다. 절대로 Open된 상태로 방치하지 마십시요)
    PORTA=0xFF; 
     
    while(1)    //무한루프   
    {
    b = PINA; //PORTA 읽은값을  변수 b에 저장
    b&=0x0F; //위에서 읽은 b 값의 상위 니블을 0으로 마스크하고 하위니블값만 변수 b에 다시 저장
    PORTB=b;    // 위에서 계산된 하위니블 4bit를 PORTB로 출력
    Delay_ms(iDelay); // 250msec delay
    }
    }

    //위프로그램은 회로도가 없어서 모르겠지만 아마도 PORTA에 연결된 스위치를 절환하면 PORTB에 연결된
    //LED를 PORTA의 입력상태에 맞게 점등하는 프로그램으로 추정됩니다.

    그럼 도움이 되길 바랍니다.

하드웨어 설계 및 개발에 대하여 개발자들이 자유롭게 토론하는 공간입니다.
- Q&A, 자유주재 토론, 관련 정보 공유
- 분야 : 마이크로프로세서 응용, 전기/전자(아날로그/디지털) 회로 설계, C/C++ 프로그래밍, 펌웨어,
         PCB Artwork, 트러블슈팅 등 하드웨어 설계에 관한 전반인 내용
※ 게시글에 맞는 분류를 선택하여 글을 작성해 주시면 쾌적한 사이트 운영에 많은 도움이 됩니다.
※ 하드웨어 인사이트는 회원들간의 거래정보를 게재할 뿐이지, 그 어떤 책임과 의무도 가지지 않습니다.

search
번호 분류 제목 글쓴이 조회 수 날짜
55 Software & IDEs HOTAllegro OrCAD 16.6 파일 보내주실 수 있나요?2 jihE 1607 2018.01.28
54 Software & IDEs HOT소스 분석툴 관련 질문드려요2 아톰신 1123 2017.01.02
53 Software & IDEs HOT리눅스 커널에 대해 공부하려고 하는데 서적 한부 추천 부탁드립니다.1 아톰신 1458 2017.01.02
52 Software & IDEs HOTPADS.9.4.1 받을수 있는 방법(훈련병)2 하운드 1254 2016.07.13
51 Software & IDEs HOT리눅스는 여기 사이트와 거리가 먼거죠?1 pcb훈련변 1175 2016.06.05
50 Software & IDEs HOTepm3128act100-10n 프로그램 확인 땡쟁이 933 2015.12.17
49 Software & IDEs HOT신입생입니다.3 sunni 1392 2015.12.09
48 Software & IDEs HOTgps단말기 펌웨어질문입니다1 힘술쟁이 1252 2015.11.18
47 Software & IDEs HOTUSB를 사용하는 디바이스 펌웨어 개발 책? 문서?1 베이아터 1270 2014.01.09
46 Software & IDEs HOT큐블럭 프로그래밍 관련 질문 올립니다.1 행복이아빠 1441 2013.08.22
45 Software & IDEs HOTProteus 7.7 Professional2 Keyshaun 1376 2013.07.12
44 Software & IDEs HOTmsp430f1611을 사용하고 있는데 ADC에서 읽어들인 값하고 직접 테스터기로 찍은 값이 달라요1 김진성짱 5471 2013.06.25
43 Software & IDEs HOTOV9620 SXGA 모드 설정 좀 도와주세요1 로미옹 1446 2013.03.25
42 Software & IDEs HOT주차 시스템 회로 구성하는데요.. peng2 2022 2011.10.09
41 Software & IDEs HOTFreescale 질문인데 아시는 분 없나요? ㅠㅠ2 jzho 2092 2011.07.19
40 Software & IDEs HOTkey board 관련1 jjhuem 3104 2011.07.06
39 Software & IDEs HOT펌웨어 하다가 막히는 부분이 있어서 질문 드립니다. 마모루 2170 2011.06.13
38 Software & IDEs HOT어셈블리어 공부하기1 아이스으 2984 2011.03.22
37 Software & IDEs HOT스마트폰 앱 개발시 음성필터요..1 귤씅 3028 2011.01.28
36 Software & IDEs HOTWDK 관련 문의 입니다.1 소보루 2121 2010.11.18
  • 자신이 하는 일을 재미없어 하는 사람치고 성공하는 사람 못 봤다.
    - 데일 카네기
  • * 납포인트 정보 *
  • 글 작성 : 3
  • 댓글 작성 : 1
  • 내 글이 추천받음 : 1
저작권법에 위배되는 콘텐츠는 등록 불가하며, 저작물에 대한 권리는 저작자에게 있습니다.
Copyright 2006-2021 © hardwareis.com, All rights reserved.