//程序:ex6_5.c
//功能:乙機接收程序,采用中斷方式實現
#include<reg51.h> //包含頭文件reg51.h,定義51單片機的專用寄存器
code unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//定義0~9共陽極顯示字型碼
unsigned char buffer[]={0x00,0x00,0x00,0x00,0x00,0x00};//定義接收數據緩沖區
unsigned char i; //定義全局變量i
//函數名:disp
//函數功能:在6個LED上顯示buffer中的6個數
//入口參數:無
//出口參數:無
void disp()
{
unsigned char w,i,j;
w=0x01; //位碼賦初值
for(i=0;i<6;i++)
{
P1=tab[buffer[i]]; // 送共陽極顯示字型段碼,buffer[i]作為數組分量的下標
P2=~w; // 送反相后的位碼
for(j=0;j<100;j++);// 顯示延時
w<<=1; // w左移一位
}
}
void main() //主函數
{
TMOD=0x20; //定時器T1工作于方式2
TL1=0xf4; //波特率定義
TH1=0xf4;
TR1=1;
SCON=0x40; //定義串行口工作于方式1
REN=1; //接收允許
ES=1; //開串行口中斷
EA=1; //開總中斷允許位
i=0;
while(1)disp();
}
//函數名:serial
//函數功能:串行口中斷接收數據
//形式參數:無
//返回值:無
void serial()interrupt 4 //串口中斷類型號為4
{
EA=0; //關中斷
RI=0; //軟件清除中斷標志位
buffer[i]=SBUF; //接收數據
i++;
if(i==6)i=0;
EA=1; //開中斷允許位
} |