최근에 겪은 단편기 프로그래밍 사소한 문제 총결
1473 단어 단편기 and 모듈
1. 시간이 너무 길어서 어느 항목에서 만났는지 기억이 나지 않습니다. 코드 구역을 가리키는 바늘도 코드 키워드 설명을 추가해야 합니다.
예를 들어 unsigned charcode arr[30];수조, 바늘로 가리키고 바늘도 unsigned charcode*p로 설명하기;
나중에 사용하면 다른 많은 곳에서 사용하면 이렇게 설명할 필요가 없습니다. unsigned char*p만 있으면 됩니다.됐어요. 하지만 그때는 확실히 코드 키워드 성명을 넣어야 했던 걸로 기억해요.
2. 51에서 비트 변수는 유한한 것 같다.
만약에 부울형을 표지 변수로 사용하려면 컨트롤을 절약하기 위해 비트형 변수를 사용할 수 있지만 DRS1000 프로젝트에서 비트형 변수를 사용하는 오류가 발생한 적이 있는데 unsigned char형으로 바꾸면 OK입니다. 그때 정의된 변수는 이미 많습니다. 비트로 주소를 찾을 수 있는 저장소를 모두 사용했을 것입니다.
3. 기계 스위치로 INT 중단을 촉발할 때:
기계 스위치가 진동하기 때문에 발생하는 전압에 가시가 생기기 때문에 이런 가시는 여러 번 촉발하여 끊어진다.여러 번 발생하는 요인은 다음과 같습니다.
(1) 스위치를 눌렀을 때의 진동.첫 번째 저전압 레벨이 왔을 때 인터럽트 프로세서에 들어간다. 그 후에 이 진동이 인터럽트 프로세서가 실행되는 과정에서 발생하더라도 인터럽트 프로세서에 들어간 후에 총 인터럽트를 끄더라도 이 가시들은 인터럽트 로고의 위치를 차지하고 인터럽트 프로세서가 끝난 후에 다시 인터럽트 프로세서를 터치한다.
(2) 스위치가 방출될 때의 진동.첫 번째 고전평이 왔을 때 인터럽트 프로세서를 종료하고 그 후의 가시가 다시 인터럽트 프로세서에 들어간다.
해결 방법:
인터럽트 프로세서의 마지막 부분에 저전압 대기 코드를 추가하고 저전압 종료를 기다렸다가 5ms(스위치가 풀릴 때 가시가 끼는 방해를 없애기 위해), 5ms 인터럽트 로고를 제거한다(인터럽트 프로세서가 실행되는 과정에서 인터럽트 로고를 다시 촉발했을 수 있다).코드는 다음과 같습니다.
void int0() interrupt 0
{
/*Do something*/
while(rollRA==0);//
delay5(1);//
IE0=0; // ,
}
4. 15 시리즈 단편기의 경우 직렬 포트를 사용할 때 AUXR 레지스터의 값을 지정해야 한다. 그렇지 않으면 프로그램이 정상적으로 실행될 수 없다.
이 상황은 15 시리즈 단편기가 직렬 포트만 사용하면 반드시 AUXR 레지스터의 값을 알려야 하기 때문에 12 시리즈처럼 이 레지스터를 무시할 수 없다.
15 시리즈 단편기를 사용할 때 습관이 생겼다. 마인 함수의 첫 문장은AUXR=0;뒤에 있는 직렬 포트는 필요에 따라 초기화됩니다.