📄 main.c
字号:
/////////////////////////////////////
// Generated Initialization File //
/////////////////////////////////////
//F320和AT89C52之间的串口通信
//发送和接受中的延迟不要更改!
//波特率不要更改!
//编程日期:2006.9.22-2006.9.24,作者:唐元广
#include "c8051f320.h"
#include <stddef.h>
#include "USB_API.h"
unsigned char b = 0;
unsigned int DelayA;
unsigned int DelayB;
unsigned char RXD;
unsigned char TXD;
unsigned char i;
BYTE Out_Packet[8] = {0,0,0,0,0,0,0,0}; // 上次从主机收到的数据包
BYTE In_Packet[8] = {0,0,0,0,0,0,0,0};
BYTE UART_Out[5] = {0,0,0,0,0}; // 从串口传送出去的数据包
BYTE UART_In[5] = {0,0,0,0,0}; // 从串口传入的数据包;依次为通讯标志位、符号位、高字节、低字节、ODH;
void Timer_Init(void);
void UART_Init(void);
void Port_IO_Init(void);
void Oscillator_Init(void);
void Interrupts_Init(void);
void Init_Device(void);
void TXD_SUB(void);
void RXD_SUB(void);
void UART_ISR(void);
void main(void)
{
PCA0MD &= ~0x40; // 关闭看门狗
Init_Device();
while (1)
{
TXD=0x01;
TXD_SUB();
TXD=0x0d;
TXD_SUB();
}
}
//波特率为7500
void Timer_Init()
{
TCON = 0x40;
TMOD = 0x20;
CKCON = 0x01;
TH1 = 0x9C;
}
void UART_Init()
{
SCON0 = 0x10;
}
void Port_IO_Init()
{
XBR0 = 0x01;
XBR1 = 0x40;
}
void Oscillator_Init()
{
OSCICN = 0x82;
}
//允许中断,允许串口中断;
void Interrupts_Init()
{
IE = 0x90;
}
// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
Timer_Init();
UART_Init();
Port_IO_Init();
Oscillator_Init();
Interrupts_Init();
}
//串口中断子程序
//此处的延时是对串口接受的响应延时,不可改变
void UART_ISR(void) interrupt 4
{
IE =0x00; //禁止中断
i=0;
if (TI0==1)
goto UART_OUT;
do
{
UART_In[i]=SBUF0;
RI0=0;
for(DelayB=0;DelayB<800;DelayB++);
if (UART_In[i]==0x0d)
goto UART_OUT;
i++;
}
while(RI0==1);
UART_OUT:TI0=0;
RI0=0;
IE=0x90;
}
//串口发送一个字节子程序
//此处的延时涉及到89C52的接受,不可改变
void TXD_SUB()
{
SBUF0=TXD;
for(DelayB=0;DelayB<1000;DelayB++);
}
#pragma asm;
nop;
nop;
nop;
#pragma endasm;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -