|
#include <serial.c> //包含串行处理模块
bit showclocksign;
bit showblocksign;
bit showfensign;
uchar count;
uint second;
uchar paoplace;
uint zongfen;
uchar speed=32;
idata uint free[16]; //定义行首处理空间
unsigned char idata *freep; //定义指向该数组的指针
//****
gotoxy(uchar x,y)
{putbyte(0x1b);putbyte('['
);
putbyte((y%100)/10+0x30);
putbyte((y%10)+0x30);
putbyte(';');
putbyte((x%100)/10+0x30);
putbyte((x%10)+0x30);
putbyte('H');
}
//******************
clrscr()
{gotoxy(0,0); putbyte(0x1b); putstring("[J"); }
//**************
showpao()
{gotoxy(1,16); putbyte(0x1b); putstring("[K");
gotoxy(paoplace,16); putbyte('|');
gotoxy(1,17); putbyte(0x1b); putstring("[K");
gotoxy(paoplace-1,17);
putbyte('/');putbyte('H');putbyte('\\');
gotoxy(0,24);
}
//***************
uint bdata showp;
sbit outblock=showp^15;
showblock() //showblock
{uchar i,j;uint bdata p;
uint st;
gotoxy(0,0);
for(i=15;i!=0;i--)
{putbyte('|');
showp=free[i];
st=0x8000;
for(j=0;j!=16;j++)
{ if ((showp&st)!=0) putbyte('@');
else putbyte(' ');
st>>=1;
//showp=showp>>1;
}
putbyte('|');CR;
}
gotoxy(0,24);
showblocksign=0;
}
//*************
showfen()
{gotoxy(6,19);
//putstring("得分: ");
putint(zongfen,1);
showfensign=0;
//putbyte(' ');
//puthex(free[15]/256); puthex(free[15]%256);
//gotoxy(0,24);
}
//******************************************************
void main(void)
{uchar idata c,i,j;bit k;
uint temp,notype;
serial_init(); // ET0=0;
putstring("\r\nSerial ready!\r\n");
start: ET0=1;clrscr();
putstring("飞机游戏"
"\r\n
"\r\n游戏控制方法:"
"\r\n 操作者不动键盘10秒钟进入演示状态,按'a'或'4'飞机"
"\r\n 左移,按'd'或'6'右移,按's'或'0'发弹,按'-'降低难度,"
"\r\n 按'+'提高难度,按'p'立即进入演示状态。"
"\r\n 按任何键开始游戏。");
while(!inbufsign);
zongfen=0;showblock();showfen();notype=1000;
gotoxy(0,19); //putstring("lever: h-hard e-easy\r\n5-left 6-right 0-shot");
putstring("得分:\r\n级别: +:高 -:低\r\n5:左移 6:右移 0:发射");
gotoxy(7,20);putchar(speed,1);
for(i=0;i!=16;i++)
{free[i]=0;
}
paoplace=9;showpao();
while(1) {
if (showblocksign) showblock();
if (showfensign) showfen();
if (free[0]!=0)
{ET0=0;notype=1000;free[0]=0;gotoxy(0,22);putstring("结束!再玩一遍?(y/n)");
while(getbyte()!='y');goto start;
}
notype--;if(notype==10){notype=1000;goto autoplay;}
delay(100);
if (notype>900) {gotoxy(0,22);putbyte(0x1b); putstring("[K");}
if (inbufsign)
{ c=getbyte();notype=1000;
switch (c)
{case '5': //left move
case 'a':
paoplace--; if (paoplace==1) paoplace=2;
showpao();
break;
case '6': //right move
case 'd':
paoplace++; if (paoplace==18) paoplace=17;
showpao();
break;
case '=':
case '+':
speed--;
if (speed==0)speed=1;
gotoxy(7,20);
putchar(speed,1);
break;
case '_':
case '-':
speed++;
if (speed==255)speed=254;
gotoxy(7,20);
putchar(speed,1);
break;
case 's':
case '0': //shot
for(i=15,j=1;i!=0;i--,j=16-i)
{gotoxy(paoplace,i); putbyte('o');delay(50);
putbyte(8);putbyte(' ');
//free[i]=0xffff;
temp=0x0001<<(17-paoplace);
if((free[j]&temp)!=0)
{free[j]&= (temp^0xffff);zongfen+=10;showfensign=1;break;}
}
break;
case 'y': goto start;
case 'p':
autoplay: gotoxy(0,22);putbyte(0x1b); putstring("[K");putstring("游戏自动演示中。");
ET0=1;speed=20;gotoxy(7,20);putchar(speed,1);
do
{
if (showblocksign) showblock();
if (showfensign) showfen();
for(i=15,j=1;i!=0;i--,j=16-i)
{gotoxy(paoplace,i); putbyte('o');delay(50);
putbyte(8);putbyte(' ');
temp=0x0001<<(17-paoplace);
if((free[j]&temp)!=0)
{free[j] &= (temp^0xffff);zongfen+=10;showfensign=1;goto again;}
}
again:
if (!(((free[5]&temp)!=0)||((free[4]&temp)!=0)))
{if (k) {paoplace--;}
else {paoplace++;}
}
if (paoplace==1){ paoplace=2; k=0;}
if (paoplace==18) {paoplace=17;k=1;}
if (free[0]!=0) //if dead?
{ET0=0;notype=1000;free[0]=0;
//while(getbyte()!='y');goto start;
break;
}
showpao();
}while(!inbufsign);
}
}
}
}
//freep=free;
//putbytes(freep,1);
//getline(freep,1);
uint code *getcode;
//******************
void timer0(void) interrupt 1
{
uchar i;
TH0=31;TL0=00;
//1/32S
count++;
if (count==speed) //11059200
{count=0; //1s
for(i=0;i<16;i++)
{free[i]=free[i+1];
}
free[15]=*getcode;
getcode++;if (getcode==1000) getcode=0;
showblocksign=1;
showclocksign=1;
second++; //1S
if (second==3600) {second=0;showclocksign=1;}
// if (iftimeover) timeovercount++;
//else timeovercount=0;
}
}
//serial.c 代码
//串口中断服务程序,仅需做简单调用即可完成串口输入输出的处理
//出入均设有缓冲区,大小可任意设置。
//可供使用的函数名:
//char getbyte(void);从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。
//putbyte(char c);放入一个字节到发送缓冲区
//putbytes(unsigned char *outplace,j);放一串数据到发送缓冲区,自定义长度
//putstring(unsigned char code *puts);发送一个定义在程序存储区的字符串到串口
//puthex(unsigned char c);发送一个字节的hex码,分成两个字节发。
//putchar(uchar c,uchar j);发送一个字节数据的asc码表达方式,需要定义小数点的位置
//putint(uint ui,uchar j);发送一个整型数据的asc码表达方式,需要定义小数点的位置
//delay(unsigned char d); 延时n x 100ns
//getline(char idata *line, unsigned char n); 获取一行数据回车结束,必须定义最大输入字符数
//CR;发送一个回车换行
//*************************************************************************
#include <w77e58.h>
#define uchar unsigned char
#define uint unsigned int
#define OLEN 10 //size of serial transmission buffer
idata unsigned char outbuf[OLEN]; // storage for transmission buffer
unsigned char idata *outlast=outbuf; //最后由中断传输出去的字节位置
unsigned char idata *putlast=outbuf; //最后放入发送缓冲区的字节位置
#define ILEN 2 //size of serial receiving buffer
idata unsigned char inbuf[ILEN];
unsigned char idata *inlast=inbuf; //最后由中断进入接收缓冲区的字节位置
unsigned char idata *getlast=inbuf; //最后取走的字节位置
bit outbufsign; //输出缓冲区非空标志有=1
bit inbufsign; //接收缓冲区非空标志 有=1
bit inbufful; //输入缓冲区满标志 满=1
#define CR putstring("\r\n") //CR=回车换行
unsigned char code comready[]="com is ready!";
//*****************************
//延时n x 100ns
void delay(unsigned char d) //在源程序开头定义是否用w77e58或22。1184M晶振
{unsigned char j;
do{ d--;
//110592 & 89c52
#ifndef cpuw77e58
#ifndef xtal221184
j=21; //k=38 cpu80320 100us k=21 cpu 8052
#else
j=42;
#endif
#else
#ifndef xtal221184
j=38;
#else
j=76;
#endif
#endif
do {j--;} while(j!=0);
}while(d!=0);
}
//*****************************
//放入一个字节到发送缓冲区
putbyte(char c)
{uchar i,j;
ES=0; //暂停串行中断,以免数据比较时出错?
if (outlast==putlast )
{ i=(0-TH1);
do{i--;j=36; do {j--;}while(j!=0); }while(i!=0); //延时一个字节发送时间
}
*putlast=c; //放字节进入缓冲区
putlast++; //发送缓冲区指针加一
if (putlast==outbuf+OLEN) putlast=outbuf; //指针到了顶部换到底部
if (!outbufsign) {outbufsign=1;TI=1; } //缓冲区开始为空置为有,启动发送
ES=1;
}
//******************************
//放一串数据到发送缓冲区
putbytes(unsigned char *outplace,unsigned char j)
{
int i;
for(i=0;i<j;i++)
{putbyte(*outplace);
outplace++;
}
}
//******************************
putchar(uchar c,uchar j)
{
uchar idata free[4];uchar data i;
i=0;
free[i++]=(c/100+0x30);
if (j==3) free[i++]='.';
free[i++]=(c%100)/10+0x30;
if (j==2) free[i++]='.';
if (j==2 && free[i-3]==0x30) free[i-3]=0x20;
free[i++]=(c%10)+0x30;
if (j==1 && free[i-3]==0x30) free[i-3]=0x20;
if (j==1 && free[i-3]==0x20 && free[i-2]==0x30) free[i-2]=0x20;
putbytes(free,i);
}
//******************************
putint(uint ui,uchar j)
{uchar idata free[6];
uchar data i;
i=0;
free[i++]=(ui/10000+0x30);
if (j==5) free[i++]='.';
free[i++]=((ui%10000)/1000+0x30);
if (j==4) free[i++]='.';
if (j==4 && free[i-3]==0x30) free[i-3]=0x20;
free[i++]=((ui%1000)/100+0x30);
if (j==3) free[i++]='.';
if (j==3 && free[i-4]==0x30) free[i-4]=0x20;
if (j==3 && free[i-4]==0x20 && free[i-3]==0x30) free[i-3]=0x20;
free[i++]=((ui%100)/10+0x30);
if (j==2) free[i++]='.';
if (j==2 && free[i-5]==0x30) free[i-5]=0x20;
if (j==2 && free[i-5]==0x20 && free[i-4]==0x30) free[i-4]=0x20;
if (j==2 && free[i-5]==0x20 && free[i-4]==0x20 && free[i-3]==0x30) free[i-3]=0x20;
free[i++]=(ui%10+0x30);
if (j==1 && free[i-5]==0x30) free[i-5]=0x20;
if (j==1 && free[i-5]==0x20 && free[i-4]==0x30) free[i-4]=0x20;
if (j==1 && free[i-5]==0x20 && free[i-4]==0x20 && free[i-3]==0x30) free[i-3]=0x20;
if (j==1 && free[i-5]==0x20 && free[i-4]==0x20 && free[i-3]==0x20 && free[i-2]==0x30) free[i-2]=0x20;
putbytes(free,i);
}
//***************************************
//发送一个定义在程序存储区的字符串到串口
putstring(unsigned char *puts)
{for (;*puts!=0;puts++) //遇到停止符0结束
putbyte(*puts);
}
//*************************************
//发送一个字节的hex码,分成两个字节发。
unsigned char code hex_[]={"0123456789ABCDEF"};
puthex(unsigned char c)
{int ch;
ch=(c>>4)&0x0f;
putbyte(hex_[ch]);
ch=c&0x0f;
putbyte(hex_[ch]);
}
//*************************************
//从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。
uchar getbyte (void)
{ char idata c ;
while (!inbufsign); //缓冲区空等待
ES=0;
c= *getlast; //取数据
getlast++; //最后取走的数据位置加一
inbufful=0; //输入缓冲区的满标志清零
if (getlast==inbuf+ILEN) getlast=inbuf; //地址到顶部回到底部
if (getlast==inlast) inbufsign=0; //地址相等置接收缓冲区空空标志,再取数前要检该标志
ES=1;
return (c); //取回数据
}
//*****************************************
//接收一行数据,必须定义放数据串的指针位置和大小
del=0x7f,backspace=0x08,cr=0x0d,lf=0x0a
void getline (uchar idata *line, unsigned char n)
{ unsigned char cnt = 0; //定义已接收的长度
char c;
do {
if ((c = getbyte ()) == 0x0d) c = 0x00; //读一个字节,如果是回车换成结束符
if (c == 0x08 || c == 0x7f) //BACKSPACE 和 DEL 的处理
{ if (cnt != 0) //已经输入退掉一个字符
{cnt--; //总数目减一
line--; //指针减一
putbyte (0x08); //屏幕回显的处理
putbyte (' ');
putbyte (0x08);
}
}
else
{
putbyte (*line = c); //其他字符取入,回显
line++; //指针加一
cnt++; //总数目加一
}
}
while (cnt < n - 1 && c != 0x00 && c!=0x1b); //数目到了,回车或ESC停止
*line = 0; //再加上停止符0
}
//****************************
putinbuf(uchar c)
{ES=0; if(!inbufful)
{*inlast= c; //放入数据
inlast++; //最后放入的位置加一
if (inlast==inbuf+ILEN) inlast=inbuf; //地址到顶部回到底部
if (inlast==getlast) inbufful=1; //接收缓冲区满置满标志
inbufsign=1;
}
ES=1;
}
//*****************************************
//串口中断处理
serial () interrupt 4
{
if (TI )
{ TI = 0;
if (outbufsign)
//if (putlast==outlast) outbufsign=0;
//else
{
SBUF=*outlast; //未发送完继续发送
outlast++; //最后传出去的字节位置加一
if (outlast==outbuf+OLEN) outlast=outbuf; //地址到顶部回到底部
if (putlast==outlast) outbufsign=0; //数据发送完置发送缓冲区空标志
}
}
if (RI)
{
RI = 0;
if(!inbufful)
{
*inlast= SBUF; //放入数据
inlast++; //最后放入的位置加一
inbufsign=1;
if (inlast==inbuf+ILEN) inlast=inbuf; //地址到顶部回到底部
if (inlast==getlast) inbufful=1; //接收缓冲区满置满标志
}
}
}
//*****************************
//串口初始化
0xfd=19200,0xfa=9600,0xf4=4800,0xe8=2400,0xd0=1200
serial_init ()
{
SCON = 0x50; // mode 1: 8-bit UART, enable receiver
TMOD |= 0x20; //timer 1 mode 2: 8-Bit reload
PCON |= 0x80; TH1 = 0xfd;//fa, //baud*2 reload value 19200 baud
TR1 = 1; //timer 1 run
ES = 1; REN=1; EA=1; SM2=1; //SM2=1时收到的第9位为1才置位RI标志
TMOD |=0x01; //th1 auto load 2X8,th0 1X16
TH0=31; TL0=0; //X 32 =1S
TR0=1; ET0=1;
}
//*****************
//测试用主函数
void main(void)
{
char c;
idata unsigned char free[16];
unsigned char idata *freep=free;
serial_init();
putstring(crlf);
putstring(comready);
putstring("jdioptuejls;j;klja");
delay(10);
while(1)
{
c=getbyte();
putbyte(0x20);
puthex(c);
switch(c)
{case 'r':
putbytes(inbuf,ILEN);
break;
case 'g':
getline(freep,10);
putbyte(0x20);
putstring(freep);
break;
default:
putbyte(c);
}
}
}
W77E58.H代码
#ifndef true
#define true 1
#define false 0
#endif
#ifndef byte
#define byte unsigned char
#define word unsigned int
#define dword unsigned long
#endif
#define clr_bit(bit_name) bit_name=0
#define set_bit(bit_name) bit_name=1
typedef union
{
word w;
byte bh;
byte bl;
} WordType;
typedef union
{
dword dw;
byte b[4];
word w[2];
} DwordType;
//--BYTE Registers-------------------------------------------------
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
#define p0 P0
#define p1 P1
#define p2 P2
#define p3 P3
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr PCON = 0x87;//PCON.7(SMOD)拨特率加倍,PCON.1(PD)掉电方式,PCON.0(IDL)冻结方式
//PCON.6(SMOD0)帧错检测允许,PCON.3(GF1)PCON.2(GF0)
sfr TCON = 0x88;//定时控制寄存器
sfr TMOD = 0x89;//"gate,c/t,m1,m0"x2定时器方式GATE=1时只有intx=1时才可以开放定时器x;
//c/t =1时计书数方式,=0时定时方式。m1m0=00时13位计数,=01时16位=10时自装入8位,
//11时定时器0分两个,定时器1停止。
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr IE = 0xA8;
sfr IP = 0xB8; //中断优先级
sfr SCON = 0x98; //串口控制与状态
sfr SBUF = 0x99;
//--W77E58 Extensions---------------------------------------------
sfr T2CON = 0xC8;
sfr T2MOD = 0xc9;//HC5,HC4,HC3,HC2,T2CR,-,T2OE,DCEN
//hc5-hc2 =1时外中断5-2标志硬件自动清除。
//t2cr=1 捕获完成时自动复位
//t2oe=1 定时器2输出允许
//dcen=1 减计数允许,结合外部输入t2ex使用,16位自装入模式
sfr RCAP2L= 0xCA;//重装的预置数,捕获的输出
sfr RCAP2H= 0xCB;
sfr TL2 = 0xCC;
sfr TH2 = 0xCD;
sfr DPL1 = 0x84;
sfr DPH1 = 0x85;
sfr DPS = 0x86;
sfr CKCON = 0x8e;//wd1,wd0,t2m,t1m,t0m,md2,md1,md0
//wd1wd0:看门狗计数00=2^17,01=2^20,10=2^23,11=2^26
//t2m,t1m,t0m等于1时时钟4分频
//md2,md1,md0 MOVX执行机器周期000=2,001=3。。。111=9
sfr EXIF = 0x91;//ie5,ie4,ie3,ie2,XT/RG,RGMD,RGSL,-
//ie5,ie3=1外中断下跳变中断标志
//ie4,ie3=2外中断上跳变中断标志
sfr P4 = 0xa5;//低四位有效
sfr SADDR = 0xa9;//从机串口0地址
sfr SADDR1= 0xaa;//从机串口1地址
sfr SADEN = 0xb9;//串口0地址屏蔽,等于0时所有地址都会引起中断
sfr SADEN1= 0xba;//串口0地址屏蔽,等于0时所有地址都会引起中断
sfr SCON1 = 0xc0;
sfr SBUF1 = 0xc1;
sfr ROMMAP= 0xc2;//ROMMAP.7为等待信号使能,用movx指令时,wait脚为p4.0
sfr PMR = 0xc4;//CD1,CD0,SWB,-,XTOFF,ALE-OFF,-DME0
//cd0cd1=0时钟不变,=1-1/4,=2-1/64,=3=1/1024
//swb=1强制4分频,外中断或串口中断唤醒
//aleoff =1时ale信号终止,外部内存访问时自动唤醒
//dme0 =1时内部1kram使能
sfr STATUS= 0xc5;//-,HIP,LIP,XTUP,SPTA1,SPRA1,SPTA0,SPRA0
//hip=1正在处理高优先级中断
//lip=1正在处理低优先级中断
//spta1串口0正在发送数据
//spra1串口0正在接收数据
//spta0串口0正在发送数据
//spra0串口0正在接收数据
sfr TA = 0xc7;//保护位
sfr WDCON = 0xd8;//SMOD_1,POR,-,-,WDIF,WTRF,EWT,RWT
//smod1 加倍串口1的拨特率,pro电源复位标志
//por 电源复位标志
//wdif看门狗定时中断标志,软清
//wtrf看门狗定时器复位标志,看门狗引起复位后,该位置1
//ewt 允许看门狗定时器自动复位
//rwt复位看门狗定时器,如果看门狗溢出还没有被复位计数器,将会引
//起中断,再过512周期将复位
sfr EIE = 0xe8;//-,-,-,EWDI,EX5,EX4,EX3,EX2
//ewdi=1,允许看门狗中断?
//ex5-ex2;外部中断允许
sfr EIP = 0xf8;//-,-,-,pwdi,px5,px4,px3,px2
//pwdi=1 看门狗中断优先
//px5-px2=1 外部中断优先
//--BIT Registers-------------------------------------------------
//PSW
sbit CY = 0xD7;
sbit AC = 0xD6;
sbit F0 = 0xD5;
sbit RS1 = 0xD4;
sbit RS0 = 0xD3;
sbit OV = 0xD2;
sbit P = 0xD0;
//TCON
sbit TF1 = 0x8F; //定时器1溢出标志,自动清零
sbit TR1 = 0x8E; //timer1运行控制位
sbit TF0 = 0x8D; //定时器0溢出标志,自动清零
sbit TR0 = 0x8C; //timer0运行控制位
sbit IE1 = 0x8B; //外中断1跳变中断请求标志,自动清零
sbit IT1 = 0x8A; //中断1跳变检测使能
sbit IE0 = 0x89; //外中断0跳变中断请求标志,自动清零
sbit IT0 = 0x88; //中断0跳变检测使能
//IE
sbit EA = 0xAF;
sbit ES = 0xAC;
sbit ET1 = 0xAB;
sbit EX1 = 0xAA;
sbit ET0 = 0xA9;
sbit EX0 = 0xA8;
//IP
sbit PS = 0xBC; //串口0中断优先设定
sbit PT1 = 0xBB; //定时器1中断优先
sbit PX1 = 0xBA; //外中断1
sbit PT0 = 0xB9; //定时器0中断优先
sbit PX0 = 0xB8; //外中断0
//P3
sbit RD = 0xB7;
sbit WR = 0xB6;
sbit T1 = 0xB5;
sbit T0 = 0xB4;
sbit INT1 = 0xB3;
sbit INT0 = 0xB2;
sbit TXD = 0xB1;
sbit RXD = 0xB0;
//SCON
sbit SM0 = 0x9F; //SM0/FE 串口0方式0选择或帧错标志,人工清零
sbit SM1 = 0x9E; //串口1工作方式选择0-4/12tclk同步,1-10位可设bps异步,2-64/32tclk
//异步,3-11位可变bps异步
sbit SM2 = 0x9D; //允许方式2和3的多机通讯控制位。方式2、3中=1时接收到的
//第9位为0时不启动接收中断ri标志
//方式1中,=1时只有收到有效停止时才启动ri,方式0中=1将拨
//特率提高3倍。
sbit REN = 0x9C; //允许接收标志
sbit TB8 = 0x9B; //方式23中要发送的第9位。
sbit RB8 = 0x9A; //方式23中接收到的第9位。
sbit TI = 0x99; //发送中断标志
sbit RI = 0x98; //接收中断标志
//--W77E58 Extensions--------------------------------------------
// PSW
sbit F1 = 0xd1;
//IE
sbit ET2 = 0xAD; //定时器2允许
sbit ES1 = 0xae; //串口1优先
//IP
sbit PT2 = 0xBD; //定时器2优先
sbit PS1 = 0xbe; //串口1优先
//P1
sbit T2 = 0x90; //计数器2输入端口
sbit T2EX = 0x91; //计数器捕获触发
sbit RXD1 = 0x92; //串口1入
sbit TXD1 = 0x93; //串口2出
sbit INT2 = 0x94; //外中断2,上跳变触发
sbit INT3 = 0x95; //外中断3,下跳变触发
sbit INT4 = 0x96; //外中断4,上跳变触发
sbit INT5 = 0x97; //外中断5,下跳变触发
//T2CON
sbit TF2 = 0xCF; //定时器2溢出标志,软清除
sbit EXF2 = 0xCE; //定时器2外部标志,当exen2=1且t2ex引脚负跳变引起捕获或重载
//时置位,软清。
sbit RCLK = 0xCD; //接收时钟标志,=1时串口0用定时器2溢出做时钟。
sbit TCLK = 0xCC; //发送时钟标志,=1时串口0用定时器2溢出做时钟。
sbit EXEN2 = 0xCB; //定时器2外部允许标志,=1时若未用作拨特率发生器,t2ex脚的负
跳变引起捕获
sbit TR2 = 0xCA; //定时器2运行控制位
sbit C_T2 = 0xC9; //计数/定时选择,=1时计数
sbit CP_RL= 0xC8; //捕获/重载标志,=1时,外部允许时,vt2ex负跳变发生捕获
//=0时 溢出或外部允许时,vt2ex负跳变发生重载
//SCON1
//注释参考SCON
sbit SM0_1 = 0xC7;
sbit SM1_1 = 0xC6;
sbit SM2_1 = 0xC5;
sbit REN_1 = 0xC4;
sbit TB8_1 = 0xC3;
sbit RB8_1 = 0xC2;
sbit TI_1 = 0xC1;
sbit RI_1 = 0xC0;
//WDCON
sbit SMOD_1= 0xDF; //加倍串口1的拨特率,pro电源复位标志
sbit POR = 0xDE; //电源复位标志
sbit WDIF = 0XDB; //看门狗定时中断标志,软清
sbit WTRF = 0xDA; //看门狗定时器复位标志,看门狗引起复位后,该位置1
sbit EWT = 0xD9; //允许看门狗定时器自动复位
sbit RWT = 0xD8; //复位看门狗定时器,如果看门狗溢出还没有被复位计
//数器,将会引起中断,再过512周期将复位
//EIE
sbit EWDI = 0xec; //允许看门狗中断
sbit EX5 = 0xeb; //ex5-ex2;外部中断允许
sbit EX4 = 0xea;
sbit EX3 = 0xe9;
sbit EX2 = 0xe8;
//EIP
sbit PWDI = 0xfc; //pwdi=1 看门狗中断优先
sbit PX5 = 0xfb; //px5-px2=1 外部中断优先
sbit PX4 = 0xfa;
sbit PX3 = 0xf9;
sbit PX2 = 0xf8;
|
|