本人调通了串口输入的代码,但是若加上AD,给定AD转换一个固定的输入电压,就无法检测出串口的结果。请问有什么需要注意的问题吗?代码如下
#include<reg52.h>
#include<intrins.h>
sbit adc0804_cs=P3^0;
sbit adc0804_wr=P3^7;
sbit adc0804_rd=P3^6;
sbit adc0804_DB0=P1^0;
sbit adc0804_DB1=P1^1;
sbit adc0804_DB2=P1^2;
sbit adc0804_DB3=P1^3;
sbit adc0804_DB4=P1^4;
sbit adc0804_DB5=P1^5;
sbit adc0804_DB6=P1^6;
sbit adc0804_DB7=P1^7;//adc0804的管脚定义。
read_adc0804()
{
unsigned char getdata;
adc0804_cs=1;
adc0804_rd=1;
adc0804_wr=1;
P1=0xff;
_nop_();
//初始状态时cs=1,rd=1,wr=1,p1口全为高阻态。
adc0804_cs=0;
adc0804_wr=0;
adc0804_wr=1;
_nop_();
//cs=0激活ad
芯片,wr上升沿启动ad转换。
adc0804_rd=0;
_nop_();
//rd=0时读取转换完毕的8为数字量。
getdata=P1;
_nop_();
//输出转换后的结果。
adc0804_rd=1;
adc0804_cs=1;
return getdata;
}
//rd=1,cs=1关闭ad芯片。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag,m,a,getdata;
void init()//总初始化。
{
TMOD=0x20; //设置定时器1,工作模式为2.作为波特率发生器。
TH1=0xfd;
TL1=0xfd;//设置波特率。
TR1=1;//启动T1定时器。
REN=1;//允许串口接收。
SM0=0;
SM1=1;//设置串口的工作方式。
EA=1;//开总中断。
ES=1;//打开串口中断。
}
//初始化。
chuankou()
{
while(1)
{
if(flag==1)//设置flag切换
单片机的接收/停止状态。
{
ES=0;//关闭串口中断。
for(m=0;m<=7;m++)
{
SBUF=getdata;//传输数据至缓冲区。
while(!
ti);//发送标志位,
TI=0;//TI清0.
}
SBUF=a;//传输数据至缓冲区。
while(!TI);//发送标志位,
TI=0;//TI清0.
ES=1;
flag=0;
}
}
}
#include<reg52.h>
#include<stdio.h>
#include"adc0804.c"
#include"chuankou.c"
#include"delay.c"
extern unsigned int i;
extern unsigned char flag,m,a,getdata;
void main()
{
init();
while(1)
{
read_adc0804();//采样到一路信号后,启动ad转换。
chuankou();
delay(5);//完成1路信号的转换后
}
一周热门 更多>