📄 main.c
字号:
/*
* IO 模拟 UART
*
* author:金沙滩--刚哥
* date:2011.1.9
*/
#include <reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit RXD2 = P3^0;
sbit TXD2 = P3^1;
#define MCLK 11059200UL
#define BAUD_RATE 9600UL
#define WAIT_TIME() do{while(!TF0);TF0 = 0;}while(0)
/*
* 定时器初始化
*/
void timer0_init(void)
{
TMOD &= 0xF0;
TMOD |= 0x02; //计数器0,方式2
TH0 = 256 - MCLK/(12*BAUD_RATE);
TL0 = TH0;
TF0 = 0;
TR0 = 0;
}
/*
* UART发送
*/
void UART_send_byte(uint8 dat)
{
uint8 len=8;
// 1. start bit
TL0 = TH0;
TR0 = 1;
TXD2 = 0;
WAIT_TIME();
// 2. DAT_LEN bit data
while (len--)
{
TXD2 = (bit)(dat & 0x01); //先发送低位
WAIT_TIME();
dat = dat>>1;
}
// 3. stop bit
TXD2 = 1;
WAIT_TIME();
TR0=0;
}
/*
* UART接收
*/
uint8 UART_rev_byte(void)
{
uint8 len=8, dat=0;
while (RXD2);
// 1. jump start bit
TR0 = 1;
TL0 = 256 - MCLK/(12*BAUD_RATE)/2;
WAIT_TIME();
WAIT_TIME();
// 2. receive DAT_LEN bit data
while (len--)
{
dat >>= 1;
if (RXD2)
dat |= 0x80;
WAIT_TIME();
}
// 3. wait stop bit
WAIT_TIME();
TR0 = 0;
return dat;
}
main()
{
uint8 a;
timer0_init();
while (1)
{
UART_send_byte('i');
UART_send_byte('n');
UART_send_byte('p');
UART_send_byte('u');
UART_send_byte('t');
UART_send_byte(':');
a = UART_rev_byte();
UART_send_byte(a);
UART_send_byte('\r');
UART_send_byte('\n');
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -