|
#include <STC8.H>
#define u8 unsigned char
#define u16 unsigned int
void UART_Init(u16 BaudRate) //串口初使化函數 11.0592Mhz 8A8K單片機
{
u8 TH1_Dat;
switch(BaudRate)
{
case 2400: TH1_Dat=0x70; break;
case 4800: TH1_Dat=0xB8; break;
case 9600: TH1_Dat=0xDC; break;
case 19200: TH1_Dat=0xEE; break;
case 57600: TH1_Dat=0xFA; break;
case 115200: TH1_Dat=0xFD; break;
}
TMOD &= 0x0F; //清除定時器1模式位
TMOD |= 0x20; //定時器工作模式,0x20-工作方式2:8位自動重裝載模式
SCON = 0x50; //串行口工作方式控制寄存器,當前為1
//Bit[7:6],00為工作方式0,01方式1,10方式2,11方式3
PCON |=0x00; //Bit7-波特率倍增位:0-不培增 1-培增
AUXR |= 0x40; //定時器1時鐘為Fosc,即1T
AUXR &= 0xfE; //串口1選擇定時器1為波特率發生器
TH1 = TH1_Dat; //8位自動重裝載定時器模式下,TH1被用作自動重裝載值寄存器
TL1 = TH1_Dat; //TL1為計數寄存器
TR1 = 1; //定時器1開始計數
ET1 = 0; //禁止定時器1中斷
ES = 1; //串口中斷允許位
EA = 1; //打開總中斷
}
void main()
{
UART_Init(115200);
while(1);
}
void Usart() interrupt 4
{
u8 receiveData;
receiveData=SBUF; //出去接收到的數據
RI = 0; //清除接收中斷標志位
SBUF=receiveData; //將接收到的數據放入到發送寄存器
while(!TI); //等待發送數據完成
TI=0; //清除發送完成標志位
}
#include <STC8.H>
#define u8 unsigned char
#define u16 unsigned int
void UART_Init(u16 BaudRate) //串口初使化函數 11.0592Mhz 8A8K單片機
{
u8 TH1_Dat;
switch(BaudRate)
{
case 2400: TH1_Dat=0x70; break;
case 4800: TH1_Dat=0xB8; break;
case 9600: TH1_Dat=0xDC; break;
case 19200: TH1_Dat=0xEE; break;
case 57600: TH1_Dat=0xFA; break;
case 115200: TH1_Dat=0xFD; break;
}
TMOD &= 0x0F; //清除定時器1模式位
TMOD |= 0x20; //定時器工作模式,0x20-工作方式2:8位自動重裝載模式
SCON = 0x50; //串行口工作方式控制寄存器,當前為1
//Bit[7:6],00為工作方式0,01方式1,10方式2,11方式3
PCON |=0x00; //Bit7-波特率倍增位:0-不培增 1-培增
AUXR |= 0x40; //定時器1時鐘為Fosc,即1T
AUXR &= 0xfE; //串口1選擇定時器1為波特率發生器
TH1 = TH1_Dat; //8位自動重裝載定時器模式下,TH1被用作自動重裝載值寄存器
TL1 = TH1_Dat; //TL1為計數寄存器
TR1 = 1; //定時器1開始計數
ET1 = 0; //禁止定時器1中斷
ES = 1; //串口中斷允許位
EA = 1; //打開總中斷
}
void main()
{
UART_Init(115200);
while(1);
}
void Usart() interrupt 4
{
u8 receiveData;
receiveData=SBUF; //出去接收到的數據
RI = 0; //清除接收中斷標志位
SBUF=receiveData; //將接收到的數據放入到發送寄存器
while(!TI); //等待發送數據完成
TI=0; //清除發送完成標志位
}
|
評分
-
查看全部評分
|