📄 uart0.c
字号:
//UART0.c
//uart0 相关程序
#include "mytype.h"
#include "config.h"
#include<ds89c4xx.h>
//extern uint8 xdata *pt;
//uint8 sending;
uint8 code HexTable[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
void UartInit0(void) //8位数据位,1位停止位,无校验,波特率uartbuadrate
{
//EA = 0;
TMOD &= 0x0F;
TMOD |= 0x20; //定时器1工作在模式2
SCON0 = 0x50; //串口工作在方式1
PCON |= 0x80; //smod = 1;
TH1 = 256 - ((fosc/12)/16)/uart0baudrate; //根据波特率计算定时器初值
TL1 = 256 - ((fosc/12)/16)/uart0baudrate;
ES0=0; //串行中断允许=0
TR1=1; //启动定时器1
TI_0 = 0; //
RI_0 = 0;
REN_0=1; //允许接收
//IP1 = 0x50;
//IP0 = 0x40; //PORT1优先级3,PORT0优先级2
//EA=1; //允许中断
}
void PutChar0(uint8 send) //发送一个字节的数据
{
SBUF0 = send;
while(0 == TI_0) ;
TI_0 = 0; //TI_0 = 1,发送完成,再清0
}
void PutString0(uint8 *psend, uint8 idata length) //发送字符串,以字符串长度或'\0'结束
{
while(length--)
{
PutChar0(*psend);
psend++;
if(*psend == '\0')
return;
}
}
void PutUint320(uint32 idata send,uint8 idata shuzhi) //将32位的无符号数通过UART发送
{
uint8 idata buffer[10];
int8 idata i;
for(i=9;i>=0;i--)
{
buffer[i] = send%shuzhi + '0'; //转换成ASCII码
send = send/shuzhi;
}
for(i=0;i<=9;i++)
{
if(buffer[i] != '0')
break;
}
if(10 == i)
i = 9; //如果传入为0,则至少显示一个0
for( ;i<=9;i++)
{
PutChar0(buffer[i]);
}
}
void PutHex0(uint8 idata send) //将8位无符号数转换成16进制后发送
{
PutChar0('0');
PutChar0('x');
PutChar0(HexTable[(send >> 4)]);
PutChar0(HexTable[(send & 0x0f)]);
PutChar0(' ');
}
/*void PutHex16bit0(uint16 send)
{
PutChar0('0');
PutChar0('x');
PutChar0(HexTable[(send >> 12)]);
PutChar0(HexTable[((send >> 8) & 0x0f)]);
PutChar0(HexTable[((uint8)send) >> 4]);
PutChar0(HexTable[(uint8)send & 0x0f]);
PutChar0(' ');
} */
void NextLine0(void) //换行
{
PutChar0(0x0d);
PutChar0(0x0a);
}
void UART0_ISR(void) interrupt 4 //uart 中断程序
{
//uint8 temp;
if(RI_0 == 1) //收到数据
{
RI_0 = 0; //清中断请求
//temp = SBUF0;
}
else //发送完一字节数据
{
TI_0 = 0;
//sending = 0; //清发送标志
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -