📄 serial.c
字号:
#include <reg51.h>
#include <absacc.h>
#include <intrins.h>
#define ADC0808_ADDR XBYTE[0x7fff]
#define uchar unsigned char
void adc_run(void);
sbit P2_3 =P2^3;
sbit P2_7 =P2^7;
sbit P3_2 =P3^2;
uchar ad_val;
bit ad_over=0;
void serial_init(void)
{
SCON=0xf0;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
ES=1;
}
void interrupt_init(void)
{
EA=1;
EX0=1;
}
void interrupt4(void) interrupt 4 using 2
{
EA=0;
if(TI)
TI=0;
if(RI)
{
RI=0;
if(SBUF==0x7f) //如果接收到主机的地址吗0x7f
{
SBUF=0x11; //发送响应码0x11
//while(!TI); //必须
//TI=0;
SCON=0xd0; //并且把SCON中的SM2置0,允许响应数据中断
}
if(SBUF==0xaa) //如果接收到主机的启动A/D转化的命令0xaa
{
SBUF=0x22; //发送响应码0x22
//while(!TI); //必须
//TI=0;
adc_run(); //启动A/D转化
//while(P3_2)
{
}
// ad_val=P0;//ADC0808_ADDR;
// ad_over=1;
}
if(SBUF==0xbb) //如果接受到主机的发送转化结果的命令0xbb
{
SBUF=0x33; //发送响应码
//while(!TI); //必须
//TI=0;
}
if(SBUF==0xcc)
{
while(!ad_over)
{
} P2_3=~P2_3;
ad_over=0;
SBUF=ad_val;
//while(!TI); //必须
//TI=0;
SCON=0xf0;//****************等待下一次寻址
//}
}
}
EA=1;
}
void interrup0(void) interrupt 0 using 3
{
P2_7=1;
RD=0;
_nop_();
_nop_();
P2_7=0;
_nop_();
_nop_();
ad_val=P0;
ad_over=1;
RD=1;
P2_7=1;
}
void main(void)
{
P2_3=0;
interrupt_init();
serial_init();
while(1);
}
void adc_run(void)
{
P2_7=1;
WR=0;
_nop_();
_nop_();
P2_7=0;
_nop_();
_nop_();
WR=1;
P2_7=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -