问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求51单片机AD程序

发布网友 发布时间:2022-05-05 23:54

我来回答

1个回答

热心网友 时间:2022-06-28 08:32

如下程序是在
STC
官方网站
提供的。应该很有用。
////
//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
//假定测试芯片的工作频率为18.432MHz
#include
"reg51.h"
#include
"intrins.h"
#define
FOSC
18432000L
#define
BAUD
9600
typedef
unsigned
char
BYTE;
typedef
unsigned
int
WORD;
#define
URMD
0
//0:使用定时器2作为波特率发生器
//1:使用定时器1的模式0(16位自动重载模式)作为波特率发生器
//2:使用定时器1的模式2(8位自动重载模式)作为波特率发生器
sfr
T2H
=
0xd6;
//定时器2高8位
sfr
T2L
=
0xd7;
//定时器2低8位
sfr
AUXR
=
0x8e;
//辅助寄存器
sfr
ADC_CONTR
=
0xBC;
//ADC控制寄存器
sfr
ADC_RES
=
0xBD;
//ADC高8位结果
sfr
ADC_LOW2
=
0xBE;
//ADC低2位结果
sfr
P1ASF
=
0x9D;
//P1口第2功能控制寄存器
#define
ADC_POWER
0x80
//ADC电源控制位
#define
ADC_FLAG
0x10
//ADC完成标志
#define
ADC_START
0x08
//ADC起始控制位
#define
ADC_SPEEDLL
0x00
//540个时钟
#define
ADC_SPEEDL
0x20
//360个时钟
#define
ADC_SPEEDH
0x40
//180个时钟
#define
ADC_SPEEDHH
0x60
//90个时钟
void
InitUart();
void
InitADC();
void
SendData(BYTE
dat);
BYTE
GetADCResult(BYTE
ch);
void
Delay(WORD
n);
void
ShowResult(BYTE
ch);
void
main()
{
InitUart();
//初始化串口
InitADC();
//初始化ADC
while
(1)
{
ShowResult(0);
//显示通道0
ShowResult(1);
//显示通道1
ShowResult(2);
//显示通道2
ShowResult(3);
//显示通道3
ShowResult(4);
//显示通道4
ShowResult(5);
//显示通道5
ShowResult(6);
//显示通道6
ShowResult(7);
//显示通道7
}
}
/*----------------------------
发送ADC结果到PC
----------------------------*/
void
ShowResult(BYTE
ch)
{
SendData(ch);
//显示通道号
SendData(GetADCResult(ch));
//显示ADC高8位结果
//
SendData(ADC_LOW2);
//显示低2位结果
}
/*----------------------------
读取ADC结果
----------------------------*/
BYTE
GetADCResult(BYTE
ch)
{
ADC_CONTR
=
ADC_POWER
|
ADC_SPEEDLL
|
ch
|
ADC_START;
_nop_();
//等待4个NOP
_nop_();
_nop_();
_nop_();
while
(!(ADC_CONTR
&
ADC_FLAG));//等待ADC转换完成
ADC_CONTR
&=
~ADC_FLAG;
//Close
ADC
return
ADC_RES;
//返回ADC结果
}
/*----------------------------
初始化串口
----------------------------*/
void
InitUart()
{
SCON
=
0x5a;
//设置串口为8位可变波特率
#if
URMD
==
0
T2L
=
0xd8;
//设置波特率重装值
T2H
=
0xff;
//115200
bps(65536-18432000/4/115200)
AUXR
=
0x14;
//T2为1T模式,
并启动定时器2
AUXR
|=
0x01;
//选择定时器2为串口1的波特率发生器
#elif
URMD
==
1
AUXR
=
0x40;
//定时器1为1T模式
TMOD
=
0x00;
//定时器1为模式0(16位自动重载)
TL1
=
0xd8;
//设置波特率重装值
TH1
=
0xff;
//115200
bps(65536-18432000/4/115200)
TR1
=
1;
//定时器1开始启动
#else
TMOD
=
0x20;
//设置定时器1为8位自动重装载模式
AUXR
=
0x40;
//定时器1为1T模式
TH1
=
TL1
=
0xfb;
//115200
bps(256
-
18432000/32/115200)
TR1
=
1;
#endif
}
/*----------------------------
初始化ADC
----------------------------*/
void
InitADC()
{
P1ASF
=
0xff;
//设置P1口为AD口
ADC_RES
=
0;
//清除结果寄存器
ADC_CONTR
=
ADC_POWER
|
ADC_SPEEDLL;
Delay(2);
//ADC上电并延时
}
/*----------------------------
发送串口数据
----------------------------*/
void
SendData(BYTE
dat)
{
while
(!TI);
//等待前一个数据发送完成
TI
=
0;
//清除发送标志
SBUF
=
dat;
//发送当前数据
}
/*----------------------------
软件延时
----------------------------*/
void
Delay(WORD
n)
{
WORD
x;
while
(n--)
{
x
=
5000;
while
(x--);
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
人类如何才能悬浮在空中? - 知乎 人体悬浮术是真的存在吗 人体怎样才能真正的在空中悬浮 小孩c蛋白反应高是什么原因 (2014?南海区二模)如图所示,物重G为2000N,小红用800N的拉力花2s的时间... 苹果13系列升级iOS15.5好吗? 出生2o12年11月20日2点姓石光字辈取名 求龙凤胎名字:2012年6月21日(农历5月初3)凌晨0点40分出生,大的为龙,小... by和take有什么区别 takeby后面跟交通工具的区别 ADC0832和51单片机编程 Int=(AD_val)/51;Dec=(AD_valQ)*100_百度问一问 51单片机ad转换的C语言程序怎么编写啊 它怎么能把网页全强制关闭呢 51单片机与AD转换程序 重庆市渝北区统景镇中坪村一组低保户没有水表户头,现在重新上户要缴钱吗? 笔记本电脑(无数字键盘)如何强制结束当前网页? 一个网页关不掉,如何强行关闭?不是说ALT+F4 中国最大最集中的羽绒服产地是哪里? 我电脑强制关闭我的网页,具体咋调的? 网页死机时关不了页面,如何强制性关闭 请问在重庆万州区开一个商业用水水表户头要多少钱??? 鸭鸭羽绒服在浙江有工厂吗 乏力老是感觉提不起精神怎么回事? 网页强制关闭 重庆TM智能水表 卡里有水 放不出水 抑郁焦虑引起的乏力怎么办 下面这个水表右边第一个数字是吨位吗?还是0.1吨呢? 感冒后吃东西总感觉有股不好闻的味,感觉像是腥味一样,这是怎么回事?怎么治哦? 中国羽绒服三大基地是哪里? 得了焦虑症怎么办啊? 51单片机怎么样转换AD数据 重庆主城区有哪些自来水公司? 水务方面的公司?我想找相应的部门做水表推广。 为什么更改手机号不能更改? 前程无忧怎么运营?怎么获利? 锦绣缘小说大致内容摘要 Your age 的中文意思 51单片机怎么设置AD转换 What's your age是什么意思 光电直读远传水表是哪种?有什么好处?有做的好的吗? 《锦绣缘》最新txt全集下载 锦绣缘结局 锦绣缘华丽冒险改编自什么小说 锦绣缘小说大结局在线阅读 华中科技大学大学生创业实践中心的各部门职能简介 锦绣缘华丽冒险根据什么小说改编 换绑手机号显示,暂时不能绑定,该怎么解决? YOUR AGE 是什么意思? 民国时期小说锦绣缘故事内容 what's your age age需要大写吗? Mac电脑如何取消开机密码? What's your age?中的age什么意思,应填什么词?