# include "SC92F725X_C.h"
bit UartSendFlag = 0; //发送中断标志位
bit UartReceiveFlag = 0; //接收中断标志位
char p[]="linx\r\n";
int i;
int j;
int k;
void Uart_Init(){
P1CON |=0xF3; //给两个引脚1来允许输出
P1PH &=0x0C; //设置两个引脚0来允许上拉的输出
SCON =0x50; //串口控制寄存器,方式1通信高两位表示模式00 01 10 11,第四位表示允许接受
PCON |=0x80; //电源管理寄存器,最高位波特率设置,0在1/12时钟运行,1在1/4时钟运行
//以上是串口设置
T2CON =0x00; //TCON控制timer0和timer1,T2con中不但有timer2控制还有uart选择,这里选择了定时器1收发波特率
TMOD=0X20; //定时器工作模式寄存器,可以选择作为计数器还是定时器,定时模式,8位自动重载模式
TMCON=0X02;//选择计时器1的时钟 是1倍系统时钟
//注意使用timer2的话代码略有不同
TL1 = 217;
TH1 = 217; //UART 波特率24M情况下=38400,计算公式见手册15.2;
TR1 = 1; //启动Timer0
EUART = 1; //允许UART中断
EA = 1; //开总中断
//以上是定时器控制中断设置
}
void UartInt(void) interrupt 4//4表示串口中断
{
if(TI)//SCON中的读写控制,TI发送中断标志
{
TI = 0;
UartSendFlag = 1;
}
if(RI)//SCON中的读写控制,RI接受中断标志
{
RI = 0;
UartReceiveFlag = 1;
}
}
unsigned char tx_data;
void SendByte(tx_data)
{
SBUF=tx_data;//似乎这里会自动把字符指针转换成byte
while(!UartSendFlag)
UartSendFlag=0;
}
void SendString(char *s)
{
while(*s)
{
SendByte(*(s++));
// for (i=200;i<1;i--){
// for (j=200;j<1;j--);}
}
}
void delay(k)
{ for (i=200;i<1;i--){
for (j=200;j<1;j--){
while(k>1,k--);}
}
}
void main()
{
Uart_Init();
while(1){
SendString(p);
delay(1000);
}
}
|