?? wrs485r.#1
字號(hào):
//文件名: WRS485R.c 程序用UART1外擴(kuò)MAX485實(shí)現(xiàn)RS-485通信,運(yùn)行前將TX1和P00 短//接,RX1和P01短接,當(dāng)接收到一個(gè)數(shù)據(jù)后,再將接收到的數(shù)據(jù)送出。
#include <c8051f020.h> /*SFR定義*/
#include <intrins.h>
#define SYSCLK 11059200 /*系統(tǒng)頻率*/
#define BAUDRATE 9600 /*波特率*/
sbit BUZ = P3^5;
sbit P32 = P3^2; /*接收/發(fā)送控制*/
void SYSCLK_Init (void);
void PORT_Init (void);
void UART1_Init (void);
void UART1_ISR (void);
void LCD_Init(void);
bit ReceiveBit;
unsigned char temp;
float FFF;
int ff;
/*延時(shí)子程序*/
void delay(unsigned int m)
{
unsigned int n;
n=0;
while(n < m)
{n++;}
return;
}
void main (void) {
WDTCN = 0xde; /*關(guān)看門狗*/
WDTCN = 0xad;
ReceiveBit=0;
SYSCLK_Init (); /*初始化系統(tǒng)時(shí)鐘*/
PORT_Init (); /*初始化I/O口*/
LCD_Init();
UART1_Init (); /*初始化UART1*/
EA = 1; /*開總中斷*/
EIE2 |= 0x40; /*UART1中斷*/
P32 = 0; /*接收模式*/
P7 = 0x52; /*顯示R>*/
P6 = 0x0c;
P6 = 0x0d;
delay(300); /*延時(shí)*/
P7 = 0x3e;
P6 = 0x0c;
P6 = 0x0d;
while(1){
while (ReceiveBit==1) { /*接收到一個(gè)數(shù)據(jù)*/
ReceiveBit=0; /*清接收位*/
if(temp==0)break; /*如果接收的是空則不顯示*/
P7 = temp; /*顯示接收字符*/
P6 = 0x0c;
P6 = 0x0d;
}
nop ();
}
}
void SYSCLK_Init (void)
{
int i; /*延時(shí)計(jì)數(shù)器*/
OSCXCN = 0x67; /*開始外部22.1184MHz晶體*/
for (i=0; i < 256; i++) ; /*等待外部晶體起振穩(wěn)定*/
while (!(OSCXCN & 0x80)) ; /*查詢標(biāo)志位*/
OSCICN = 0x88; /*用外部晶體頻率作為系統(tǒng)時(shí)鐘,并使能時(shí)鐘丟失檢測*/
}
void PORT_Init (void)
{
XBR2 |= 0x44; /*使能UART1和交叉開關(guān),弱上拉*/
P0MDOUT |= 0x01; /*使能TX1推挽輸出*/
P3MDOUT |= 0x20; /*P3.5驅(qū)動(dòng)蜂鳴器*/
P74OUT = 0xff;
}
void UART1_Init (void)
{
SCON1 = 0x50; /*SCON1:模式1, 8-bitUART,使能RX*/
TMOD = 0x20; /*TMOD: 定時(shí)器1,定時(shí)器2, 8位重載*/
//TH1=0xb8; /*設(shè)置定時(shí)器1作為波特率的重載值*/
TH1=-(SYSCLK/BAUDRATE/16);
TR1 = 1; /*開定時(shí)器1*/
CKCON |= 0x10; /*定時(shí)器1用系統(tǒng)時(shí)鐘作為時(shí)基*/
PCON |= 0x10; /*SMOD1 = 1,波特率加倍*/
//EIE2 |= 0x40; /*使能UART1中斷*/
}
void UART1_ISR (void) interrupt 20 using 3
{
if((SCON1 & 0x01)==0x01)
{
SCON1 &= ~0x01; /*請接收標(biāo)志位*/
temp = SBUF1; /*保存接收數(shù)據(jù)*/
ReceiveBit=1; /*置接收位*/
}
SCON1 &= ~0x02; /*清發(fā)送標(biāo)志位*/
}
void LCD_Init(void)
{
unsigned int x;
P6 = 0x09;
for(x=0;x<50000;x++);
//P7 = 0x30; /*一行顯示*/
P7 = 0x38; /*兩行顯示*/
P6 = 0x08;
P6 = 0x09;
for(x=0;x<1000;x++);
P7 = 0x0e; /*開顯示,開光標(biāo),字符不閃爍*/
P6 = 0x08;
P6 = 0x09;
for(x=0;x<1000;x++);
P7= 0x06; /*I/D=1,AC自動(dòng)增1;S=0,整體顯示不移動(dòng)*/
P6 = 0x08;
P6 = 0x09;
for(x=0;x<5000;x++);
P7 = 0x01; /*清除DDRAM,置AC=0*/
P6 = 0x08;
P6 = 0x09;
for(x=0;x<5000;x++);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -