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 p>
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 p>
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 p>
SJMP SCAN p>
주요 기능 종료************************************ ********* ***************************************** ********** **
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 위치 0MOV 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.5CPL 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 p>
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 p >
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.4MOV A, 4DH
CJNE A, #02H, ADDSH_S 시간 추가 OR 초 추가 OR _select p>
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 000BHLCALL 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>..
레티