3. 用AD以1HZ的频率采集模拟信号,然后转换成数字量,再将其以1200bps发送到计算机,在计算机上显示。

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit csad=P0^7;//ad片选使能端
sbit wr=P3^6;
sbit rd=P3^7;
sbit diola=P2^5;//LED锁存器使能

uchar flag,i,t,lsp;
uint temp;
uchar code ascii[]={
0x30,0x31,0x32,0x33,
0x34,0x35,0x36,0x37,
0x38,0x39,0x2e,0x56};//ascii码表

uchar num[]={0,0,0,0,0};

void init()
{
	TMOD=0x21;//定时器0工作方式1,定时器1工作方式2
	SCON=0x40;//串口工作方式1
	TH0=(65536-50000)/256;//初值50ms
	TL0=(65536-50000)%256;
	TH1=0xe8;//波特率1200
	TL1=0xe8;
	TR0=1;//定时器0启动
	TR1=1;//定时器1启动
	ET0=1;//定时器0中断打开
	EA=1;//总中断打开
	diola=0;//关闭LED锁存器,避免闪烁
	csad=0;//启动ad芯片
	lsp=196;
}

void send_dat()//数据发送函数
{
	if(flag==1)//检测数据采集是否完成
	{
		flag=0;//完成标志复位
		temp=temp*lsp;
		num[0]=ascii[temp/10000];
		num[1]=ascii[10];
		num[2]=ascii[temp/1000%10];
		num[3]=ascii[temp/100%10];
		num[4]=ascii[11];//解析数据 进行数据赋值
		for(i=0;i<5;i++)
		{
			SBUF=num[i];//发送数据
			while(!TI);//检测是否发送完成
			TI=0;//发送完成标志清零
		}
	}
}

void main()
{
	init();
	while(1)
	{
		send_dat();
	}
}

void timer0() interrupt 1
{
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;//装初值
	t++;//计数
	if(t==20)
	{
		t=0;//计数清零
		rd=1;//准备读取数据
		rd=0;
		temp=P1;//读取数据
		rd=1;
		wr=1;
		wr=0;
		wr=1;//启动ad转换
		flag=1;//数据采集完成标志置1
		
	}
	
}
	

纯手打代码 亲测可用

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值