현재 위치 - 중국 분류 정보 발표 플랫폼 - 비즈니스 서비스 정보 - 51 마이크로컨트롤러에 정의된 부호 없는 문자는 문자인가요, 아니면 0부터 255까지의 숫자인가요?

51 마이크로컨트롤러에 정의된 부호 없는 문자는 문자인가요, 아니면 0부터 255까지의 숫자인가요?

51 마이크로컨트롤러의 부호 없는 문자는 0부터 255까지의 문자 또는 숫자를 정의합니까?

표현된 문자를 저장할 수 있는 8비트 바이너리 코드입니다. ASCII 코드도 가능합니다. 0부터 255까지의 숫자를 나타냅니다. 일반적으로 변수의 크기가 255를 초과하지 않는 경우 char을 사용하십시오. 이렇게 하면 RAM을 절약할 수 있습니다. 문자열은 문자인지 문자열인지를 정의합니다.

문자열 정의는 다음과 같습니다. 문자는 다음과 같은 문자열일 수도 있습니다.

String str = "asadsada";

char[] c1 = str1.toCharArray(); to char 배열 c에서 char *a="c 언어"는 문자열 a가 c 언어인지 *a가 c 언어인지 여부를 정의합니다.

다음과 같이 보아야 합니다:

char* a = "c 언어"

실제로는 문자 포인터 a를 정의하고 초기화하는 것을 의미합니다. "c 언어"의 문자열을 가리키도록 합니다.

"c 언어"는 문자열 상수이므로 a는 기본적으로 문자열 상수 포인터로 변환됩니다.

a는 메모리에 있는 "c 언어"의 첫 번째 주소를 나타냅니다. C# 51 마이크로컨트롤러는 1부터 999까지의 숫자를 전송합니다.

255보다 큰 숫자는 2바이트로 전송되어야 합니다. 상위 8비트와 하위 8비트로 구분됩니다.

수신을 용이하게 하기 위해 256 미만의 데이터도 2바이트를 사용합니다. 51 char[1024]와 같은 마이크로 컨트롤러에서 상대적으로 큰 배열 변수를 정의하는 방법. [10]

이러한 큰 배열을 정의하려면 먼저 큰 RAM이 있어야 합니다. 그렇지 않으면 확실히 유용하지 않습니다. 내부 주소 공간은 생각하지 마세요. 외부에 배치해야 합니다.

상수 배열인 경우 프로그램 코드, 코드 char [1024][10]에서 정의할 수 있습니다. 이러한 프로그램은 읽기만 가능하고 변경할 수 없습니다. 일반적으로 글꼴에 사용됩니다. 파일 도트 매트릭스.

외부 RAM이 충분한 경우 xdata char xx[1024][10]; 이는 외부 RAM에 대한 배열을 정의하기 위한 것이며 MOVX로 액세스해야 합니다.

89c51 마이크로컨트롤러용 디지털 시계 프로그램이요?

/****************************************** ***

Compiled by ILONG

참고로 P3 포트 출력 시뮬레이션은 {Experimental Board}의 시뮬레이션과 다릅니다. 실험 보드를 뒤집을 필요가 없습니다.

목적: 1초를 생성하기 위해 T0 타이밍의 20배를 사용합니다. 그런 다음 HH-mm-ss 시간을 형성합니다.

매개변수 설명:

40H~47H : 표시관, 각 비트 레지스터는 표시할 숫자의 주소를 저장합니다. 주소에 따라 숫자는 1씩 증가할 수 있습니다.

하위 4비트는 튜브가 표시할 값을 나타낼 수 있습니다(42H 및 45H 제외).

48H: 표시할 비트 값(0~7, 디코더에 의해 변환됨)

49H: 각 비트가 새로 고쳐질 때마다 표시되는 시간 0~256us< / p>

4A: 20배 타이밍, 카운터

4BH, 4CH: 브러시 0자리 시간 전달, 두 자리 시간 및 시 임시 저장

4DH: 언제 디버깅을 수행하려면 유형을 조정해야 합니다. 각 INT0 인터럽트는 한 번씩 증가합니다.

50H~5FH: 0에서 F까지 16개 숫자의 코드 값

60H: "- " 값

61H: "비어있음"의 코드 값

62H, 63H: 플래시할 두 자리 주소가 임시 저장됩니다(쓸모없어 보이네요)

< p> R0: 비트 재배치 시 이동에 사용되는 임시 레지스터의 각 비트 주소를 저장합니다.

00H(비트): INT0(조정) 인터럽트가 있는지 여부

01H (비트): 예 깜박임 켜짐 ​​또는 빈 깜박임, 즉: 깜박일 때 밝고 어두운 상태

문제:

1. 시간을 조정할 때 분 숫자가 시작됩니다. 왜곡되다.

2. 시간 조정 시 밝을 때 조정해야 합니다

3. 시차 : 실제 시간보다 느림

2011.10.21 ilong (미친 밤) < /p>

***************************************** ********* */

SJMP 0x0030

ORG 0x0030

MAIN:

외부 인터럽트 시작

p>

SETB IT0

SETB IE0

SETB EX0

SETB PX0

SETB IT1

SETB IE1

SETB EX1

SETB PX1

SETB EA

CLR 00H 조정 인터럽트 없음

CLR 01H 플래시

MOV 4DH, #04H 0xFC

MOV P3, #0FH

MOV 62H, 46H가 분 단위로 깜박입니다.

MOV 63H, 47H

십의 자리************************

MOV 50H, #3FH

p>

MOV 51H, #06H

MOV 52H, #5BH

MOV 53H, #4FH

MOV 54H, #66H

MOV 55H, #6DH

MOV 56H, #7DH

MOV 57H, #07H

MOV 58H, #7FH

MOV 59H, #6FH

MOV 5AH, #77H

MOV 5BH, #7CH

MOV 5CH, #39H

MOV 5DH, #5EH

MOV 5EH, #79H

MOV 5FH, #71H

MOV 60H, #40H

MOV 61H, #00H

옥텟 튜브 임시 저장 공간은 왼쪽에서 오른쪽으로 40~47입니다.

MOV 40H, #50H

MOV 41H, #50H

MOV 42H, #60H

MOV 43H, #50H

MOV 44H, #50H

MOV 45H, #60H

MOV 46H, #50H

MOV 47H, #50H

MOV 48H, #00H 스캔 비트 임시 저장

MOV R0, #40H 스캔 값 주소< /p>

MOV 4AH, 00H 20회 타이밍 카운팅

LCALL TIMER_GO20 시작 및 타이머 초기화

주요 기능 프로그램은 코드를 스캔하여 값을 관리하고 표시하는 것입니다. 다른 하나는 인터럽트 동작입니다************ ****************************** *************

스캔: 모니터 스캔 출력**************************** ***********

MOV P2, 48H 표시 숫자 선택(왼쪽에서 오른쪽으로 0-7)

M

OV A, @R0 이 비트의 디지털 값 주소를 가져옵니다.

MOV R1, A

MOV A, @R1 이 비트의 코드 값을 가져옵니다.

CPL A 디지털 튜브가 ***음 또는 ***양이 반전되는지 여부에 따라

MOV P0, A는 P0에서 각 비트의 코드 값을 출력합니다. 참고: 이 포트가 사용될 때, 다음 "클리어 스크린"이 함께 변경됩니다.

p>

LCALL DELAY는 각 비트에 대한 지연을 입력합니다.

MOV P0, #0FFH는 스크린을 클리어합니다.

INC 48H는 레지스터를 뒤로 이동합니다.

INC R0 비트 뒤로 이동

MOV A, 48H (48H)의 08H 값을 사용하여 비트 끝에 도달했는지 확인합니다.

ADD A, #08H

JB 0D6H, RER D6H(비트)는 AC(보조 캐리: 하프 캐리)입니다. 1이면 (48H)의 값이 08H=F, 즉 (48H)=8이라는 뜻이다. 이때 RER

SJMP SCAN

<으로 점프한다. p> RER: 스캔 재설정

CLR 0D6H 재설정 AC(보조 캐리: 하프 캐리)

MOV 48H, #00H

MOV R0, #40H

SJMP SCAN

주요 기능 종료************************************ ********* ***************************************** ********** **

DELAY: 지연, 7-세그먼트 튜브를 스캔할 때 각 비트에 머무르는 데 사용됩니다. 시간이 너무 짧고, 있어서는 안 되는 세그먼트입니다. 조명도 다소 밝습니다

MOV 49H, #25H 49H의 값은 FF와 같을 수 없습니다. FF가 반전된 후 49H는 0이고 지연이 없기 때문입니다.

MOV A, 0FEH 반전을 사용하여 루프 수를 설정합니다.

CPL A

MOV 49H, A

ADD_1:

INC 49H

MOV R1, 49H DJNZ가 판단을 완료했기 때문에 마지막으로 판단된 주소에 1을 빼야 하므로 DJNZ가 49H의 내용에 영향을 미치지 않도록 49H의 값이 R1에 로드됩니다. 판단을 위해

DJNZ R1, ADD_1

RET< /p>

20회 시간 제한******************** ***************************** ********************* ****************************** ****************

TIMER_GO20:

4AH를 사용하여 루프 수를 설정하세요**************** ************** **********

MOV 4AH, #15H 20(=0x15) 배 타이밍

MOV A, 4AH 타이밍 수를 설정하려면 반전을 사용합니다. < /p>

CPL A

MOV 4AH, A

SJMP TIMER_S

TIMER_GO5: TIMER_GO20과 유사하지만 여기서는 5번만 허용됩니다. 시간을 맞추는 것.

깜박임을 조정하는 데 사용됩니다.

MOV 4AH, #05H 5(=0x05) 타이밍

MOV A, 4AH 반전을 사용하여 타이밍 시간을 설정합니다.

CPL A

MOV 4AH, A

TIMER_S: 재설정 없이 호출(4AH),

시작 T0 설정

MOV TMOD , #01H 설정 모드: T0 모드 1

MOV TH0, #3CH T0 초기값 상위 8비트

MOV TL0, #0AH T0 초기값 하위 8비트

CLR TF0 알 수 없는 문제

SETB ET0 T0은 인터럽트를 허용합니다.

SETB EA CPU는 인터럽트를 허용합니다.

SETB TR0은 T0을 시작합니다.

RET

< p> T0_INT: T0 인터럽트 프로그램 세그먼트

CPL P1.7 테스트 포트: T0 타이밍 재설정은 한 번에 한 점프씩 발생합니다.

LCALL TIMER_S T0 타이밍 재설정, 계속 실행. 단: 20 카운트는 초기화되지 않습니다.

INC 4AH T0 타이밍 카운트가 1 증가합니다.

MOV A, 4AH

JNZ CY_20 50H가 FF에 추가됩니다. 그리고 0에 도달합니다. 0이 아니면 돌아가서 주 프로그램을 계속 실행합니다. 0이면 타이머 오버플로가 20번입니다. 00H(비트)는 1입니다.

CPL P1.6 테스트 포트는 1번씩 점프합니다. 초

JB 00H, GO_BLINK 00H(비트)가 1로 설정되면 시간 시스템은 더 이상 1씩 증가하지 않습니다.

조정에 사용될 때 디스플레이가 깜박입니다.

LCALL CLOCK_GO 시간 시스템에 1초가 추가됩니다.

LCALL TIMER_GO20 재시작하려면 20번

SJMP CY_20

GO_BLINK :

LCALL TIMER_GO5 5회 재시작,

LCALL BLINK

CY_20: RET

시간 시스템 캐리 설정**** * ************************************************** ***********************************

CLOCK_GO:

INC 47H 초 더하기 1

단위 초는 10으로 이동

MOV A, #5AH는 주로 "#5A"의 "A"를 봅니다.

SUBB A, 47H

JNZ SS_OUT (47H) 값의 하위 4가 A의 하위 4와 동일하지 않은 경우 캐리 없이 "SS_OUT"으로 점프

MOV 47H, #50H

INC 46H

SS_OUT:

초 캐리 분

MOV A, #56H

SUBB A, 46H

JNZ SM_OUT (46H) 값의 하위 4가 A의 하위 4와 다른 경우 캐리 없이 "SS_OUT"으로 점프

MOV 46H, #50H< / p>

CLOCK_GO_M: INC 44H

분 조정용

SM_OUT:

일 자리에 캐리가 포함된 분

MOV A, #5AH

SUBB A, 44H

JNZ MM_OUT (44H) 값의 하위 4가 A의 하위 4와 같지 않으면 "SS_OUT"으로 점프합니다. 캐리 없음

MOV 44H, #50H

INC 43H

MM_OUT:

분기 캐리가 발생할 때

MOV A, #56H

p>

SUBB A, 43H

JNZ MH_OUT (43H) 값의 하위 4가 A의 하위 4와 같지 않으면 " 캐리 없는 SS_OUT"

MOV 43H, #50H

CLOCK_GO_H: INC 41H

시간 조정용

MH_OUT:

일의 자리가 올 때

MOV A, #5AH

CLR CY는 차용 효과를 제외합니다

SUBB A, 41H

JNZ HH_OUT (41H) 값이 low 4이고 A의 low 4 in이 다르면 "SS_OUT"으로 점프하고 캐리 없음

MOV 41H, #50H

INC 40H< /p>

HH_OUT:

< p> 시 10 위치 0

MOV 4BH, 40H 임시 레지스터 데이터에 영향을 주지 않기 위해 40H, 41H를 4BH, 4CH로 전송하여 작동합니다.

MOV 4CH, 41H

p>

MOV A, 4BH

SWAP A는 시간의 10자리를 가져와 A의 상위 4비트에 넣습니다.

ANL A, #0F0H는 하위 4비트를 지웁니다.

ANL 4CH, #0FH 일의 자리의 상위 4자리가 0으로 클리어됩니다.

ADD A, 4CH 십의 자리와 일의 자리가 추가됩니다( 상위 4자리는 시간의 10자리에서 나옵니다.) 레지스터 40H, 하위 4비트는 시간 레지스터 41H에서 나옵니다.)

SUBB A, #24H

JNZ HD_OUT (46H) 값은 낮은 4이고 A 4의 낮은 값은 동일하지 않습니다. "SS_OUT"으로 점프하고 캐리 없음

MOV 41H, #50H 1자리 지우기

MOV 40H, #50H 십자리 클리어

HD_OUT:

CG_OUT: RET

END 시간계 캐리 설정************ ************** ************************************ *************** *******************

INTO 인터럽트 프로그램 세그먼트***** ***************** ********************************* ****************** *********

INT0_INT:

SETB 00H

< p> CPL P1.5

CPL P1.5< /p>

CLR 01H는 조옮김이 깜박일 때 상위 숫자가 다음 비트로 가져오는 것을 방지합니다. : 각 조옮김 시 임시 저장소에 넣어야 합니다. 값을 반환하여 표시합니다.

MOV A, 4DH

CJNE A, #02H, BSH_S back second OR hour. _select

LCALL LIGHT_M< /p>

SJMP B_END

BSH_S: 두 번째 시간 선택 복원

JB CY, B_H

SJMP B_S

B_S: LCALL LIGHT_S 조정된 데이터를 임시 레지스터에 다시 로드

SJMP B_END

B_H: LCALL LIGHT_H

B_END :

CLR TR0 타이머 0, 정지 타이밍

DEC 4DH 조정 유형(시, 분, 초) 변경됨

MOV A, 4DH

< p> JNZ INT0_OUT 시계 복원 여부< /p>

CLR 00H 0으로 설정, 조정 인터럽트(ilong 정의)

CLR 01H

MOV 4DH, #04H 초기화 조정 유형

INT0_OUT :

RET

플래시 *********************** ********** **********************************

깜박임:

CPL P1 .1

CPL 01H

MOV A, 4DH

CJNE A, #02H, SH_S

SJMP MM_SET

< p> SH_S: 깜박이는 초 시간 선택

JB CY, HH_SET

SJMP SS_SET

SS_SET: 초 설정************ *******

JB 01H, DACK_S

LIGHT_S:

MOV 46H, 4EH

MOV 47H, 4FH

SJMP BLINK_OUT

DACK_S:

MOV 4EH, 46H

MOV 4FH, 47H

MOV 46H, #61H

MOV 47H, #61H

RET

MM_SET: 분 설정****************

JB 01H, DACK_M

LIGHT_M:

MOV 43H, 4EH

MOV 44H, 4FH

SJMP BLINK_OUT

DACK_M:

MOV 4EH, 43H

MOV 4FH, 44H

MOV 43H, #61H

MOV 44H, #61H

RET

HH_SET: 시간 설정********************

JB 01H, DACK_H

LIGHT_H:

p>

MOV 40H, 4EH

MOV 41H, 4FH

SJMP BLINK_OUT

DACK_H:

< p> MOV 4EH, 40H< /p>

MOV 4FH, 41H

MOV 40H, #61H

MOV 41H, #61H

BLINK_OUT: RET

INT1 인터럽트 프로그램 세그먼트**************************************** ********** ******************

INT1_INT:

HMS_BACK 호출

clr tr0

< p> CPL P1.4

MOV A, 4DH

CJNE A, #02H, ADDSH_S 시간 추가 OR 초 추가 OR _select

SJMP ADD_M

ADDSH_S: 두 번째 시간 선택 조정

JB CY, ADD_H

SJMP ADD_S

ADD_S: LCALL CLOCK_GO

SJMP ADD_END

ADD_M: LCALL CLOCK_GO_M

SJMP ADD_END

ADD_H: LCALL CLOCK_GO_H

ADD_END: ​​

LCALL CLOCK_GO< /p>

RET

/************************ ******************* ******************************* *****************

마지막으로 중단에 대한 보험을 추가하세요

************* ********************** ***************************

*********************/

T0 인터럽트 프로그램******************

< p> ORG 000BH

LCALL T0_INT

RETI

INT0 인터럽트***************** ***

ORG 0003H

LCALL INT0_INT

RETI

INT1 인터럽트************ ******< /p>

ORG 0013H

LCALL INT1_INT

RETI

END는 변수 a의 데이터 유형을 부호 없는 문자로 정의합니다. type.stc51 micro에서 컨트롤러에서 몇 개의 문자를 차지할 것인지

데이터 구조에서 데이터 유형의 정의는 값 세트와 이 값 세트에 정의된 작업 세트입니다.

변수는 값이 저장되는 장소이며 이름과 데이터 유형이 있습니다. 변수의 데이터 유형은 해당 값을 나타내는 비트가 컴퓨터 메모리에 저장되는 방식을 결정합니다. 변수를 선언할 때 변수의 데이터 유형을 지정할 수도 있습니다.

모든 변수에는 어떤 종류의 데이터를 저장할 수 있는지 결정하는 데이터 유형이 있습니다. 51개의 마이크로 컨트롤러에서 비트를 정의하는 방법은 무엇입니까?

비트 잠금을 사용하여 가변 비트를 정의합니다.

IO 포트 비트를 정의하려면 *** it lock=P1^0을 사용하세요.

< p> 도움이 되었기를 바랍니다. 감사합니다! 51 마이크로컨트롤러에서 함수를 작성할 때 1, 2, 3, 4와 같이 interrutp 뒤의 숫자에 특정한 의미가 있습니까? 아니면 부담 없이 사용할 수 있는 숫자인가요?

void INT0() 인터럽트 0 사용 1

{....

.....< /p>

}

인터럽트 0은 외부 인터럽트 0을 나타냅니다.

인터럽트 1은 타이머 인터럽트 0을 나타냅니다. < /p>

인터럽트 3은 타이머 인터럽트 1을 나타냅니다.

인터럽트 4는 직렬 포트 인터럽트를 나타냅니다.

0은 임시 레지스터의 0번째 그룹입니다.

p>

1을 사용하는 것은 임시 레지스터의 첫 번째 그룹이고,

2를 사용하는 것은 임시 레지스터의 두 번째 그룹입니다.

3을 사용하는 것은 임시 레지스터의 세 번째 그룹입니다. 레지스터; < /p>

51 마이크로 컨트롤러의 임시 레지스터는 R0-R7(R0-R3 아님)입니다.

데이터 메모리에 있는 R0-R7의 실제 주소는 특수 레지스터에 의해 임시로 저장됩니다. 기능 컨트롤러 PSW의 RS1 및 RS0 비트에 의해 결정됩니다.

0을 사용하는 경우 RS1=0, RS0 =0으로 설정하고 0번째 레지스터 그룹을 사용하며 데이터 저장 영역에 있는 R0-R7의 실제 주소는 00H-07H입니다. R0 (00H)....R7 (07H)

1을 사용하는 경우 RS1=0, RS0 =1로 설정하고 첫 번째 레지스터 그룹을 사용하며 R0-R7은 데이터 저장 영역에 있습니다. 실제 주소는 00H-07H입니다. R0 (08H)....R7 (0FH)

2를 사용하는 경우 RS1=1, RS0 =0으로 설정하고 두 번째 레지스터 그룹을 사용하십시오. R0-R7은 데이터 저장 영역에 있습니다. 실제 주소는 08H-0FH입니다. R0 (10H)....R7 (17H)

3을 사용하는 경우 RS1=1, RS0 =1로 설정하고 세 번째 레지스터 그룹을 사용하십시오. R0-R7은 데이터 저장 영역에 있습니다. 실제 주소는 00H-07H입니다.

R0 (18H)....R7 (1FH) 51 마이크로컨트롤러 조합 언어의 라벨은 어떻게 정의되나요?

라벨은 이해를 돕기 위해 자유롭게 작성할 수 있으나, 지시사항을 그대로 사용하지 않도록 주의하세요. 또는 ORG, MOV, EQU 등과 같은 의사 명령어 및 관련 예약어는 레이블로 사용할 수 없습니다. 레이블에는 더하기, 빼기 또는 등호와 같은 구두점을 사용하지 않는 것이 가장 좋습니다. 콜론(:) < /p>

예:

ORG 0000H

AJMP START

ORG 0003H

LJMP INT_REV

ORG 0030H

시작:

.....

ORG 01FFH

INT_REV:

p>

..

레티