#include "SH88F516.h"
#include <stdio.h> /* prototype declarations for I/O functions */
#define UART0_TEST 0
void uart0_test(void);
void uart0_init(void)
{
CLKCON = 0x00; //时钟设置
T2MOD =0X80;
// Y = 65536 - (X /BPS) ; X = (16600000/32) = 518750;
// RCAP2H=TH2=0xED;RCAP2L=TL2=0x94; // 110 : 0xED94 ERR
// RCAP2H=TH2=0xF9;RCAP2L=TL2=0x3F; // 300 : 0xF93F OK
// RCAP2H=TH2=0xFC;RCAP2L=TL2=0x9F; // 600 : 0xFC9F OK
// RCAP2H=TH2=0xFE;RCAP2L=TL2=0x50; // 1200 : 0xFE50 OK
// RCAP2H=TH2=0xFF;RCAP2L=TL2=0x28; // 2400 : 0xFF28 OK
// RCAP2H=TH2=0xFF;RCAP2L=TL2=0x94; // 4800 : 0xFF94 OK
RCAP2H=TH2=0xFF;RCAP2L=TL2=0xCA; // 9600 : 0xFFCA OK
// RCAP2H=TH2=0xFF;RCAP2L=TL2=0xDC; // 14400 : 0xFFDC OK
// RCAP2H=TH2=0xFF;RCAP2L=TL2=0xE5; // 19200 : 0xFFE5 OK
// RCAP2H=TH2=0xFF;RCAP2L=TL2=0xF3; // 38400 : 0xFFF3 OK
// RCAP2H=TH2=0xFF;RCAP2L=TL2=0xF7; // 56000 : 0xFFF7 OK
// RCAP2H=TH2=0xFF;RCAP2L=TL2=0xF7; // 57600 : 0xFFF7 OK
// RCAP2H=TH2=0xFF;RCAP2L=TL2=0xFC; //115200 : 0xFFFC ERR
// RCAP2H=TH2=0xFF;RCAP2L=TL2=0xFC; //128000 : 0xFFFC OK
// RCAP2H=TH2=0xFF;RCAP2L=TL2=0xFE; //256000 : 0xFFFE ERR
T2CON=0x34; //定时器2产生接收和发送波特率,开启定时器,工作在定时器方式,自动重装载
SCON=0x50; //SM0 SM1 SM2 REN TB8 RB8 TI RI
}
#if 0
char putchar(char c)
{
SBUF=c; //发送一个字节
while(!TI); //等待TI置1
TI=0; //清除TI
return c;
}
char getchar(void)
{
while(!RI);
RI = 0;
return SBUF;
}
void uart0_test(void)
{
while(getchar()!=0x30);
while(1){putchar(0x55);}
}
#endif
#if UART0_TEST
void uart0_test(void)
{
char a;
while(1)
{
scanf("%c", &a);
if(a=='0') break;
}
while(1){printf("%2x",(int)0x55);}
}
#endif |