우리는 AT89S51 마이크로 컨트롤러를 사용하여 DC 모터 컨트롤러 용 코드를 개발하고 있습니다. 우리는 코드 개발을 위해 임베디드 C를, IDE는 Keil 마이크로 비전을, 마이크로 컨트롤러에 .hex 파일을 업로드하려면 Progisp를, 직렬 인터페이스에는 PUTTY를 사용합니다.직렬 DC 모터 제어를 사용하여 8051
#include <reg51.h>
#include <stdio.h>
unsigned int k;
sbit motor = P1^0;
void delay (int q) {
int w;
for (w = 0; w < q; w++);
}
void next_line()
{
SBUF = 10; // go to next line
while(TI == 0);
TI = 0;
SBUF = 13; // go to the beginning of the line
while(TI == 0);
TI = 0;
}
unsigned char receive() //Function to receive serial data
{
unsigned char value;
while (RI == 0);
value=SBUF;
P1=value;
RI=0;
return value;
}
void start()
{
SCON=0x50;
TMOD=0x20;
TH1=0xFD;
TR1=1;
TI=1;
}
int i;
main()
{
while (1)
{
unsigned char speed = 0;
start();
speed=receive();
switch (speed)
{
case '1':
k=90; // 90 msec out of 100 msec
next_line();
break;
case '0':
k=10; // 10 msec out of 100 msec
next_line();
break;
};
for(i=0; i<100; i++)
{
if (i<k) {
motor = 0;
}
else {
motor = 1;
}
}
}
}
우리는 '1'버튼을 누른 후 '0'버튼을 눌렀을 때 10 % 전원으로 전환 할 때 모터가 90 % 전원에서 작동하도록 기대 : 여기
는 코드입니다. 그러나 일부 키보드 버튼 (1,4,5,8)은 모터를 켜고 일부 버튼 (2,3,6,7)은 모터를 끄게됩니다. 나는 부적절한 작업의 본질을 이해할 수 없다. 제발,이 문제로 우리를 도울 수 있습니까? 감사 미리 는
의 내 (테스트되지 않은!) 재 작성은 여기 시리얼 문자 입력을 확인한다 루틴? 직렬 포트 설정 (속도, 정지 비트, 패리티 등)이 일치하지 않아 장치에서 읽을 때 ASCII 코드가 엉망이 될 수 있습니까? –
고맙습니다. @JimLewis, 다른 문자를 사용하면 오류가 반복되므로 오류의 원인이라고 생각합니다. 퍼티를 사용하여 k 변수를 입력 할 수 있습니까? 즉, 퍼티 창에 55를 입력 할 수 있습니까? 그러면 전원이 55 %로 설정되어 있습니까? – brainkz
'P1 = value;'가 의도 한 바가 무엇인지 짐작하기가 어렵습니다.홀수 번호의 ASCII 코드로 모터를 켜는 것 외에도 :) –