Մ?w��)���Ƭ�C�㱼�ij�����
���W��Ƭ�C�r�������m�Y(ji��)�������ģ�K���ܵđ�(y��ng)�����紮��(232��485)�����N����IC�Ŀ���,늙C����PWM���Д���(y��ng)�������r����(y��ng)�����˙C���摪(y��ng)����CAN������. �@��һ���W���^���б�����A�Σ��ǻ��������ܑc�����څ�������O(sh��)Ӌ��ِِǰ��Ӗ�r��MCU�܇��Ŀ��ƶ�Ӗ���ĺ���������(j��ng)�^�@���A�κ�����|��ͬ��MCU�͕��l(f��)�F(xi��n)������ͬС�������и��ă�(y��u)�ݶ������W�κ�һ�N�µ�MCU�����������ְ���һЩ���s��̎���������Ҍ�MCU�ľ��̿��ƕ�����һ���߶ȸśr——���nj����N����M�п���(����nj����s�㷨���\��͕�
��DSP��)��������cMCU��ͨ�ŷ�ʽһ��Ҳ�͎N�r��IIC,SPI,intel8080,M6800���@�ӿ���MCU�܇��ľ��̾���һ���ܺ��εĖ|������
Ȼ���@ֻ��Ƕ��ʽ�_�l(f��)�е�һ�cƤë�������ڽ��|�^��NMCU,���|�^���s�O(sh��)ӋҪ�������^����ϵ�y(t��ng)�ȵȺ����҂��ڻص���Ƭ�C����C�_�l(f��)�r���Ͳ�֪���X�ľ͕����]�����������O(sh��)Ӌ�ļܘ�(g��u)���};һ���õij���ܘ�(g��u)����һ���н�(j��ng)�Ĺ��̎���һ�����W�ߵķ�ˮ�X��
�������Ҍ���Ƭ�C�������Լ��_�l(f��)��һЩ���ò��ֵ��J�R���Y(ji��)��
�κΌ��r�gҪ����̵��������҂��Ĕ��ˣ��ڱ�Ҫ�ĕr���҂�ֻ������Ӳ���ɱ���������;������Ҫ8����(sh��)�a�܁��@ʾ���҂��ڛ]�����P(gu��n)��Ӳ��֧�ֵĕr������MCU�ԄӑB(t��i)����ķ�ʽ��ʹ�乤������;���ӑB(t��i)���茢�����ٵ���ֹ��MCU̎����������������MCUؓ�����صĈ������ҕ��x���x��һ�����max8279���ic����Q�@�����_;
Ȼ���c�ҵ����������S��nj��r�gҪ����̵����飺
�����I�P�Ē������˂��Ó��I�P���������������҂��o�茍�r�������I�P����������ÿ���ʮms��ȥ����һ��;Ȼ���@����ʮms���g�����҂���MCU߀��������S�������;
��Ƭ�C�mȻ����C���������������F(xi��n)������Ҫ�Q�����҂�����ܳ�����ϵ�y(t��ng)���ˑB(t��i)——���΄�(w��)����;
����һ�����õ���r��4���΄�(w��)��
1 �I�P����;
2 led��(sh��)�a���@ʾ;
3 ���ڔ�(sh��)��(j��)��Ҫ���ܺ�̎��;
4 ������Ҫ�l(f��)�͔�(sh��)��(j��);
��혋(g��u)���@����Ƭ�C�ij���?q��)����҂������c;
�x���r�����ҕ����I�P�����ò�ԃ�ķ�ʽ������ѭ�h(hu��n)���������ڽ��Ք�(sh��)��(j��)���Д������Д����(w��)����(sh��)�нM������(y��ng)�Ď���ʽ����λ����(y��ng)�Ę�־λ����������(sh��)��ѭ�h(hu��n)���M�Д�(sh��)��(j��)��̎�������ڰl(f��)�͔�(sh��)��(j��)�Լ�l(f��)ed���@ʾҲ������ѭ�h(hu��n)��;
�@������������Ԙ�־׃����ͨ�ŷ�ʽ�����ϵ�����ѭ�h(hu��n)�ͺ��_�Д��Ј�(zh��)��;
Ȼ�����ָ���䲻��֮̎��
ÿ���΄�(w��)�ĕr�gƬ�����^�L���@�����³���Č��r���ܲ���������@�ӵķ�ʽ�ڶ�ӎׂ��΄�(w��)��ʹ��һ��ѭ�h(hu��n)�ĕr�g�^�L�������I�P���茢�ܲ��`����������Ҫ����һ�����õ�ͨ�þ���ģ�����҂�������k������ȥÿ���΄�(w��)���M�r�g�IJ����Լ���ÿ���΄�(w��)�ٴηֽ�;�������Մÿ���΄�(w��)�ľ��w��ʩ��
1 �I�P����
�I�P�����dž�Ƭ�C�ij��ú���(sh��)������ָ�����õ��I�P�����������������Kϵ�y(t��ng)���r���ܵĵط�;
������֪��һ���I����֮��IJ������@�ӵ�(�ٶ�����Ч)��
�����I���º�����(sh��)��(j��)���ϵ���̖���F(xi��n)һ�Εr�g�Ķ�����Ȼ���ͣ�Ȼ���Iጷŕr����̖����һ�Εr�g��׃������Ȼ���ڔ�(sh��)��(j��)����ͻ��ߞ�ߵ��^���������п��ܳ��F(xi��n)һЩ��խ�ĸɔ_��̖��
unsigned char kbscan(void)
{
unsigned char sccode,recode;
P2=0xf8;
if ((P2&0xf8)!=0xf8)
{
delay(100); //�ӕr20msȥ��--------�@��̫�M�r���������
if((P2&0xf8)!=0xf8)
{
sccode=0xfe;
while((sccode&0x08)!=0)
{
P2=sccode;
if ((P2&0xf8)!=0xf8)
break;
sccode=(sccode<<1)|0x01;
}
recode=(P2&0xf8)|0x0f;
return(sccode&recode);
}
}
return (KEY_NONE);
}
�I�P��������Ҫܛ��ȥ�������@�]�Р��h��Ȼ��ԓ����(sh��)����ܛ���ӕr��ȥ��(ms���e���ӕr)���@��һ���S��ϵ�y(t��ng)���r���ܵ�һ������M;
һ��߀��һ���Дఴ�IጷŵĴ��a��
While( kbscan() != KEY_NONE)
; //��ѭ�h(hu��n)�ȴ�
�@�Ӻ������������I�P����һֱ�������@����������ϵ�y(t��ng)�������΄�(w��)Ҳ���܈�(zh��)�����@���ǂ��܇��ص�bug��
���˕��@���M��̎����
While(kbsan() != KEY_NONE )
{
Delay(10);
If(Num++ > 10)
Break;
}
����һ���Õr�g��(n��i)������I�Pһֱ��������������Ч�I̎�����@���mȻ����������ϵ�y(t��ng)�����΄�(w��)�����\������Ҳ�ܴ�̶�����������ϵ�y(t��ng)�Č��r����������������ӕr����(sh��);
�҂��ÃɷN��Ч�ķ�������Q�ˆ��}��
1 �ڰ��I���ܱ��^���ε���r�����҂�?n��i)�Ȼ�������kbscan()����(sh��)�M�В�����ֻ�ǰ�����ȥ���õ�ܛ���ӕrȥ������ȥ���Լ��Дఴ�I��ጷ���һ������(sh��)��̎����������ܛ���ӕr�������ö��r����Ӌ�r(��һ���Ӌ�rҲ��)�����;���a����
void ClearKeyFlag(void)
{
KeyDebounceFlg = 0;
KeyReleaseFlg = 0;
}
void ScanKey(void)
{
++KeyDebounceCnt;//ȥ��Ӌ�r(�@��Ӌ�rҲ���Է��ں��_���r��Ӌ�r����(sh��)��̎��)
KeyCode = kbscan();
if (KeyCode != KEY_NONE)
{
if (KeyDebounceFlg)//�M��ȥ����B(t��i)�Ę�־λ
{
if (KeyDebounceCnt > DEBOUNCE_TIME)//������ȥ��Ҏ(gu��)���ĕr�g
{
if (KeyCode == KeyOldCode)//���I��Ȼ�������t�����Iֵ
{
KeyDebounceFlg = 0;
KeyReleaseFlg = 1;//ጷŘ�־
return; //Here exit with keycode
}
ClearKeyFlag(); //KeyCode != KeyOldCode��ֻ�Ƕ��Ӷ���
}
}else{
if (KeyReleaseFlg == 0)
{
KeyOldCode = KeyCode;
KeyDebounceFlg = 1;
KeyDebounceCnt = 0;
}else{
if (KeyCode != KeyOldCode)
ClearKeyFlag();
}
}
}else{
ClearKeyFlag();//�]�а��I�t�����־
}
KeyCode = KEY_NONE;
}
�ڰ��I��r�^���s����r�������L���I���M���I���B�I��һЩ���s���ܵİ��I�r�����҂����A�����à�B(t��i)�C�팍�F(xi��n)�I�P�Ē���;
//avr ��Ƭ�C ��4*3�����B(t��i)�C���F(xi��n)
char read_keyboard_FUN2()
{
static char key_state = 0, key_value, key_line,key_time;
char key_return = No_key,i;
switch (key_state)
{
case 0: //����Ġ�B(t��i)���M��3*4���I�P����
key_line = 0b00001000;
for (i=1; i<=4; i++) // �����I�P
{
PORTD = ~key_line; // ݔ���о��ƽ
PORTD = ~key_line; // �����2��!!!(ע1)
key_value = Key_mask & PIND; // �x���ƽ
if (key_value == Key_mask)
key_line <<= 1; // �]��I���^�m(x��)����
else
{
key_state++; // �а��I��ֹͣ����
break; // �D(zhu��n)�����_�J��B(t��i)
}
}
break;
case 1: //�ˠ�B(t��i)���Дఴ�I�Dz��Ƕ��������
if (key_value == (Key_mask & PIND)) // �ٴ��x���ƽ��
{
key_state++; // �D(zhu��n)��ȴ����IጷŠ�B(t��i)
key_time=0;
}
else
key_state--; // �ɴ����ƽ��ͬ���ؠ�B(t��i)0��(����̎��)
break;
case 2: // �ȴ����IጷŠ�B(t��i)
PORTD = 0b00000111; // �о�ȫ��ݔ�����ƽ
PORTD = 0b00000111; // �؏���һ��
if ( (Key_mask & PIND) == Key_mask)
{
key_state=0; // �о�ȫ������ƽ���ؠ�B(t��i)0
key_return= (key_line | key_value);//�@�����Iֵ
}
else if(++key_time>=100)//����L�r�g�]��ጷ�
{
key_time=0;
key_state=3;//�M���B�I��B(t��i)
key_return= (key_line | key_value);
}
break;
case 3://�����B�I��ÿ��50ms�͵õ�һ���Iֵ��windows xp ϵ�y(t��ng)�����@������
PORTD = 0b00000111; // �о�ȫ��ݔ�����ƽ
PORTD = 0b00000111; // �؏���һ��
if ( (Key_mask & PIND) == Key_mask)
key_state=0; // �о�ȫ������ƽ���ؠ�B(t��i)0
else if(++key_time>=5) //ÿ��50MS��һ���B���İ��I
{
key_time=0;
key_return= (key_line | key_value);
}
break;
}
return key_return;
}
��������4����B(t��i)��һ����I�P����ֻ��ǰ��3����B(t��i)�Ϳ�����������һ����B(t��i)�Ǟ�����“�B�I”�����O(sh��)Ӌ�ġ��B�I——���������ij���I�������tѸ�ٵĶ��푑�(y��ng)ԓ�Iֵ��ֱ����ጷ�������ѭ�h(hu��n)��ÿ��10msԓ�I�P���躯��(sh��)��(zh��)��һ�μ���;�҂�����r�ޞ�10ms,��ȻҪ��������
2 ��(sh��)�a�ܵ��@ʾ
һ����r���҂��õİ�λһ�w�Ĕ�(sh��)�a�������ÄӑB(t��i)����ķ���������@ʾ;�dz��c�������ڸ���50hz���ϵ��W�q�r�l(f��)�F(xi��n)���˵��������҂��ڄӑB(t��i)���蔵(sh��)�a�ܵ��g���r�g�dz�ԣ�����@���҂�����r�ޞ�4ms(250HZ) ���ö��r�����r��2ms,�ڶ��r�Д�������M�В�����@ʾ��ÿ��ֻ�@ʾ���е�һλ;��Ȼ�r��Ҳ����Ū�LһЩ�������]�ķ����ǰ��@ʾ����(sh��)������ѭ�h(hu��n)���������r�Д�����λ����(y��ng)�Ę�־λ����;
// Timer 0 ���^ƥ���Д����(w��),4ms���r
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
display(); // �{(di��o)��LED�����@ʾ
……………………
}
void display(void) // 8λLED��(sh��)�a�܄ӑB(t��i)���躯��(sh��)
{
PORTC = 0xff; // �@��Ѷ��x���P(gu��n)�]�Ǻܱ�Ҫ������t��(sh��)�a�ܕ��a(ch��n)����Ӱ
PORTA = led_7[dis_buff[posit]];
PORTC = position[posit];
if (++posit >=8 )
posit = 0;
}
3 ���ڽ��Ք�(sh��)��(j��)��
���ڽ��Օr���Дʽ�����@�o�ɺ�����������ԇ�D���Д����(w��)���������һ����(sh��)��(j��)�Ľ��վ��韩���������hӛס���Д����(w��)����(sh��)Խ��Խ������tӰ��@������Č��r������һ����(sh��)��(j��)��һ��������ɂ��ֹ�(ji��)���҂���Ҫ�Д�һ���Ƿ������У��Ƿ����_�����@���^�����҂�������ܛ���ӕr������������ѭ�h(hu��n)�ȴ��ȷ�ʽ;
�����҂��ڴ��ڽ����Дຯ��(sh��)����ֻ�ǰє�(sh��)��(j��)������һ�����_�������
���ڽM�Ɏ����Լ��z�鎬�Ĺ����҂�����ѭ�h(hu��n)�н�Q������ÿ��ѭ�h(hu��n)���҂�ֻ̎��һ����(sh��)��(j��)��ÿ���ֹ�(ji��)��(sh��)��(j��)��̎���g���ď��Ա��^��������҂��ѽ�(j��ng)�����������������
/*==========================================
���ܣ����ڰl(f��)�ͽ��յĕr�g�¼�
�f�������ڴ�ѭ�h(hu��n)��ÿ10msһ��
ݔ����none
ݔ�룺none
==========================================*/
void UARTimeEvent(void)
{
if (TxTimer != 0)//�l(f��)����Ҫ�ȴ��ĕr�g�f�p
--TxTimer;
if (++RxTimer > RX_FRAME_RESET) //
RxCnt = 0; //������ܳ��r(���������Ď����߽���һ�����)���ѽ��յIJ����������w
}
/*==========================================
���ܣ����ڽ����Д�
�f��������һ����(sh��)��(j��)�����뾏��
ݔ����none
ݔ�룺none
==========================================*/
interrupt [USART_RXC] void uart_rx_isr(void)
{
INT8U status,data;
status = UCSRA;
data = UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0){
RxBuf[RxBufWrIdx] = data;
if (++RxBufWrIdx == RX_BUFFER_SIZE) //���Ք�(sh��)��(j��)�ھ��_��
RxBufWrIdx = 0;
if (++RxBufCnt == RX_BUFFER_SIZE){
RxBufCnt = 0;
//RxBufferOvf=1;
}
}
}
/*==========================================
���ܣ����ڽ��Ք�(sh��)��(j��)��
�f��������0ݔ���r���յ�һ����(sh��)��(j��)
���ڴ�ѭ�h(hu��n)�Ј�(zh��)��
ݔ����==0:�]�Д�(sh��)��(j��)��
!=0:��(sh��)��(j��)��������
ݔ�룺none
==========================================*/
INT8U ChkRxFrame(void)
{
INT8U dat;
INT8U cnt;
INT8U sum;
INT8U ret;
ret = RX_NULL;
if (RxBufCnt != 0){
RxTimer = 0; //�����Ӌ��(sh��)�r�g��UARTimeEvent()�Ќ��ڽ��ճ��r���˷ŗ�������(sh��)��(j��)��̎��
//Display();
cnt = RxCnt;
dat = RxBuf[RxBufRdIdx]; // Get Char
if (++RxBufRdIdx == RX_BUFFER_SIZE)
RxBufRdIdx = 0;
Cli();
--RxBufCnt;
Sei();
FrameBuf[cnt++] = dat;
if (cnt >= FRAME_LEN)// �M��һ��
{
sum = 0;
for (cnt = 0;cnt < (FRAME_LEN - 1);cnt++)
sum+= FrameBuf[cnt];
if (sum == dat)
ret = FrameBuf[0];
cnt = 0;
}
RxCnt = cnt;
}
return ret;
}
���ϵĴ��aChkRxFrame()���Է��ڴ��ڽ��Ք�(sh��)��(j��)̎������(sh��)RxProcess() ����Ȼ�������ѭ�h(hu��n)�Ј�(zh��)�м�����������һ��Ӌ�r׃��RxTimer������Ľ�Q�˽��Վ����r�ķŗ���̎�������]�����κεȴ���������ѭ�h(hu��n)��ÿ��ֻ�ǽ���һ���ֹ�(ji��)��(sh��)��(j��)���r�g�ܶ���
�҂��_ʼ�ܘ�(g��u)����ϵ�y(t��ng)�Ŀ�ܣ�
�҂��x��һ��ϵ�y(t��ng)�����õ�TIMER���a(ch��n)��ϵ�y(t��ng)�����ϵ�y(t��ng)���ʹ�(ji��)�����@���҂��x��4ms;
��meg8���҂����a���£�
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x83;
// Place your code here
if ((++Time1ms & 0x03) == 0)
TimeIntFlg = 1;
}
Ȼ���҂��O(sh��)Ӌһ��TimeEvent()����(sh��)�����{(di��o)��һЩ����ָ�����l����Ҫѭ�h(hu��n)�{(di��o)�õĺ���(sh��)��
����ÿ��4ms�҂����M��ι���Լ���(sh��)�a�܄ӑB(t��i)�����@ʾ��ÿ��1s�҂����{(di��o)��led�W�q������ÿ��20ms�҂��M���I�P�������;
void TimeEvent (void)
{
if (TimeIntFlg){
TimeIntFlg = 0;
ClearWatchDog();
display(); // ��4ms�¼������{(di��o)��LED�����@ʾ���Լ�ι��
if (++Time4ms > 5){
Time4ms = 0;
TimeEvent20ms();//��20ms�¼������҂�̎���I�P����read_keyboard_FUN2()
if (++Time100ms > 10){
Time100ms = 0;
TimeEvent1Hz();// ��1s�¼������҂�ʹ����ָʾ���W�q
}
}
UARTimeEvent();//���ڵĔ�(sh��)��(j��)�����¼�����4ms�¼���̎��
}
}
�@Ȼ����˼·�ѽ�(j��ng)����������cpu��Ҫ̎����ѭ�h(hu��n)�¼������Ը���(j��)�䌦�ڕr�g��Ҫ��ܷ���ļ���ԓ����(sh��)���������҂����@�¼���Ҫ��
��(zh��)���ٶȿ������̣�������̫�L���ӕr�ȴ����������¼�һ�Έ�(zh��)�Еr�g�ͱ��С��ϵ�y(t��ng)�Ļ��ʕr�gƬ4ms(����(j��)��Ҫ���ԼӴ�ϵ�y(t��ng)���ʹ�(ji��)��)�������҂����I�P�����������(sh��)�a���@ʾ���������ڽ��ճ���������ǰ��ʾ������Ʋ�������Ҫ�õ��^�L���ӕr(��ģ�MIIc�r�����õ����ӕr)
�҂��O(sh��)Ӌ���@�ӵ��ӕr����(sh��)��
void RunTime250Hz (INT8U delay)//���ӕr����(sh��)�Ć�λ��4ms(ϵ�y(t��ng)���ʹ�(ji��)��)
{
while (delay){
if (TimeIntFlg){
--delay;
TimeEvent();
}
TxProcess();
RxProcess();
}
}
�҂���Ҫ�ӕr�ĕr�g=delay*ϵ�y(t��ng)ӛס��(ji��)��4ms,�˺���(sh��)�ʹ_�������ӕr��ͬ�r���҂������¼�(�I�P������led�@ʾ��)Ҳ���]�б����`;
�����@���҂���������(sh��)main()���ܺ��̣�
Void main (voie)
{
Init_all();
while (1)
{
TimeEvent(); //����ѭ�h(hu��n)�¼���̎��
RxProcess(); //���ڌ����յĔ�(sh��)��(j��)̎��
TxProcess();// ���ڰl(f��)�͔�(sh��)��(j��)̎��
}
}
���w�����҂���ϵ�y(t��ng)�ͳ��ˌ���һ���f�ܵ�ģ����������(j��)�Լ����x��cpu,�x�����r�����������Լ����¼�����(sh��)�������dz��`��㌍����һ��Ć�Ƭ�C�܄��εĈ�����ԓģ�涼�ܸ㶨��
����ϵ�y(t��ng)��ȫ�֘�־������������ɢ��ɢ;ϵ�y(t��ng)���M���^С��ֻ�Ǡ�����һ��Timer���������YԴȱ���Ć�Ƭ�C�����dz��m;����(j��ng)���^һ���W(w��ng)�ѵ�ģ��“��Ƭ�C����ϵ�y(t��ng)”������51�����ӌ��������w˼·���@����������^�����ø���Ҏ(gu��)���o�����dz����p;�������X�ô��a�_�N��Ҫ��Щ���ÑT�˶�һ��Ŷ���������ڱ�ϵ�y(t��ng)��ȫ�֘�־���(q��)���¼������Ա��^���X���^��y��ȫ����ö�����עጣ�����Ҫע��һЩ�[�εĺ���(sh��)�f�w��r��ǧ�f��Ҫ�f�w��̫��Ŷ(�еĆ�Ƭ�C��֧��)��
http://bbs.21ic.com/icview-237577-1-1.html

����admin ����ĕr�g��2019-07-31