|
1、串口以查詢方式接收數(shù)據(jù),并分別將數(shù)據(jù)顯示的PB口和返回。
2、內(nèi)部1 M晶振,程序采用單任務(wù)方式,軟件延時(shí)。
3、進(jìn)行此實(shí)驗(yàn)請(qǐng)插上JP1的所有8個(gè)短路塊,JP7(LED_EN)短路塊。
4、通過此實(shí)驗(yàn),可以對(duì)串口通信有個(gè)初步認(rèn)識(shí)。
5、從JATG上拔下線,連載COM1口上,也就是AVRISP 的COM2口邊上那個(gè),具體可看說明書
AVR mega16學(xué)習(xí)板
*/
#include "iom16v.h"
#include "macros.h"
/*串口初始化函數(shù)*/
void Uart_Init(void) {
UCSRA = 0x02; /*倍速*/
UCSRB = 0x18; /*允許接收和發(fā)送*/
UCSRC = 0x06; /*8位數(shù)據(jù)*/
UBRRH = 0x00;
UBRRL = 12; /*9600*/
}
/*數(shù)據(jù)發(fā)送,查詢方式*/
void Uart_Transmit(unsigned char i) {
while (!(UCSRA & (1<<UDRE))); /* 等待發(fā)送緩沖器為空*/
UDR = i; /* 發(fā)送數(shù)據(jù)*/
//while(!(USR&0x20));
/* start transmittion many datas */
while(!(UCSRA&0x40));/*判斷TXC是否發(fā)完*/
UCSRA|=0x40;//關(guān)TXC
}
/*數(shù)據(jù)接收,查詢方式*/
unsigned char Uart_Receive( void ) {
while (!(UCSRA & (1<<RXC))); /* 等待接收數(shù)據(jù)*/
return UDR; /* 獲取并返回?cái)?shù)據(jù)*/
}
/*延時(shí)函數(shù)*/
void delay_ms(unsigned char i) {
unsigned char a, b;
for (a = 1; a < i; a++) {
for (b = 1; b; b++) {
;
}
}
}
/*主函數(shù)*/
void main(void) {
unsigned char temp;
DDRA = 0x00; /*方向輸入*/
PORTA = 0xFF; /*打開上拉*/
DDRB = 0xFF; /*方向輸出*/
PORTB = 0xFF; /*電平設(shè)置*/
DDRC = 0x00;
PORTC = 0xFF;
DDRD = 0x02;
PORTD = 0xFF;
Uart_Init();
SEI(); //允許全局中斷
while(1) {
temp = Uart_Receive(); /*等待接收數(shù)據(jù)*/
if (temp== 0x6E ) // n
{PORTB = 0xfe; } /*顯示低電平有效*/
if (temp== 0x66) //f 利用scomv21串口助手 發(fā)送f 后得到十六進(jìn)制數(shù)0x66
{PORTB = 0xff;}
if (temp== 0x65 ) // e
{PORTB = 0xfd; } /*顯示低電平有效*/
Uart_Transmit(temp); /*發(fā)送收到的數(shù)據(jù)*/
}
}
|
|