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

📄 serial._c

📁 使用8880实现DTMF通信及拨号的程序.
💻 _C
字号:
//ICC-AVR application builder : 2007-10-18 21:13:05
// Target : M8
// Crystal: 8.0000Mhz

#include <iom8v.h>
#include <macros.h>
#include <string.h>
#include "serial.h"
#include "main.h"
//UART0 initialize
// desired baud rate: 110
// actual: invalid baud rate
SERIAL_PORT_STATUS com_status;
char recv_buf[RECV_BUFLEN];
char send_buf[SEND_BUFLEN];
void uart0_init(void)
{
 UCSRB = 0x00; //disable while setting baud rate
 UCSRA = 0x00;
 UCSRC = BIT(URSEL) | 0x06;
 UBRRL = 0x03; //set baud rate lo
 UBRRH = 0x00; //set baud rate hi
 UCSRB = 0x98;
 com_status.read_start_ptr=recv_buf;
 com_status.read_end_ptr=recv_buf;
 com_status.recv_cur_ptr=recv_buf;
 com_status.send_cur_ptr=send_buf;
 com_status.sending=0;
}

#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
void uart0_rx_isr(void)
{	 
	 char c;
	 c=UDR;
	 if (sysoption.echo){
	 	if (c=='\r') c='\n';
	 	UDR=c;
	 }
	 if (c==0) return;
 	 *com_status.recv_cur_ptr++=c;
	 if (com_status.recv_cur_ptr==recv_buf+RECV_BUFLEN)
	 	com_status.recv_cur_ptr=recv_buf;
	 if (c==LINE_END_CHAR) {
	 	com_status.read_end_ptr=com_status.recv_cur_ptr;
	 }
}
#pragma interrupt_handler uart0_udre_isr:iv_USART0_UDRE
void uart0_udre_isr(void)
{
 	 UDR=*com_status.send_cur_ptr++;
	 if (*com_status.send_cur_ptr==0 || com_status.send_cur_ptr==send_buf+SEND_BUFLEN){
	 	UCSRB&=~0x20;
		com_status.sending=0;
	 }
}
void serial_send(char *buf)
{
 	 if (*buf==0) return;
	 while (com_status.sending);
	 strcpy(send_buf,buf);
	 com_status.send_cur_ptr=send_buf;
	 com_status.sending=-1;
  	 UCSRB|=0x20;
}
unsigned int serial_recv(char *buf,unsigned int buflen)
{
 	 unsigned int len=0;
	 if (com_status.read_start_ptr==com_status.read_end_ptr) return 0;
	 while(com_status.read_start_ptr!=com_status.read_end_ptr && len<buflen-1){
	 	*buf++=*com_status.read_start_ptr++;
		len++;
		if (com_status.read_start_ptr==recv_buf+RECV_BUFLEN)
		   com_status.read_start_ptr=recv_buf;
	 }
	 *(--buf)=0;
	 return --len;
}

⌨️ 快捷键说明

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