⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bit9_slave.c

📁 C8051F0401单片机功能齐全
💻 C
字号:
//////////////UART1 9bit从机程序/////////////////
/////////////多机通讯模式////////////////////
/////////////bit9_slave.c//////////////////////
#include <C8051F040.h>	// Register definition file.
#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]={0x31,0x32,0x33,0x34,0x35,0x36};
xdata uchar res[aalen];
xdata uchar k;
xdata uchar t;
bit isfirstdata;
xdata uchar slave_adr;
void delay1ms(uint time);
void uart1_ini();
void t1_ini();
void t1_baud(uchar t1h);
void config (void) ;
void uart1_ini(){
    SFRPAGE = 0x01;    
    SCON1 = 0xf0;       // 工作在9bit模式,接收使能,并使MCE1置1
 	SCON1 &= 0xFC; 	//清中断标志
    EIE2 |= 0x40;        //开启UART1中断
    t1_ini();
 }
void t1_ini(){
    SFRPAGE = 0x00;
    CKCON = 0x10;   // T1采用系统时钟,不分频
    TMOD = 0x20;    // T1为8bit自动重载模式
    TCON = 0x40;    // TR1置1,启动定时器
}
void t1_baud(uchar val){//T1溢出率设置,溢出率为(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 交叉开关配置使能,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;	
    //采用内部晶振,为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;
	slave_adr=0xcc;
	while(1);
}
void uart1_ISR() interrupt 20{
	SFRPAGE=0x01;
	if(RI1){
		if(RB81){
			if(SBUF1==slave_adr)//地址匹配,将MCE1清零,以便能接收数据
				MCE1=0;
				t=0;
		}
		else{
			res[t]=SBUF1;
			t++;
			if(t>=aalen)
				MCE1=1;//使之在下一轮中能检查地址是否匹配
			}
		RI1=0;
	}
	if(TI1){//暂时不做任何发送
		TI1=0;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -