一、串口1接線圖
1、下面是單片機外接電路圖,P30,P31分別用于RXD和TXD功能引腳
2、我們來查看單片機手冊
串口1需要設置的寄存器
串口1的功能腳配置選擇位,看電路圖選擇的是P3.0,P3.1。
3、串口1:SCON控制寄存器
設置為0x50:0101 0000。(SCON=0x50)
4、數據寄存器
5、電源管理寄存器
6、輔助寄存器1使用
AUXR |= 0x01;//串口1選擇定時器2為波特率發生器
AUXR |= 0x04;//定時器2時鐘為Fosc,即1T
AUXR |= 0x10;//啟動定時器2
7、串口波特率的計算公式
定時器2重載值:65536-35000000/(4 * 115200) = 0xFFB4。
7、定時器2的設置
特別注意在使用串口時,這個需要設置為35.0MHZ。否則串口調試助手不能正常顯示。
二、串口1代碼
#include "uart.h"
#include "delay.h"
void Uart_Init()
{SCON = 0x50;//模式1 8位數據 可變波特率AUXR |= 0x01;AUXR |= 0x04;T2H = 0xFF;T2L = 0xB4;AUXR |= 0x10;ES = 1;//打開串口中斷EA = 1;
}void Uart_SendByte(unsigned char byte)
{SBUF = byte;
}void Uart_SendDat(unsigned char *dat)
{while(*dat != '\0'){Uart_SendByte(*dat);dat++;Delay_ms(50);}
}
#include "delay.h"//延時1us
void Delay1us()
{unsigned char i;_nop_();_nop_();i = 9;while(--i);
}//延時10us
void Delay10us()
{unsigned char i;_nop_();_nop_();i = 114;while(--i);
}//延時1ms
void Delay1ms()
{unsigned char i,j;_nop_();_nop_();i = 46;j = 113;do{while(--j);}while(--i);
}void Delay_ms(unsigned int ms)
{unsigned int i = 0;for(i = 0;i < ms;i++){Delay1ms();}
}
#include "stc8g.h"
#include "uart.h"
#include "delay.h"sbit LED_R = P0^5;
sbit LED_Y = P0^6;
sbit LED_G = P0^7;unsigned char uartRec;void IO_Init()
{P_SW1= 0x00;//S1_S P3.0 P3.1P0M0 = 0x00;P0M1 = 0x00;P1M0 = 0x00;P1M1 = 0x00;P2M0 = 0x00;P2M1 = 0x00;P3M0 = 0x00;P3M1 = 0x00;P4M0 = 0x00;P4M1 = 0x00;P5M0 = 0x00;P5M1 = 0x00;
}void main()
{IO_Init();Uart_Init();//串口初始化while(1){Uart_SendDat("sdhak");}
}void Uart_Isr() interrupt 4
{if(TI == 1){TI = 0;LED_R = !LED_R;}if(RI == 1){uartRec = SBUF;RI = 0;LED_Y = !LED_Y;SBUF = uartRec;}
}