?? main.c
字號(hào):
#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];//串口緩沖區(qū)
unsigned char shead=0; //串口緩沖區(qū)的存儲(chǔ)數(shù)據(jù)位置
unsigned char stail=0; //串口緩沖區(qū)的存讀數(shù)據(jù)位置
void Enable_Int(unsigned char i);
void Disable_Int(unsigned char i);
main(void){
IE=0X40;//禁止所有中斷
EX0=1;//使能外部中斷0
IT0=0;//外部中斷0,電平觸發(fā)。
EA=1; /* 使能中斷 */
XBYTE[BAUD_HPORT]=BAUD_H;//設(shè)置串口波特率分頻的高8位
XBYTE[BAUD_LPORT]=BAUD_L;//設(shè)置串口波特率分頻的低8位,把波特率設(shè)置為19.2Kbps
Enable_Int(0);//使能擴(kuò)展串口發(fā)送中斷
Enable_Int(1);//使能擴(kuò)展串口接收中斷
while(1){
if(stail!=shead){//數(shù)據(jù)緩沖區(qū)不為空
Enable_Int(0);//打開(kāi)發(fā)送中斷
}
}
}
void Enable_Int(unsigned char i){//使能擴(kuò)展中斷i
unsigned char temp;
temp=XBYTE[INT_ENA]; //讀出使能寄存器的狀態(tài)
temp |=1<<i;//要對(duì)應(yīng)的要使能比特寫(xiě)1
XBYTE[INT_ENA]=temp;//把temp值給使能寄存器的
}
void Disable_Int(unsigned char i){//禁止擴(kuò)展中斷i
unsigned char temp;
unsigned char mask;
mask=1<<i;
mask=~mask; //把要屏幕中斷的比特設(shè)置0,其他比特為1
temp=XBYTE[INT_ENA];//讀出使能寄存器的狀態(tài)
temp &=mask;
XBYTE[INT_ENA]=temp;//把使能寄存器相應(yīng)的比特設(shè)置為0
}
void int0() interrupt 0 {//C51外部中斷0的中斷處理函數(shù)
unsigned char stat;
stat=XBYTE[INT_PEND];//讀中斷狀態(tài)
if(stat&0x01){//擴(kuò)展串口發(fā)送中斷
if(stail!=shead){//發(fā)送緩沖區(qū)不為空
XBYTE[SDAT_PORT]=sbuf[stail];//發(fā)送接收到的串口數(shù)據(jù)
stail++; //把讀位置加1
stail %=MAX_SBUF;
}
else{//發(fā)送緩沖區(qū)為空
Disable_Int(0);//禁止擴(kuò)展串口發(fā)送中斷
}
}
if(stat&0x02){//擴(kuò)展串口接收中斷
sbuf[shead]=XBYTE[SDAT_PORT];//讀串口接收數(shù)據(jù)
shead ++; //把寫(xiě)位置加1
shead %=MAX_SBUF;
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -