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

📄 usart.c

📁 AVR-ateme128-lUSART串口使用范例
💻 C
字号:

#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include "main.h"

//常量定义
#define BAUDRATE        	9600	//波特率
//#define F_CPU				7372800 //这个已经在makefile里面定义了

void init_USART(void)//USART 初始化
{

    //USART 9600 8, n,1  PC上位机软件(超级终端等)也要设成同样的设置才能通讯
    UCSRC = (1<<URSEL) | 0x06;
    //异步,8位数据,无奇偶校验,一个停止位,无倍速
    /*
    UBRRH与UCSRC共用I/O 地址。因此访问该地址时需注意以下问题。
    写访问
    当在该地址执行写访问时, USART 寄存器选择位(URSEL)控制被写入的寄存器。
    若URSEL为0,对UBRRH值更新;若URSEL为1,对UCSRC设置更新
    
    读访问
    对UBRRH 或UCSRC 寄存器的读访问则较为复杂。但在大多数应用中,基本不需要读这些寄存器
    
    
    没有UBRR这个16位寄存器,因为UBRRL(0x09)/UBRRH(0x20)的地址不连续,而且UBRRH跟UCSRC共用地址
    */
    
    //U2X=0时的公式计算
    UBRRL= (F_CPU/BAUDRATE/16-1)%256;
    UBRRH= (F_CPU/BAUDRATE/16-1)/256;
    //U2X=1时的公式计算
    //UBRRL= (F_CPU/BAUDRATE/8-1)%256;
    //UBRRH= (F_CPU/BAUDRATE/8-1)/256;
    //也可根据数据手册的[波特率设置的例子]查得
    //UBRRL = 0x2F; //set baud rate lo
    //UBRRH = 0x00; //set baud rate hi
    UCSRA = 0x00;
    UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
    //使能接收中断,使能接收,使能发送
}

void put_c(unsigned char c) //发送采用查询方式
{
	while( !(UCSRA & (1<<UDRE)) );
	UDR=c;
}

void put_s(unsigned char *ptr)
{
	while (*ptr)
	{
		put_c(*ptr++);
	}
	put_c(0x0D);
	put_c(0x0A);  //结尾发送回车换行
}

SIGNAL(SIG_USART_RECV) //串口接收中断服务程序
{
	unsigned char command;
	command=UDR;
	switch(command)
	{
		case 'I':
		case 'i':		//初始化RTC
			if (DS1302_EXIST)
			{
				put_s("RTC初始化...");
				init_RTC();
				read_date();		//读取当前时间,解释
				put_s(sCURDATE);	//发送到电脑
			}
			else
				put_s("RTC找不到!");
			break;
		case 'R':
		case 'r':
			if (DS1302_EXIST)
			{
				put_s("读取当前时间...");
				read_date();		//读取当前时间,解释
				put_s(sCURDATE);	//发送到电脑
			}
			else
				put_s("RTC找不到!");
			break;
		default:
			put_s("用户输入的指令无效!");
			break;
	}
	/*
	  注意,使用put_s函数发送数据需要一定的时间,如果输入数据的速度过高将会导致数据丢失
	  所以,一般建议中断服务程序的处理时间尽量的短,只做采集数据和设标志位,命令的处理交由主程序来完成
	  这里只是示范简单的命令处理
	*/
}

⌨️ 快捷键说明

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