?? usart.c
字號(hào):
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include "main.h"
//常量定義
#define BAUDRATE 9600 //波特率
//#define F_CPU 7372800 //這個(gè)已經(jīng)在makefile里面定義了
void init_USART(void)//USART 初始化
{
//USART 9600 8, n,1 PC上位機(jī)軟件(超級(jí)終端等)也要設(shè)成同樣的設(shè)置才能通訊
UCSRC = (1<<URSEL) | 0x06;
//異步,8位數(shù)據(jù),無奇偶校驗(yàn),一個(gè)停止位,無倍速
/*
UBRRH與UCSRC共用I/O 地址。因此訪問該地址時(shí)需注意以下問題。
寫訪問
當(dāng)在該地址執(zhí)行寫訪問時(shí), USART 寄存器選擇位(URSEL)控制被寫入的寄存器。
若URSEL為0,對(duì)UBRRH值更新;若URSEL為1,對(duì)UCSRC設(shè)置更新
讀訪問
對(duì)UBRRH 或UCSRC 寄存器的讀訪問則較為復(fù)雜。但在大多數(shù)應(yīng)用中,基本不需要讀這些寄存器
沒有UBRR這個(gè)16位寄存器,因?yàn)閁BRRL(0x09)/UBRRH(0x20)的地址不連續(xù),而且UBRRH跟UCSRC共用地址
*/
//U2X=0時(shí)的公式計(jì)算
UBRRL= (F_CPU/BAUDRATE/16-1)%256;
UBRRH= (F_CPU/BAUDRATE/16-1)/256;
//U2X=1時(shí)的公式計(jì)算
//UBRRL= (F_CPU/BAUDRATE/8-1)%256;
//UBRRH= (F_CPU/BAUDRATE/8-1)/256;
//也可根據(jù)數(shù)據(jù)手冊(cè)的[波特率設(shè)置的例子]查得
//UBRRL = 0x2F; //set baud rate lo
//UBRRH = 0x00; //set baud rate hi
UCSRA = 0x00;
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
//使能接收中斷,使能接收,使能發(fā)送
}
void put_c(unsigned char c) //發(fā)送采用查詢方式
{
while( !(UCSRA & (1<<UDRE)) );
UDR=c;
}
void put_s(unsigned char *ptr)
{
while (*ptr)
{
put_c(*ptr++);
}
put_c(0x0D);
put_c(0x0A); //結(jié)尾發(fā)送回車換行
}
SIGNAL(SIG_USART_RECV) //串口接收中斷服務(wù)程序
{
unsigned char command;
command=UDR;
switch(command)
{
case 'I':
case 'i': //初始化RTC
if (DS1302_EXIST)
{
put_s("RTC初始化...");
init_RTC();
read_date(); //讀取當(dāng)前時(shí)間,解釋
put_s(sCURDATE); //發(fā)送到電腦
}
else
put_s("RTC找不到!");
break;
case 'R':
case 'r':
if (DS1302_EXIST)
{
put_s("讀取當(dāng)前時(shí)間...");
read_date(); //讀取當(dāng)前時(shí)間,解釋
put_s(sCURDATE); //發(fā)送到電腦
}
else
put_s("RTC找不到!");
break;
default:
put_s("用戶輸入的指令無效!");
break;
}
/*
注意,使用put_s函數(shù)發(fā)送數(shù)據(jù)需要一定的時(shí)間,如果輸入數(shù)據(jù)的速度過高將會(huì)導(dǎo)致數(shù)據(jù)丟失
所以,一般建議中斷服務(wù)程序的處理時(shí)間盡量的短,只做采集數(shù)據(jù)和設(shè)標(biāo)志位,命令的處理交由主程序來完成
這里只是示范簡(jiǎn)單的命令處理
*/
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -