|
#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);//延時(shí)單位:ms
void initUart(void);/*初始化串口波特率,使用定時(shí)器2*/
void sendString(uchar *ucString); //往串口發(fā)字符串
/******** main 函數(shù) *********/
void main (void) {
time(1);/* 延時(shí)等待外圍器件完成復(fù)位 */
initUart();/* 初始化串口 */
IE=0x90; /* 打開(kāi)串口中斷 */
while(TRUE){}
}
/********** 初始化串口波特率 ************/
void initUart(void)/*初始化串口波特率,使用定時(shí)器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;
}
/*********** 串行口中斷服務(wù)程序***************/
void serial0_int(void) interrupt 4
{
uchar rChar;
uchar code str1[]="What do you plan to do this Friday?";//收到0x01時(shí)的返回
uchar code str2[]="I plan to go to the concert.";//收到0x02時(shí)的返回
uchar code str3[]="What are you doing next week?";//收到0x03時(shí)的返回
uchar code str4[]="I'm thinking of going to my grandma's.";//收到0x04時(shí)的返回
uchar code strdefault[]="Please select a character '1','2','3' or '4'!";//收到其它時(shí)的返回
EA=0;/* 關(guān)總中斷 */
RI=0;/* 請(qǐng)標(biāo)志 */
rChar=SBUF;/* 讀串口緩沖區(qū),得到PC發(fā)來(lái)的數(shù)據(jù) */
P2=rChar; /* 送P2口顯示 */
switch(rChar) {
case '1': //收到字符'1'
SBUF='1';while(TI==0){}TI=0;//發(fā)送字符'1'
SBUF=':';while(TI==0){}TI=0;//發(fā)送字符':'
sendString(str1);//發(fā)送字符串str1
break;
case '2': //收到字符'2'
SBUF='2';while(TI==0){}TI=0;//發(fā)送字符'2'
SBUF=':';while(TI==0){}TI=0;//發(fā)送字符':'
sendString(str2);//發(fā)送字符串str2
break;
case '3': //收到字符'3'
SBUF='3';while(TI==0){}TI=0;//發(fā)送字符'3'
SBUF=':';while(TI==0){}TI=0;//發(fā)送字符':'
sendString(str3);//發(fā)送字符串str3
break;
case '4': //收到字符'4'
SBUF='4';while(TI==0){}TI=0;//發(fā)送字符'4'
SBUF=':';while(TI==0){}TI=0;//發(fā)送字符':'
sendString(str4);//發(fā)送字符串str4
break;
default: //收到其它字符
SBUF='d';while(TI==0){}TI=0;//發(fā)送字符'd'
SBUF=':';while(TI==0){}TI=0;//發(fā)送字符':'
sendString(strdefault);//發(fā)送字符串strdefault
break;
}
EA=1;/* 開(kāi)總中斷 */
}
void sendString(uchar *ucString) //往串口發(fā)字符串
{
uchar i,stringLength=strlen(ucString);
REN=0;//設(shè)置發(fā)送狀態(tài)
for(i=0;i<stringLength;i++){
SBUF=ucString[i];while(TI==0);TI=0;//發(fā)送字符
}
SBUF=0x0d;while(TI==0);TI=0;//發(fā)送回車(chē)
SBUF=0x0a;while(TI==0);TI=0;//發(fā)送換行
SBUF=0x0a;while(TI==0);TI=0;//發(fā)送換行
REN=1;//設(shè)置接收狀態(tài)
}
void delay_5us(void)//延時(shí)5us,晶振改變時(shí)只用改變這一個(gè)函數(shù)!
{
_nop_();
_nop_();
//_nop_();
//_nop_();
}
/************ delay_50us ***************/
void delay_50us(void)//延時(shí)50us
{
unsigned char i;
for(i=0;i<4;i++)
{
delay_5us();
}
}
/******** 延時(shí)100us ******************/
void delay_100us(void)//延時(shí)100us
{
delay_50us();
delay_50us();
}
/*********** 延時(shí)單位:ms *******************/
void time(unsigned int ucMs)//延時(shí)單位:ms
{
unsigned char j;
while(ucMs>0){
for(j=0;j<10;j++) delay_100us();
ucMs--;
}
}
|
|