⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usartoriginality.c

📁 almegal128串口编程
💻 C
字号:
#include <io.h>
#include <interrupt.h>
#include <signal.h>

#define F_CPU              14745600    /* 4Mhz 4000000*/
#define UART_BAUD_RATE      4800     /* 9600 baud */

#define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*16l)-1)

typedef unsigned char   u08;
typedef          char   s08;
typedef unsigned short  u16;
typedef          short  s16;

u08 *array;
u16 counter;
u16 k,i,j;
u08 led[6];


void USART_Transmit(u08 *buf,u16 size)
{
array=buf;
counter=size;
//while(!(UCSR1A&(1<<UDRE))) //此处是否适合于要这一句有待试验,按照后面的语句,可以不用这一句。
//;
outp(*buf,UDR1);
}

SIGNAL(SIG_UART1_TRANS) 
{
array++;
if(--counter)
 {
  for(i=0;i<=100;i++)
  {
  for(j=0;j<=100;j++)
    ;
  }

 outp(*array,UDR1);
 }
}

SIGNAL(SIG_UART1_RECV)      
/* signal handler for receive complete interrupt */
{
    //outp(0x4b,PORTB);     //作为每一步测试用
    led[k]= inp(UDR1);        /* read byte for UART data buffer */
    if(k==0)
     {
     if(led[k]==0xc4)
     k++;
     }
    else if(k==1)
     {
     if(led[k]==0xd7)
     k++;
     }
    else if(k==2)
     {
     if(led[k]==0x02)
     k++;
     }
    else if(k==3)
     {
     if(led[k]==0x29)
     k++;
     }
    else if(k==4)
     {
     if(led[k]==0x76)
     k++;
     }
    else
     {
     if(k==5)
      {if(led[k]==0x0d)
       {
       k=0;
       outp(led[3],PORTB);
       }     /* output received byte to PortB (LEDs) */
      }
     }
}

void USART_Init(u16 baud)
{
UBRR1H=(unsigned char)(baud>>8);
UBRR1L=(unsigned char)baud;
//outp((1<<RXEN)|(1<<RXCIE)|(1<<TXEN)|(1<<TXCIE),UCSR1B);
UCSR1B=(1<<RXEN)|(1<<RXCIE)|(1<<TXEN)|(1<<TXCIE); //
//outp(0x86,UCSR1C);
//UCSR1C=(1<<URSEL)|(3<<UCSZ0);         //当写UCSRC寄存器时,URSEL必须写入1;
}

int main(void)
{
k=0;
u08 tt[6]={0xc4,0xd7,0x02,0xe7,0x76,0x0d};
outp(0xff,DDRB);
u16 rate=UART_BAUD_SELECT;
USART_Init(rate);
sei();
for(;;)
 {
 USART_Transmit(tt,6);
 for(i=0;i<=255;i++)
  {
  for(j=0;j<=255;j++)
    ;
  }
 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -