#include <REG52.H> /* special function register declarations */
#include <stdio.h> /* prototype declarations for I/O functions */
#include <intrins.h>
#include <Absacc.h>
#include <string.h>
#include <ctype.h>
#define byte unsigned char
#define uchar unsigned char
#define word unsigned int
#define uint unsigned int
#define ulong unsigned long
#define BYTE unsigned char
#define WORD unsigned int
#define TRUE 1
#define FALSE 0
void time(unsigned int ucMs);//延时单位:ms
void initUart(void);/*初始化串口波特率,使用定时器2*/
void sendString(uchar *ucString); //往串口发字符串
/******** main 函数 *********/
void main (void) {
time(1);/* 延时等待外围器件完成复位 */
initUart();/* 初始化串口 */
IE=0x90; /* 打开串口中断 */
while(TRUE){}
}
/********** 初始化串口波特率 ************/
void initUart(void)/*初始化串口波特率,使用定时器2*/
{
/* Setup the serial port for 9600 baud at 11.0592MHz */
SCON = 0x50; //串口工作在方式1
RCAP2H=(65536-(3456/96))>>8;
RCAP2L=(65536-(3456/96))%256;
T2CON=0x34;
}
/*********** 串行口中断服务程序***************/
void serial0_int(void) interrupt 4
{
uchar rChar;
uchar code str1[]="What do you plan to do this Friday?";//收到0x01时的返回
uchar code str2[]="I plan to go to the concert.";//收到0x02时的返回
uchar code str3[]="What are you doing next week?";//收到0x03时的返回
uchar code str4[]="I'm thinking of going to my grandma's.";//收到0x04时的返回
uchar code strdefault[]="Please select a character '1','2','3' or '4'!";//收到其它时的返回
EA=0;/* 关总中断 */
RI=0;/* 请标志 */
rChar=SBUF;/* 读串口缓冲区,得到PC发来的数据 */
P2=rChar; /* 送P2口显示 */
switch(rChar) {
case '1': //收到字符'1'
SBUF='1';while(TI==0){}TI=0;//发送字符'1'
SBUF=':';while(TI==0){}TI=0;//发送字符':'
sendString(str1);//发送字符串str1
break;
case '2': //收到字符'2'
SBUF='2';while(TI==0){}TI=0;//发送字符'2'
SBUF=':';while(TI==0){}TI=0;//发送字符':'
sendString(str2);//发送字符串str2
break;
case '3': //收到字符'3'
SBUF='3';while(TI==0){}TI=0;//发送字符'3'
SBUF=':';while(TI==0){}TI=0;//发送字符':'
sendString(str3);//发送字符串str3
break;
case '4': //收到字符'4'
SBUF='4';while(TI==0){}TI=0;//发送字符'4'
SBUF=':';while(TI==0){}TI=0;//发送字符':'
sendString(str4);//发送字符串str4
break;
default: //收到其它字符
SBUF='d';while(TI==0){}TI=0;//发送字符'd'
SBUF=':';while(TI==0){}TI=0;//发送字符':'
sendString(strdefault);//发送字符串strdefault
break;
}
EA=1;/* 开总中断 */
}
void sendString(uchar *ucString) //往串口发字符串
{
uchar i,stringLength=strlen(ucString);
REN=0;//设置发送状态
for(i=0;i<stringLength;i++){
SBUF=ucString[i];while(TI==0);TI=0;//发送字符
}
SBUF=0x0d;while(TI==0);TI=0;//发送回车
SBUF=0x0a;while(TI==0);TI=0;//发送换行
SBUF=0x0a;while(TI==0);TI=0;//发送换行
REN=1;//设置接收状态
}
void delay_5us(void)//延时5us,晶振改变时只用改变这一个函数!
{
_nop_();
_nop_();
//_nop_();
//_nop_();
}
/************ delay_50us ***************/
void delay_50us(void)//延时50us
{
unsigned char i;
for(i=0;i<4;i++)
{
delay_5us();
}
}
/******** 延时100us ******************/
void delay_100us(void)//延时100us
{
delay_50us();
delay_50us();
}
/*********** 延时单位:ms *******************/
void time(unsigned int ucMs)//延时单位:ms
{
unsigned char j;
while(ucMs>0){
for(j=0;j<10;j++) delay_100us();
ucMs--;
}
}
|