잡담/문답 c언어 질문이요;;; 급합니다 ㅠ_ㅠ

페이지 정보

profile_image
작성자 sg이름으로 검색 (58.♡.139.251)
댓글 4건 조회 2,311회 작성일 07-03-26 00:17

본문

화일의 각 줄마다 (혹은 각 블록마다) 어떤 일을 하는 것인지 주석문을 상세히 한글로 추가하여 제출할 것 (해당 프로그램 한줄 수행시 예상되는 결과까지 포함) 이건데요;; 이게 serial.h 헤더파일인데 주석좀 달아 주실수 있으신지요?? ㅠ

/*
    FAK Series Monitor Program
   
    filename : serial.h
    Compiler : uVision2 (KEIL C)

For FAK Series...
   
    Copyright 8051-AVR.com by Hong Jison
   
    Do not remove this comments.

  Serial Module
If you using Serial communication...you must be include serial.h file.
ex) #include "serial.h"

*/

//#include <reg51.h>

extern void SER_init(void);
extern void SER_string(char *str);
extern UC RX_D(void);
extern void TX_D(UC buffer);
extern void SER_key();

extern void htoa(UC hh);
extern UC atoh(UC posi);

UC (*func)(), buf[10], xdata *xptr;

void SER_init(void)
{
    TMOD = 0x20;
    PCON = 0x00;
    SCON = 0x52;
    TH1 = 0xfd;
    TR1 = 1;
    SBUF = 0;
}

UC RX_D(void)
{
    while(!RI);
    RI=0;
    return(SBUF);
}

void TX_D(UC buffer)
{
    while(!TI);
    TI=0;
    SBUF = buffer;
}

void SER_string(char *str)
{
    int i=0;
    do {
        switch(str[i]) {
            case LF:
            case CR:
                TX_D(0x0a);
                TX_D(0x0d);
                break;
            default:
                TX_D(str[i]);
        }
    } while(str[++i]);
}

void SER_key()
{
    UC i=0, rx;

    for(i=0; i<10; i++)
        buf[i] = 0x00;

    i = 0;
    do {
        rx = RX_D();

        if (rx == CR || rx == LF) {
            buf[i] = 0x00;
            SER_string("\n");
            break;
        }
        else if (rx == BS) {
            if (i == 0) break;
            buf[i] = 0x00;
            i--;
            TX_D(rx);
        }
        else {
            buf[i++]=rx;
            TX_D(rx);
        }

        if (i >= 9) continue;
    } while (1);
}

void htoa(UC hh)
{
    UC    temp;

    temp=hh;
    hh &= 0xf0; hh >>= 4;
    if (hh >= 10) hh += 7;   
    hh += '0';
    TX_D(hh);

    hh=temp;
    hh &= 0x0f;
    if (hh >= 10) hh += 7; 
    hh += '0';
    TX_D(hh);
}

UC atoh(UC posi)
{
    UC hexa;

    hexa = buf[posi];
    if((hexa >= 'A' && hexa <= 'F') || (hexa >= 'a' && hexa <= 'f'))
    hexa += 9;
    hexa &= 0x0f; hexa <<= 4; buf[posi] = hexa;

    hexa = buf[posi+1];
    if((hexa >= 'A' && hexa <= 'F') || (hexa >= 'a' && hexa <= 'f'))
    hexa += 9;
    hexa &= 0x0f; hexa |= buf[posi];
    return(hexa);
}
추천0

댓글목록

profile_image

JellyPo님의 댓글

no_profile JellyPo쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 아이피 (203.♡.146.204) 작성일

...아니 이건 뭐죠..................... 헥스랑 비트 뭐시기 연산자가;;;;;;;;

profile_image

sg님의 댓글

sg이름으로 검색 아이피 (58.♡.139.251) 작성일

8051 serial.h 헤더파일입니당 -.- 이미 시험쳤어요;;;

profile_image

ExCuteMe님의 댓글

ExCuteMe이름으로 검색 아이피 (211.♡.85.68) 작성일

void SER_init(void) /* 레지스터 이니셜라이즈 하는것 의밈없셈*/

UC RX_D(void) /* RI를 기둘려서 SBUF(디파인된 어드레스의 레지스터)의 값을 읽어옴 */

void TX_D(UC buffer) /* TI를 기둘려서 버퍼의 값을 SBUF에 씀 */

void SER_string(char *str)  /* 설명 필요 없찌? 그냥 스트링값보고  케리지리턴이나 라인피더면 줄 넣고 다른 문자면 그냥 전송 */

void SER_key() /* 첨에 더미값좀 넣고 레스크터에서 읽어서 라인피더나 케리지리턴이면 줄바꾸고, BS(비트싱큰가?)면 반송하고 받은 버퍼 삭제, 나머지 문자는 버퍼 저장하고 반송해서 딱 10문자의 버퍼를 채움 */

void htoa(UC hh) /* 값을 받아서 헥사데시멀을 앞의 4비트와 뒤의 4비트를 따로 2번에 나눠 숫자가 아닌 문자형으로 전송, 근데 temp는 왜 넣데냐? (즉 0x01 이면 '0'과'1' 0x3f면 '3'과 'f'대문잔지 소문잔지는 확인않했3 )*/

UC atoh(UC posi) /* 값을 받아서 값의 위치의 버퍼에 있는 값(문자)를 16진수의 숫자로 바꾸는 넘 즉 buf[posi]에 '9' buf[posi+1]에 'c'가 있으면 합쳐서 0x9c로 만들어서 값을 리턴 */

이해하려면 알아야할것듯 UC나 PCON, LF, BS등의 디파인과 문자값등.. 만 이해하면 무지 간단하구만..

맨날 et에만 보이더니.. 하긴 학교공부 못해도 직장에서 돈받으면 몰라도 다하게 되있다만.. 좀 본인이 괴로워서 그렇지..

그런데 이제야 질문을.. 뭐 시험AS라고 생각하고 바바라.

profile_image

ExCuteMe님의 댓글

ExCuteMe이름으로 검색 아이피 (211.♡.85.68) 작성일

void htoa(UC hh) 은 C가 아니던가 버그임.. C는 콜바이벨류라 htoa함수 안에서 hh값의 변경이 불가 변경하려면 void htoa(UC *hh)로 포인터던가

void htoa(UC hh)
{
    UC    temp;

    temp=hh;
    temp &= 0xf0; temp >>= 4;
    if (temp >= 10) temp += 7;   
    temp += '0';
    TX_D(temp);

    temp = hh;
    temp &= 0x0f;
    if (temp >= 10) temp += 7; 
    temp += '0';
    TX_D(temp);
}
로 사용해야 함.

즉, 아무리봐도 예제 소스는 1. C가 아니다 C++? 2. 버그 둘중 하나임..

Total 24,568건 179 페이지
Return to Castle Wolfenstein - Enemy Territory 목록
번호 제목 글쓴이 조회 추천 날짜
21898 잡담/문답 j.b메일보내기 이름으로 검색 2771 0 03-29
21897 스크린샷 no_profile ^XS^7La^0<^1`^X*^7ShiA^X*^0<쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 3247 0 03-28
21896 스크린샷 no_profile JellyPo쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 3937 0 03-27
21895 잡담/문답
무중력님 댓글2
루나이름으로 검색 2042 0 03-27
21894 잡담/문답 Terrious이름으로 검색 2021 0 03-27
21893 잡담/문답 atz'sg이름으로 검색 2193 0 03-27
21892 잡담/문답 no_profile ^1Burned_Zombie쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 2035 0 03-27
21891 잡담/문답 no_profile ^tviPpO쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 2157 0 03-27
21890 잡담/문답 no_profile ^tviPpO쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 2397 0 03-27
21889 잡담/문답 no_profile ^1Burned_Zombie쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 2717 0 03-26
21888 잡담/문답 social이름으로 검색 2072 0 03-26
열람중 잡담/문답 sg이름으로 검색 2312 0 03-26
21886 잡담/문답 MIR'DOTORI이름으로 검색 2584 0 03-25
21885 잡담/문답 no_profile 나태말기쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 2206 0 03-25
21884 잡담/문답 res이름으로 검색 2310 0 03-25

검색