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

📄 main.c

📁 51单片机C语言常用模块与综合系统设计实例精讲
💻 C
字号:
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#include <./Atmel/at89x52.h>
#include "source.h"
#define MAX_SBUF 10
unsigned char sbuf[MAX_SBUF];//串口缓冲区
unsigned char shead=0; //串口缓冲区的存储数据位置
unsigned char stail=0; //串口缓冲区的存读数据位置
void Enable_Int(unsigned char i);
void Disable_Int(unsigned char i);
main(void){
	IE=0X40;//禁止所有中断
	EX0=1;//使能外部中断0
	IT0=0;//外部中断0,电平触发。
	EA=1;  /* 使能中断 */	
	XBYTE[BAUD_HPORT]=BAUD_H;//设置串口波特率分频的高8位
    XBYTE[BAUD_LPORT]=BAUD_L;//设置串口波特率分频的低8位,把波特率设置为19.2Kbps
	Enable_Int(0);//使能扩展串口发送中断
	Enable_Int(1);//使能扩展串口接收中断
	while(1){
		if(stail!=shead){//数据缓冲区不为空
		  Enable_Int(0);//打开发送中断
        }
	}
}
void Enable_Int(unsigned char i){//使能扩展中断i
	unsigned char temp;
	temp=XBYTE[INT_ENA]; //读出使能寄存器的状态
	temp |=1<<i;//要对应的要使能比特写1
	XBYTE[INT_ENA]=temp;//把temp值给使能寄存器的
}
void Disable_Int(unsigned char i){//禁止扩展中断i
	unsigned char temp;
	unsigned char mask;
	mask=1<<i;
	mask=~mask; //把要屏幕中断的比特设置0,其他比特为1
	temp=XBYTE[INT_ENA];//读出使能寄存器的状态
	temp &=mask;
	XBYTE[INT_ENA]=temp;//把使能寄存器相应的比特设置为0
}
void int0() interrupt 0 {//C51外部中断0的中断处理函数
	unsigned char stat;
	stat=XBYTE[INT_PEND];//读中断状态
	if(stat&0x01){//扩展串口发送中断
	   if(stail!=shead){//发送缓冲区不为空
        XBYTE[SDAT_PORT]=sbuf[stail];//发送接收到的串口数据
        stail++;       //把读位置加1	
        stail %=MAX_SBUF;
       }
       else{//发送缓冲区为空
            Disable_Int(0);//禁止扩展串口发送中断
       }
    }
   	if(stat&0x02){//扩展串口接收中断
   	    sbuf[shead]=XBYTE[SDAT_PORT];//读串口接收数据
   	    shead ++; //把写位置加1	
   	    shead %=MAX_SBUF;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -