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

📄 uart.c

📁 详细介绍M8两版间通讯
💻 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 + -