📄 8032模数转换.c
字号:
#include <reg51.h>
#include <intrins.h>
sbit Cs=P3^5;
sbit Clk=P3^4;
sbit D=P3^3;
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
bit cond;
int A[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void Delay(unsigned int i)
{
for(;i>0;i--);
}
int AD()
{
unsigned int dat=0x00,dat1=0x00;
int i;
Clk=0;
Cs=0;
Delay(100);
//SetUp 开始第一个时钟 信号
Clk=1;
D=1;
Delay(500);
Clk=0;
Delay(500);
//开始输入选择通道
D=1;
Clk=1;
Delay(500);
Clk=0;
Delay(500);
D=0;
Clk=1;
Delay(500);
Clk=0;
Delay(500);
D=1;
//已有3个时钟脉冲个时钟脉冲
//结束选择通道,选择对通道0进行转换,
for(i=7;i>=0;i--)
{
Clk=1;
_nop_();
Clk=0;//第四个脉冲下降沿到来
//到第11个下降沿均读取数据
if( D==1)
{
dat=dat|A[i];
dat1=dat1|A[i];//接收8位数据
}
_nop_();
}
dat1=dat1&0x01;//校检数据保存第0位
for(i=1;i<8;i++)
{//接收后1~7位校检码
Clk=1;
_nop_();
Clk=0;
if( D==1)
dat1=dat1|A[i];
_nop_();
}
// if( dat&~dat1!=0)
// cond=0;
//校检不成功
Clk=1;
_nop_();
Clk=0;
_nop_();
Clk=1;
_nop_();
Clk=0;
_nop_();
Cs=1;
return dat;
}
void main(void)
{
unsigned int x=0;//,x1;
Cs=1;
SCON=0x50;
TCON=0x40;
TMOD=0x21;
TH1=0xfd;TL1=0xfd;
TI=1;
while(1)
{
cond=1;
x=0;
x=AD();
/* if(cond==0)
{
x=x1;
}
else
x1=x; */
if(TF1)
{
SBUF=0x00+x;
TI=0;
while(!TI);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -