?? wuart0.c
字號(hào):
//參考程序B: WUART0.C此程序用UART0實(shí)現(xiàn)RS-232通信,運(yùn)行前將TX0和P0.0 短接,
//RXD 和P0.1短接,當(dāng)接收到一個(gè)數(shù)據(jù)后,再將接收到的數(shù)據(jù)送出。
#include <c8051f020.h> /*SFR定義*/
#include <intrins.h>
#define BAUDRATE 9600 /*UART0的波特率*/
#define SYSCLK 11059200 /*系統(tǒng)時(shí)鐘頻率*/
sbit BUZ = P3^5; /*P3.5=0,響蜂鳴器*/
void SYSCLK_Init (void); /*時(shí)鐘系統(tǒng)初始化*/
void PORT_Init (void); /*I/O口初始化*/
void UART0_Init (void); /*串口中斷0初始化*/
bit ReceiveBit; /*接收標(biāo)志位*/
unsigned char temp;
/*延時(shí)子程序*/
void delay(unsigned int m)
{
unsigned int n;
n=0;
while(n < m)
{n++;}
return;
}
void main(void)
{
unsigned char i;
WDTCN = 0xde; /*關(guān)看門狗*/
WDTCN = 0xad;
ReceiveBit=0;
SYSCLK_Init (); /*初始化系統(tǒng)時(shí)鐘*/
PORT_Init (); /*初始掛交叉開關(guān)和I/O口*/
UART0_Init (); /*初始化UART0*/
EA=1;
ES0=1;
while(1){
while (ReceiveBit==1) { /*是否接收到一個(gè)數(shù)據(jù)*/
ES0=0; /*關(guān)串口中斷0*/
EA=0; /*關(guān)總中斷*/
ReceiveBit=0; /*清接收標(biāo)志位*/
delay(60000); /*延時(shí)*/
delay(60000);
delay(60000);
SBUF0=temp; /*將接收到數(shù)據(jù)送出*/
while(TI0==0); /*發(fā)送標(biāo)志位是否產(chǎn)生*/
TI0=0; /*清發(fā)送標(biāo)志位*/
BUZ=0; /*蜂鳴器響*/
for(i=0; i<3; i++) /*延時(shí)*/
{
delay(60000);
}
BUZ=1; /*蜂鳴器滅*/
ES0=1; /*開中斷標(biāo)志*/
EA=1;
}
_nop_();
}
}
void SYSCLK_Init (void) /*時(shí)鐘系統(tǒng)初始化*/
{
int i; /*延時(shí)計(jì)數(shù)器*/
OSCXCN = 0x67; /*打開外部晶體振蕩器(11.0592MHZ)*/
for (i=0; i < 256; i++) ; /*延時(shí)*/
while (!(OSCXCN & 0x80)) ; /*查詢外部晶體是否穩(wěn)定起振*/
OSCICN = 0x88; /*用外部晶體作為系統(tǒng)時(shí)鐘,并使能時(shí)鐘丟失檢測(cè)*/
}
void PORT_Init (void) /*I/O口初始化*/
{
XBR0 = 0x04; /*使能UART0*/
XBR1 = 0x00;
XBR2 = 0x40; /*使能交叉開關(guān)和弱上拉*/
P0MDOUT |= 0x01; /*使能TX0作為推挽輸出*/
}
void UART0_Init (void)
{
SCON0 = 0x50; /*SCON0:模式1,8位UART,時(shí)能RX*/
TMOD = 0x20; /*TMOD: 定時(shí)器工作再模式2, 8位重載*/
TH1=-(SYSCLK/BAUDRATE/16); /*設(shè)置定時(shí)1用作波特率的重載值,TH1=B8H*/
TR1 = 1; /*開定時(shí)器1*/
CKCON |= 0x10; /*定時(shí)器1用系統(tǒng)時(shí)鐘作為它的時(shí)基*/
PCON |= 0x80; /*SMOD00 = 1(波特率加倍)*/
}
/*串口中斷0子程序*/
void UART0_ISR (void) interrupt 4
{
if(!TI0) //是發(fā)送中斷還是接收中斷
{
RI0 = 0; /*清接收標(biāo)志位*/
temp =SBUF0; /*保存接收到的數(shù)據(jù)*/
ReceiveBit=1; /*置接收標(biāo)志*/
}
TI0 = 0; /*清發(fā)送標(biāo)志位*/
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -