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

📄 main.c

📁 这是一个完成单片机串口的操作的源码程序
💻 C
字号:
#include "AT91SAM7S64.h"
#include "SAM7S.h"         //自定义的头文件

#define Bautrate 115200    //在这里设置波特率

#define USART_INTERRUPT_LEVEL		7

void USART0_send_byte(unsigned int data);

void USART0_send_string(unsigned char *s);


//本次试着用中断来接收数据

__ramfunc void urt_irq_handler(void)  //US0的接收中断函数
{
   uint status=0;
	//* get Usart status register
   status = US0_CSR;     //判别如果是接收到了字符
   if ( status & AT91C_US_RXRDY)
    {
      USART0_send_byte(US0_RHR&0xff);      //发送接收到的字符
     }
    //US0_CSR=AT91C_US_RSTSTA;    //清除US0的状态
}



void USART_init(void)
{

PMC_PCER=1<<AT91C_ID_US0;
//PIO外设功能时钟始能USART0的时钟

PIO_PDR=(AT91C_PA5_RXD0|AT91C_PA6_TXD0);
//PIO使能USART0对应的引脚的外设功能

PIO_ASR=(AT91C_PA5_RXD0|AT91C_PA6_TXD0);
//外设A分配给USART0外设A功能

US0_CR=((1<<4)|(1<<6));  //允许接收和发送

US0_MR=(AT91C_US_USMODE_NORMAL|AT91C_US_CLKS_CLOCK|AT91C_US_CHRL_8_BITS|(4<<8));
//普通USART模式,主时钟,8字节数据,无效验

US0_BRGR=48054850/(16*Bautrate);    //设置波特率

US0_IER=0x1;       //允许接收中断

AT91C_AIC_SVR[AT91C_ID_US0]=(unsigned int)*urt_irq_handler;
//中断向量US0的中断处理函数所在的地址

AIC_IECR=0X1<<AT91C_ID_US0;   //系统里面允许USART0中断

}


void USART0_send_byte(unsigned int data)
{
US0_THR=data;           //写入要发送的数据
while((US0_CSR&2)==0);  //等待发送器就绪
//US0_THR=US0_THR|0x100;           //发送数据

}



unsigned int USART0_get_byte(void)
{
//uint temp=0;
while((US0_CSR&1)==0);  //等待接收器就绪
//temp=AIC_IVR;    //读取中断向量
return US0_RHR;
}


void USART0_send_string(unsigned char *s)
{
while(*s)
  {
  USART0_send_byte(*s);
  s++;
   }
}


int main(void)
{
uint i=0,temp=0;
USART_init();   //初始化USART0;
while(1)
  {
    i++;
    temp=US0_CSR;   //循环死等
   }

return 0;
}

//__irq __arm
//#pragma vector=0x118

⌨️ 快捷键说明

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