📄 file14.c
字号:
// 串口中断 c语言应用实验
// 本实验实现串口中断实验,通过中断和计算机进行通信
// 首先接受联机信号,然后接受计算机的相关控制信号
// 本实验中,采用发送不同的字符给计算机来模拟接收到的不同的计算机控制命令
// 通过扩展,可以实现不同的功能
// 实验的时候请注意,串口线的选择请参考说明书,波特率如果机器是12M就选择
// 2400,如果是6M就选择1200,否则通信可能不正常
#include <8051.h>
unsigned char time,b_break,b_break_3;
unsigned char buf;
void waitsend()
{
while(!TI)
{
};
TI = 0;
}
//串行中断程序
void int_s(void) interrupt 4 {
ES = 0; //关闭串行中断
RI = 0; //清除串行接受标志位
buf = SBUF; //从串口缓冲区取得数据
P1 = buf; //数据送往p1口显示出来
if(buf == 255) SBUF = 255; //发送联络信号
else{
switch(buf)
{
case 1: SBUF = 'h',waitsend();break; //如果接受到1,发送字符'h'给计算机
case 2: SBUF = 'e',waitsend();break; //如果接受到2,发送字符'e'给计算机
case 3: SBUF = 'j',waitsend();break; //如果接受到3,发送字符'j'给计算机
case 4: SBUF = 'o',waitsend();break; //如果接受到4,发送字符'o'给计算机
case 5: SBUF = 'i',waitsend();break; //如果接受到5,发送字符'i'给计算机
case 100: SBUF = 100,waitsend(),P3_7 = 1;break; //如果接受到100,打开蜂鸣器
case 111: SBUF = 111,waitsend(),P3_7 = 0;break; //如果接受到111,关闭蜂鸣器
default: SBUF = 'n',waitsend();break; //如果接受到其它数据,发送n给计算机
}
}
ES = 1; //允许串口中断
}
void main(void) {
P0 = 0;
P2 = 255; //关闭数码管显示
P1 = 255; //关闭LED 显示
P3_7 = 0; //关闭蜂鸣器
EA=1;
SCON=0x50;PCON=0;
TMOD=0x20;ES = 1;
TL1=TH1=0xf3;TR1=1; //串口工作在模式3,波特率2400(12M)/1200(6M)
while(1)
{ }; //无限循环等待串行中断
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -