专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
求一个12C5a60s2的AD转换程序
2020-02-01 16:32
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
13660
6
6
下载软件里有的
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
jlhgold
1楼-- · 2020-02-01 21:47
自己去下载一个最新的就是了
加载中...
makaveli
2楼-- · 2020-02-02 02:20
对的.STC 最新下载软件,集成了很多功能,各种型号的单片机,基本外设都有示例程序。很方便。 到官网下载一个吧。
加载中...
jlhgold
3楼-- · 2020-02-02 04:56
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC15F4K60S4 系列 AD转换中断方式举例----------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-755-82905966 -------------------------------------------*/
/* --- Tel: 86-755-82948412 -------------------------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使使用了宏晶科技的资料及程序 */
/* 如果要在文章中应用此代码,请在文章中注明使使用了宏晶科技的资料及程序 */
/*---------------------------------------------------------------------*/
//本示例在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 SendData(BYTE dat);
void Delay(WORD n);
void InitADC();
BYTE ch = 0; //ADC通道号
void main()
{
InitUart(); //初始化串口
InitADC(); //初始化ADC
IE = 0xa0; //使能ADC中断
//开始AD转换
while (1);
}
/*----------------------------
ADC中断服务程序
----------------------------*/
void adc_isr() interrupt 5 using 1
{
ADC_CONTR &= !ADC_FLAG; //清除ADC中断标志
SendData(ch); //显示通道号
SendData(ADC_RES); //读取高8位结果并发送到串口
// SendData(ADC_LOW2); //显示低2位结果
if (++ch > 7) ch = 0; //切换到下一个通道
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
}
/*----------------------------
初始化ADC
----------------------------*/
void InitADC()
{
P1ASF = 0xff; //设置P1口为AD口
ADC_RES = 0; //清除结果寄存器
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
Delay(2); //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
}
/*----------------------------
发送串口数据
----------------------------*/
void SendData(BYTE dat)
{
while (!TI); //等待前一个数据发送完成
TI = 0; //清除发送标志
SBUF = dat; //发送当前数据
}
/*----------------------------
软件延时
----------------------------*/
void Delay(WORD n)
{
WORD x;
while (n--)
{
x = 5000;
while (x--);
}
}
复制代码
加载中...
lyg407
4楼-- · 2020-02-02 08:21
精彩回答 2 元偷偷看……
加载中...
beijisnow
5楼-- · 2020-02-02 09:26
http://www.doyoung.net/program/ADC/index.html
这里也有
加载中...
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
东软载波ESF0654 PDS开发板串口USART0代码分享
1 个回答
普通32位单片机使用linux的应用代码
5 个回答
东软载波ESF0654 PDS开发板AT24C04的调试
9 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
- /*---------------------------------------------------------------------*/
- /* --- STC MCU Limited ------------------------------------------------*/
- /* --- STC15F4K60S4 系列 AD转换中断方式举例----------------------------*/
- /* --- Mobile: (86)13922805190 ----------------------------------------*/
- /* --- Fax: 86-755-82905966 -------------------------------------------*/
- /* --- Tel: 86-755-82948412 -------------------------------------------*/
- /* --- Web: www.STCMCU.com --------------------------------------------*/
- /* 如果要在程序中使用此代码,请在程序中注明使使用了宏晶科技的资料及程序 */
- /* 如果要在文章中应用此代码,请在文章中注明使使用了宏晶科技的资料及程序 */
- /*---------------------------------------------------------------------*/
- //本示例在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 SendData(BYTE dat);
- void Delay(WORD n);
- void InitADC();
- BYTE ch = 0; //ADC通道号
- void main()
- {
- InitUart(); //初始化串口
- InitADC(); //初始化ADC
- IE = 0xa0; //使能ADC中断
- //开始AD转换
- while (1);
- }
- /*----------------------------
- ADC中断服务程序
- ----------------------------*/
- void adc_isr() interrupt 5 using 1
- {
- ADC_CONTR &= !ADC_FLAG; //清除ADC中断标志
- SendData(ch); //显示通道号
- SendData(ADC_RES); //读取高8位结果并发送到串口
- // SendData(ADC_LOW2); //显示低2位结果
-
- if (++ch > 7) ch = 0; //切换到下一个通道
- ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
- }
- /*----------------------------
- 初始化ADC
- ----------------------------*/
- void InitADC()
- {
- P1ASF = 0xff; //设置P1口为AD口
- ADC_RES = 0; //清除结果寄存器
- ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
- Delay(2); //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
- }
- /*----------------------------
- 发送串口数据
- ----------------------------*/
- void SendData(BYTE dat)
- {
- while (!TI); //等待前一个数据发送完成
- TI = 0; //清除发送标志
- SBUF = dat; //发送当前数据
- }
- /*----------------------------
- 软件延时
- ----------------------------*/
- void Delay(WORD n)
- {
- WORD x;
- while (n--)
- {
- x = 5000;
- while (x--);
- }
- }
复制代码这里也有
一周热门 更多>