uart.c.bak

来自「详细介绍M8两版间通讯」· BAK 代码 · 共 53 行

BAK
53
字号
/*串口通信模块,使用之前,应该在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 + =
减小字号Ctrl + -
显示快捷键?