📄 模拟中断shou.c
字号:
#include<STC12C5410AD.H>
sbit BT_REC=P3^4;
#define F_TM F0
unsigned char msm[23];
unsigned char rspoint,x,z;
sbit ACC0= ACC^0;
sbit ACC1= ACC^1;
sbit ACC2= ACC^2;
sbit ACC3= ACC^3;
sbit ACC4= ACC^4;
sbit ACC5= ACC^5;
sbit ACC6= ACC^6;
sbit ACC7= ACC^7;
void sendasc(unsigned char asc);//发送一个ASCII码
void sendtogsm(unsigned char *p,int L);//发送字符串
//--------------发送字符串---------------------
void sendtogsm(unsigned char *p,int L)//1、字符串数组 2、字符串长度
{
while (L--)
{
sendasc(*p++);
}
}
/**********************延时*****************/
void delay(int x)
{
int i;
for (i=0;i<=x;i++);
}
/**********检测起始位**********************/
bit StartBitOn()
{
return (BT_REC==0);
}
/***************外部中断*******************/
void time() interrupt 0
{
F_TM=1;
}
/*************外部中断初始化**************/
void init()
{
IT0=1;
EA=1;
EX0=1;
ACC=0XFF;
}
/***********串口通讯设置**************/
void cksz()
{
TMOD=0x20; //波特率设置
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;//工作方式设置
SM0=0;
SM1=1;
EA=1; //开启中断
ES=1;
}
//-----------发送一个ASCII码----------------
void sendasc(unsigned char asc)
{
bit es;
es=ES;
ES=0;
TI=0;
SBUF=asc;
while(!TI);
TI=0;
ES=es;
}
/********************接收函数***************/
unsigned char PGetChar()
{
F_TM=0;
while(!F_TM); //等过起始位
ACC0=BT_REC;
F_TM=0;
while(!F_TM);
ACC1=BT_REC;
F_TM=0;
while(!F_TM);
ACC2=BT_REC;
F_TM=0;
while(!F_TM);
ACC3=BT_REC;
F_TM=0;
while(!F_TM);
ACC4=BT_REC;
F_TM=0;
while(!F_TM);
ACC5=BT_REC;
F_TM=0;
while(!F_TM);
ACC6=BT_REC;
F_TM=0;
while(!F_TM);
ACC7=BT_REC;
F_TM=0;
while(!F_TM)
{
if(BT_REC)
{
break;
}
}
return ACC;
}
/**************主函数****************/
void main()
{
//PCON=0x80;//设置波特率为19200 若想变成9600删除此行即可
cksz();
rspoint=0;
init();
z=0;
while(1)
{
if(StartBitOn())
{
x=PGetChar();
if(x=='~')
{
z=1;
}
if(x=='!')
{
rspoint=0;
z=0;
sendtogsm(msm,23);
}
if(z==1)
{
msm[rspoint]=x;
if(rspoint==3)
{
if(x=='A') P0=0x00;
if(x=='B') P0=0XFF;
}
rspoint++;
}
}
}
}
void time4() interrupt 4
{
RI=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -