📄 serial .c
字号:
#include <REGX52.h>
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#include <string.h>
sbit WDI=P1^0; //看门狗检测输入信号
sbit SWITCH=P1^2; //通道变换开关信号
sbit ACCESS1=P2^1; //通道1指示灯
sbit ACCESS2=P2^2; //通道2指示灯
void SystemIoInit(void);
extern void RESET(void);
void main(void)
{
unsigned char i,j;
unsigned char tmp;
while (1)
{
EA=0;
TMOD=0X20;
SCON=0X50;
PCON=0X80;
TL1=250;
TH1=250;
TR1=1;
IE=0X90;//EA=1,ES=1:打开串口中断
SystemIoInit();//系统接口初始化
IT1=1;//保证外部INT1边沿触发中断
tmp=0;
i=0;
j=0;
/*PCON |= SMOD_ + GF0_ + IDL_;//进入空闲状态并喂软件狗*/
for (i=0;i<2;i++)
{
for (j=0;j<5;j++)
{
tmp++;
tmp--;
}
WDI=1;
WDI=0;
}
_nop_();
_nop_();
}
}
/*串口中断服务子程序*/
void serial() interrupt 4 using 1
{
RI=0;
TH0=-5000/256;
TL0=-5000%256;
TR0=1;
ET0=1;
}
/*定时器0中断服务子程序*/
void timer0() interrupt 1 using 2
{
TH0=-5000/256;
TL0=-5000%256;
ET0=0;
TR0=0;
RCAP2H =0x10; //赋T2的预置值0x1000,溢出30次就是1秒钟
RCAP2L =0x00;
TR2=1; //启动定时器
ET2=1; //打开定时器2中断
SWITCH=0;
ACCESS2=0;
}
/*定时器2中断服务子程序*/
void timer2() interrupt 5 using 0
{
TF2=0; //清除定时器2中断标志
ET1=0; //关闭定时器2
TR1=0;
SWITCH=0;
ACCESS2=0;
}
/*------------------------------------
外部INT0中断服务程序
------------------------------------*/
void int0() interrupt 0 using 1
{
RESET ();
}
/*------------------------------------
外部INT1中断服务程序
------------------------------------*/
void int1() interrupt 3 using 1
{
ACCESS1=0;
ET1=0; //关闭定时器2
TR1=0;
}
/*------------------------------------
系统接口初始化子程序
------------------------------------*/
void SystemIoInit(void) using 0
{
IE = 0x00;//关闭中断
P2 = 0xff;//P2口初始化
P0 = 0xff;//P0口初始化
P1 = 0xff;//P1口初始化
P3 = 0xff;//P3口初始化
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -