?? bit8_master.c
字號:
//////////////UART1 8bit模式主機程序/////////////////
///////////////TX1為P0.0,RX1為P0.1,采用開漏輸出+上拉電阻///////////
/////////////bit8_master.c//////////////////////
#include <C8051F040.h>
#define aalen 6
typedef unsigned char uchar;
typedef unsigned int uint;
sfr16 RCAP2=0xca;
sfr16 RCAP3=0xca;
sfr16 RCAP4=0xca;
sfr16 TMR4=0xcc;
sfr16 TMR3=0xcc;
sfr16 TMR2=0xcc;
sfr16 PCA0CP0=0xfb;
sfr16 PCA0CP1=0xfd;
sfr16 PCA0CP2=0xe9;
sfr16 PCA0CP3=0xeb;
sfr16 PCA0CP4=0xed;
sfr16 PCA0CP5=0xe1;
xdata uchar aa[aalen]={0x51,0x52,0x53,0x54,0x55,0x56};
xdata uchar res[aalen];
xdata uchar k;
xdata uchar t;
bit isfirstdata;
void delay1ms(uint time);
void uart1_ini();
void t1_ini();
void t1_baud(uchar t1h);
void config (void) ;
void uart1_ini(){
SFRPAGE = 0x01;
SCON1 = 0x10; // 工作在8bit模式,接收使能
SCON1 &= 0xFC; //清中斷標(biāo)志
EIE2 |= 0x40; //開啟UART1中斷
t1_ini();
}
void t1_ini(){
SFRPAGE = 0x00;
CKCON = 0x10; // T1采用系統(tǒng)時鐘,不分頻
TMOD = 0x20; // T1為8bit自動重載模式
TCON = 0x40; // TR1置1,啟動定時器
}
void t1_baud(uchar val){//T1溢出率設(shè)置,溢出率為(T1時鐘頻率)/(val)
SFRPAGE = 0x00;
TH1 = ~val+1;
TL1 = TH1;
}
void config (void) {
WDTCN = 0x07; //看門狗禁止
WDTCN = 0xDE;
WDTCN = 0xAD;
SFRPAGE = 0x0F;
XBR0 = 0x00;
XBR1 = 0x00;
XBR2 = 0x44; // Crossbar 交叉開關(guān)配置使能,UART1配置在P0.0-P0.1
XBR3 = 0x00; //
SFRPAGE = 0x0F;
P0MDOUT = 0x00; // TX0和RX0為開漏模式,故宜加上拉電阻
P1MDIN = 0xFF; // Input configuration for P1
SFRPAGE = 0x0F;
CLKSEL = 0x00;
OSCXCN = 0x00;
OSCICN = 0x84;
//采用內(nèi)部晶振,為24.5MHZ8分頻
} //End of config
void main(){
config();
uart1_ini();
t1_ini();
t1_baud(80);//波特率為:3062500/(80×2)=19140,從而波特率約為19200bps
EA=1;
k=0;
t=0;
SFRPAGE=0x00;
TR1=1;
SFRPAGE=0x01;
SBUF1=aa[k];
while(1);
}
void uart1_ISR() interrupt 20{//UART1中斷
if(RI1){
res[t]=SBUF1;//將接收數(shù)據(jù)寫入res[]數(shù)組
t++;
RI1=0;
}
if(TI1){
k++;
if(k<aalen){
SBUF1=aa[k];//發(fā)送數(shù)據(jù)數(shù)組為aa[]
}
TI1=0;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -