//程序: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; //开中断允许位
} |