|
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define MAIN_Fosc 11059200
typedef unsigned int INT16U;
//sbit INT0 = P3^2;//0中斷
uchar p0Count ,Flag ,sortFlag;
uchar allValue[33],value[4];
//void delayMS(INT16U TIME){
// uchar i;
// do{
// i=MAIN_Fosc /96000;
// while(i--);
// }while(TIME--);
//}
void sort(){
uchar i,j;
for(i=0;i<4;i++)
for(j=1;j<=8;j++){
if(allValue[i*8+j]>5) value[ i] |= 0x80;
if(j<=7) value[ i]>>=1;
}
sortFlag=1;
}
void initP(){
EA=1;
EX0=1;
IT0=1;
ET0=1;
TR0=1;
TMOD|=0x02;
TH0=0;TL0=0;
//ES=1;
SM1=1;
TR1=1;
TMOD|=0x20;
TH1=0xFD; TL1=0xFD;
// TMOD |= 0x02;//設置定時器0工作模式2,8位自動重裝
// TL0 = TH0 = 0;//初始化定時器0寄存器,定時器0溢出一次時間為256個機器周期
// EA = 1;//開總中斷
// ET0 = 1;//開定時器0中斷
// TR0 = 1;//啟動定時器0
//
// IT0 = 1;//設置外部中斷0跳變沿觸發方式
// EX0 = 1;//開外部中斷0中斷
//
// TMOD |= 0x20;//設置定時器1工作模式2 ,8位自動重裝
// TL1 = TH1 = 0xfd;//比特率9600
// SM1 = 1;//設置串口工作模式1,10位異步收發
// TR1= 1; //啟動定時器1
}
void matchLed(uchar led){
switch(led){
case 0x16: P1=0; P1=0x01; break;
case 0x0C: P1=0; P1=0x02; break;
case 0x18: P1=0; P1=0x04; break;
case 0x5E: P1=0; P1=0x08; break;
case 0x08: P1=0; P1=0x10; break;
}
}
void main(){
uchar i;
initP();
while(1){
if(Flag){
sort();
if(sortFlag){
for(i=0;i<4;i++){
SBUF=value[ i];
while(!TI); //中斷發送
TI=0;
}
matchLed(value[2]);
sortFlag=0;
}
Flag=0;
}
}
}
void interP0() interrupt 0{
static bit flag ;
static uchar indexflag;
if(flag){
if((p0Count>=32) ) indexflag=0;
allValue[indexflag]=p0Count;
indexflag++;
p0Count=0;
if(indexflag==33){
Flag=1;
indexflag=0;
}
}
else{
p0Count=0;
flag=1;
}
}
void interP1() interrupt 1{
p0Count++;
} |
|