4. 程序实例 以下两例分别为T1 T2作为波特率发生器时的设置函数: //Deion: 12M oscillator,Baud rate = 1200 //Author: //Date: void uart_init (void) { /* 串口方式:8位UART,不启用多机通信,波特率不加倍 */ SCON = 0x50; PCON = 0;
/* T1作为波特率发生器 计数源:T(内部晶振) 方式2:auto reload //gate=0: tr1 */ TMOD = 0X22; TL1 = 0xE6; TH1 = 0xE6; TR1 = 1;
/* 允许serial port中断,禁止T1中断 */ IE = 0X90; }
//Deion: 12M oscillator,Baud rate = 1200 //Author: //Date: void uart_init (void) { /* 串口方式:8位UART,不启用多机通信,波特率不加倍 */ SCON = 0x50; PCON = 0;
/* T2作为波特率发生器 计数源:T(内部晶振) Baud rate mode */ TH2 = 0XFE; TL2 = 0XC8; RCAP2H = 0XFE; RCAP2L = 0XC8; T2CON = 0X34;
/* 允许serial port中断,禁止T2中断 */ IE = 0X90; }
下面两例分别为串口接收和发送多个字节的程序,其中接收采用中断形式,发送采用查询方式。注意:在每发送完一个字节,程序都会进进入中断一次。 //串口接收 Unsigned char array[10],* p = array; void uart_service() interrupt 4 { if(RI) { *p++ = SBUF; RI = 0; } } //串口发送单个字节 void sys_byte(unsigned char temp) { // select = 0; //485发送时,75LBC184的发送接受选择口 SBUF = temp; while(TI == 0); TI = 0; // select = 1; } //串口发送多个字节 void sys_bytes(unsigned char * temp,unsigned char length) { // select = 0; //485发送时,75LBC184的发送接受选择口 while(length--) { SBUF = *temp++; while(TI == 0); TI = 0; } // select = 1; }
|