📄 uart.c
字号:
/*串口通信模块,使用之前,应该在Main 函数中对串口进行初始化,
串口数据接收方式采用中断进行,振荡频率修正参数不在EEPROM的
0x1ff0中,使用PonyProg可以测试得OSCCAL=0xA1*/
#include <iom8v.h>
#include <macros.h>
extern void rom_write(unsigned int Address,unsigned char Data);
extern unsigned rom_read(unsigned int Address);
#define fosc 8000000 //晶振8MHZ
#define baud 19200 //波特率
//使用中断方式接收UART的输入字符
#pragma interrupt_handler UartGet:12
unsigned char charInput=0x00;
void UartGet(void)
{
static char cAddr=0;
charInput=UDR;
if(charInput=='c')
{
cAddr++;
rom_write(cAddr,OSCCAL);
}
}
void putchar(unsigned char c)/* 字符输出函数 */
{while (!(UCSRA&(1<<UDRE)));
UDR=c;}
unsigned char getchar(void)/* 字符输入函数-查询方式 */
{
while(!(UCSRA& (1<<RXC)));
return UDR;
}
/* 字符串输出函数 */
int puts(char *s)
{
while (*s)
{
putchar(*s);
s++;
}
return 1;
}
void uart_init(void)
{
UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);//允许接收中断、发送和接收
/*UBRRL=(fosc/16/(baud+1))%256;
UBRRH=((fosc/16/(baud+1))/256)&0b01111111;*/
UBRRL=(fosc/16/baud-1)%256;
UBRRH=((fosc/16/baud-1)/256)&0b01111111;
UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
//SEI();由MAIN函数统一开放全局中断
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -