⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 C8051F320和89c52的串口通讯程序
💻 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 + -