-
Notifications
You must be signed in to change notification settings - Fork 1
/
USART.c
106 lines (94 loc) · 3.24 KB
/
USART.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <iom128v.h>
#include "basic.h"
#include "USART.h"
//发送字符数组
uchar TxCharBuf[128];
uchar TxCharNum, TxStrLen;
//接收字符数组
uchar RxCharBuf[16];
uchar RxCharNum, RxBufWr, RxBufRd;
//发送字符数组
uchar TxCharBuf_wifi[128];
uchar TxCharNum_wifi, TxStrLen_wifi;
//接收字符数组
uchar RxCharBuf_wifi[16];
uchar RxCharNum_wifi, RxBufWr_wifi, RxBufRd_wifi;
//***********************************************************************
// 串口0初始化接口函数
// 初始化uart,查询方式读写
//***********************************************************************
void UART0_Init(void)
{
UCSR0B = 0x00; //disable while setting baud rate
UCSR0C = 0x06;
UCSR0A = 0x00;
UBRR0H = baud_h; //写波特率的值
UBRR0L = baud_l;
UCSR0B = (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0); //发送接收使能、接收结束中断使能
RxBufWr = 0;
RxBufRd = 0;
}
//***********************************************************************
// USART0发送字符串数据
//***********************************************************************
void puts0(void)
{
for(TxCharNum = 0; TxCharNum < TxStrLen; TxCharNum++){
UDR0 = TxCharBuf[TxCharNum];
while(!(UCSR0A & (1 << TXC0))) ;
UCSR0A |= (1 << TXC0);
}
//UDR0 = 0x0d;
//while(!(UCSR0A & (1 << TXC0))) ;
//UCSR0A |= (1 << TXC0);
}
//***********************************************************************
// USART0中断接收字符串
//***********************************************************************
#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
void uart0_rx_isr(void)
{
RxCharBuf[RxBufWr] = UDR0; //从数据缓冲器中接收数据
RxBufWr++;
RxBufWr &= 0x0f; //16->0
}
//************************************************************UART1 WIFI_ESP8266*********************************************************************
//***************************************************************************************************************************************************
// 串口1初始化接口函数
// 初始化uart,查询方式读写
//***********************************************************************
void UART1_Init(void)
{
UCSR1B = 0x00; //disable while setting baud rate
UCSR1C = 0x06;
UCSR1A = 0x00;
UBRR1H = baud_h; //写波特率的值
UBRR1L = baud_l;
UCSR1B = (1 << RXEN1) | (1 << TXEN1) | (1 << RXCIE1); //发送接收使能、接收结束中断使能
RxBufWr_wifi = 0;
RxBufRd_wifi = 0;
}
//***********************************************************************
// USART1发送字符串数据
//***********************************************************************
void puts1(void)
{
for(TxCharNum_wifi = 0; TxCharNum_wifi < TxStrLen_wifi; TxCharNum_wifi++){
UDR1 = TxCharBuf_wifi[TxCharNum_wifi];
while(!(UCSR1A & (1 << TXC1))) ; //等待发送完成
UCSR1A |= (1 << TXC1); //发送完成标志置位
}
UDR1 = 0x0d;
while(!(UCSR1A & (1 << TXC1))) ;
UCSR1A |= (1 << TXC1);
}
//***********************************************************************
// USART1中断接收字符串
//***********************************************************************
#pragma interrupt_handler uart1_rx_isr:iv_USART1_RXC
void uart1_rx_isr(void)
{
RxCharBuf_wifi[RxBufWr_wifi] = UDR1; //从数据缓冲器中接收数据
RxBufWr_wifi++;
RxBufWr_wifi &= 0x0f; //16->0
}