基于AT89S52单片机实现PL2302串口转USB串口连接的代码,在Keil 4上实现
时间: 2023-06-15 15:06:12 浏览: 44
由于AT89S52单片机没有USB接口,因此无法直接连接到计算机。但可以通过PL2303芯片实现串口转USB串口连接,从而实现单片机和计算机的通信。下面是基于AT89S52单片机和PL2303芯片实现串口转USB串口连接的代码:
```c
#include <REG52.H>
#include <intrins.h>
#define FOSC 22118400L
#define BAUD 9600
#define TIMER_1_MS (65536 - FOSC / 1000 / 12)
sbit TX = P3^1;
sbit RX = P3^0;
void InitUart()
{
TMOD = 0x20;
TH1 = 256 - FOSC / 12 / BAUD;
TL1 = TH1;
PCON = 0x00;
SCON = 0x50;
TR1 = 1;
}
void SendUart(unsigned char dat)
{
SBUF = dat;
while(TI == 0);
TI = 0;
}
void SendString(char *s)
{
while(*s)
{
SendUart(*s++);
}
}
void InitTimer()
{
TMOD &= 0xF0;
TMOD |= 0x01;
TH0 = 0;
TL0 = 0;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void Delay1ms() // 延时1ms
{
unsigned char i, j;
i = 12;
j = 169;
do
{
while(--j);
} while(--i);
}
void main()
{
unsigned char i, j;
unsigned char buf[32];
unsigned char len;
InitUart();
InitTimer();
while(1)
{
len = 0;
while(RI)
{
buf[len++] = SBUF;
RI = 0;
if(len == 32)
{
break;
}
}
if(len > 0)
{
for(i = 0; i < len; i++)
{
SendUart(buf[i]);
}
}
Delay1ms();
}
}
void Timer0Interrupt() interrupt 1
{
TH0 = TIMER_1_MS / 256;
TL0 = TIMER_1_MS % 256;
}
```
在代码中,使用了PL2303芯片将单片机的串口信号转换为USB信号,从而实现了单片机和计算机的通信。同时,使用定时器实现了1ms的延时。