STC1551系列单片机有哪些的一点疑问

STC15全系列选型表_图文_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
STC15全系列选型表
&&高速/高可靠/低功耗/超强抗干扰的新一代8051单片机,采用第八代加密技术,加密性超强,指令代码完全兼容传统8051,但速度快8-12倍。
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩7页未读,
定制HR最喜欢的简历
你可能喜欢21ic官方微信-->
帮我看看厂家stc15系列的例程是不是写错了
中级技术员, 积分 143, 距离下一级还需 157 积分
中级技术员, 积分 143, 距离下一级还需 157 积分
中级技术员, 积分 143, 距离下一级还需 157 积分
中级技术员, 积分 143, 距离下一级还需 157 积分
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC15F4K60S4 系列 通过BandGap电压精确测量外部输入电压值举例-----*/
/* --- Mobile: (86) ----------------------------------------*/
/* --- Fax: 86-755- -------------------------------------------*/
/* --- Tel: 86-755- -------------------------------------------*/
/* --- Web:
--------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序& &*/
/* 如果要在文章中应用此代码,请在文章中注明使用了宏晶科技的资料及程序& &*/
/*---------------------------------------------------------------------*/
//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
//假定测试芯片的工作频率为18.432MHz
#include &reg51.h&
#include &intrins.h&
typedef unsigned char BYTE;
typedef unsigned int WORD;
//& & ADC的第9通道是用来测试内部BandGap参考电压的,由于内部BandGap参考电
//压很稳定,不会随芯片的工作电压的改变而变化,所以可以通过两次测量和一次计算
//便可得到外部的精确电压.公式如下:
//ADCbg / Vbg = 1023 / VCC
//ADCx / Vx& &= 1023 / VCC
//由于两次测量的时间间隔很短,VCC的电压在此期间的波动可忽略不计
//从而可推出 ADCbg / Vbg = ADCx / Vx
//进一步得出 Vx = Vbg * ADCx / ADCbg
//其中:ADCbg为Bandgap电压的ADC测量值
//& &&&Vbg为实际Bandgap的电压值,在单片机进行CP测试时记录的参数,单位为毫伏(mV)
//& &&&ADCx为外部输入电压的ADC测量值
//& &&&Vx外部输入电压的实际电压值,单位为毫伏(mV)
//具体的测试方法:首先将P1ASF初始化为0,即关闭所有P1口的模拟功能
//然后通过正常的ADC转换的方法读取第0通道的值,即可通过ADC的第9通道读取当前
//内部BandGap参考电压值ADCbg,然后测量有外部电压输入的ADC通道,测量出
//外部输入电压的ADC测量值ADCx,接下来从RAM区或者ROM区读取实际Bandgap的电压值Vbg,
//最后通过公式Vx = Vbg * ADCx / ADCbg,即可计算出外部输入电压的实际电压值Vx
//-----------------------------------------
WORD idata Vbg_RAM _at_ 0& && && && && &//对于只有256字节RAM的MCU存放地址为0EFH
//WORD idata Vbg_RAM _at_ 0x6f;& && && && & //对于只有128字节RAM的MCU存放地址为06FH
//注意:需要在下载代码时选择&在ID号前添加重要测试参数&选项,才可在程序中获取此参数
//WORD code Vbg_ROM _at_ 0x03f7;& && && && &//1K程序空间的MCU
//WORD code Vbg_ROM _at_ 0x07f7;& && && && &//2K程序空间的MCU
//WORD code Vbg_ROM _at_ 0x0bf7;& && && && &//3K程序空间的MCU
//WORD code Vbg_ROM _at_ 0x0ff7;& && && && &//4K程序空间的MCU
//WORD code Vbg_ROM _at_ 0x13f7;& && && && &//5K程序空间的MCU
//WORD code Vbg_ROM _at_ 0x1ff7;& && && && &//8K程序空间的MCU
//WORD code Vbg_ROM _at_ 0x27f7;& && && && &//10K程序空间的MCU
//WORD code Vbg_ROM _at_ 0x2ff7;& && && && &//12K程序空间的MCU
//WORD code Vbg_ROM _at_ 0x3ff7;& && && && &//16K程序空间的MCU
//WORD code Vbg_ROM _at_ 0x4ff7;& && && && &//20K程序空间的MCU
//WORD code Vbg_ROM _at_ 0x5ff7;& && && && &//24K程序空间的MCU
//WORD code Vbg_ROM _at_ 0x6ff7;& && && && &//28K程序空间的MCU
//WORD code Vbg_ROM _at_ 0x7ff7;& && && && &//32K程序空间的MCU
//WORD code Vbg_ROM _at_ 0x9ff7;& && && && &//40K程序空间的MCU
//WORD code Vbg_ROM _at_ 0xbff7;& && && && &//48K程序空间的MCU
//WORD code Vbg_ROM _at_ 0xcff7;& && && && &//52K程序空间的MCU
//WORD code Vbg_ROM _at_ 0xdff7;& && && && &//56K程序空间的MCU
WORD code Vbg_ROM _at_ 0xeff7;& && && && &&&//60K程序空间的MCU
//-----------------------------------------
& && && && && && && && && && && && && && &&&
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 Delay(WORD n)
& & while (n--)
& && &&&x = 5000;
& && &&&while (x--);
BYTE GetADC(BYTE ch)
& & ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
& & Delay(2);& && && && && && && && && && & //ADC上电并延时
& & 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;& && && && && &&&//清除ADC标志
& & return ADC_RES;
void main()
& & BYTE ADC
& & BYTE ADCx;
& & WORD Vx;
//第一步:通过ADC的第2通道测试外部输入电压的ADC测量值
& & ADC_RES = 0;& && && && && && && && && & //清除结果寄存器
& & P1ASF = 0x02;& && && && && && && && && &//设置P1.1口为模拟通道
& & GetADC(1);
& & GetADC(1);
& & ADCx = GetADC(1);
//第二步:通过ADC的第9通道测试Bandgap电压的ADC测量值
& & ADC_RES = 0;& && && && && && && && && & //清除结果寄存器
& & P1ASF = 0x00;& && && && && && && && && &//不设置P1ASF,即可从ADC的第9通道读取内部Bandgap电压的ADC测量值
& & GetADC(1);
& & GetADC(1);
& & ADCbg = GetADC(1);
//第三步:通过公式计算外部输入的实际电压值
& & Vx = Vbg_RAM * ADCx / ADC& && && && &//使用RAM中的Bandgap电压参数进行计算
& & //Vx = Vbg_ROM * ADCx / ADC& && && & //使用ROM中的Bandgap电压参数进行计算
& & while (1);
我觉得这里
//第二步:通过ADC的第9通道测试Bandgap电压的ADC测量值
& & ADC_RES = 0;& && && && && && && && && & //清除结果寄存器
& & P1ASF = 0x00;& && && && && && && && && &//不设置P1ASF,即可从ADC的第9通道读取内部Bandgap电压的ADC测量值
& & GetADC(1);
& & GetADC(1);
& & ADCbg = GetADC(1);
//第二步:通过ADC的第9通道测试Bandgap电压的ADC测量值
& & ADC_RES = 0;& && && && && && && && && & //清除结果寄存器
& & P1ASF = 0x00;& && && && && && && && && &//不设置P1ASF,即可从ADC的第9通道读取内部Bandgap电压的ADC测量值
& & GetADC(0);
& & GetADC(0);
& & ADCbg = GetADC(0);
否则取不出 BandGap 的ADC值
(这段例程在手册和ISP v6.75里面都有)
满意回复+20
昨天晚上回家在电脑上看了看,发现文档里的没错,但STC-ISP下载软件里带的范例确实是错的,跟楼主的一样,通道号给错了。STC的人看到了,应该给个解释,到底P1AF ...
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
实习生, 积分 9, 距离下一级还需 41 积分
技术达人, 积分 8542, 距离下一级还需 1458 积分
技术达人, 积分 8542, 距离下一级还需 1458 积分
技术达人, 积分 8542, 距离下一级还需 1458 积分
技术达人, 积分 8542, 距离下一级还需 1458 积分
不是第9通道吗?你那样成了第0通道了。
资深技术员, 积分 305, 距离下一级还需 195 积分
资深技术员, 积分 305, 距离下一级还需 195 积分
资深技术员, 积分 305, 距离下一级还需 195 积分
资深技术员, 积分 305, 距离下一级还需 195 积分
手机上看了看文档,没看到跟你一样的代码,文档里没定义GetADC()函数,而是直接在主循环里完成的三步,并且通道号没错。版本不一样?
中级技术员, 积分 177, 距离下一级还需 123 积分
中级技术员, 积分 177, 距离下一级还需 123 积分
中级技术员, 积分 177, 距离下一级还需 123 积分
中级技术员, 积分 177, 距离下一级还需 123 积分
一般STC的范例程序是不会有什么问题的,如有疑问,可以咨询STC原厂,确实是错的话,会进行修改的,感谢您的意见
资深技术员, 积分 305, 距离下一级还需 195 积分
资深技术员, 积分 305, 距离下一级还需 195 积分
资深技术员, 积分 305, 距离下一级还需 195 积分
资深技术员, 积分 305, 距离下一级还需 195 积分
昨天晚上回家在电脑上看了看,发现文档里的没错,但STC-ISP下载软件里带的范例确实是错的,跟楼主的一样,通道号给错了。STC的人看到了,应该给个解释,到底P1AFS设置为0后还与ADC_CONTR里的通道设置有关没有。
中级技术员, 积分 143, 距离下一级还需 157 积分
中级技术员, 积分 143, 距离下一级还需 157 积分
中级技术员, 积分 143, 距离下一级还需 157 积分
中级技术员, 积分 143, 距离下一级还需 157 积分
是我粗心了,手册里的没错,我的这段程序来自IPS下载程序里的范例程序,我就看了手册里的标题,以为同样标题的范例程序都一样呢.
还有一个问题:我用的stc15f2k60s2(v7.1.1s),当ISP下载时选择了&在程序区的结束处添加重要测试参数&后,在程序区应该添加BandGap电压的位置(0xeff7),没有添加该电压,而是写了0,不知道是什么原因.
中级技术员, 积分 117, 距离下一级还需 183 积分
中级技术员, 积分 117, 距离下一级还需 183 积分
中级技术员, 积分 117, 距离下一级还需 183 积分
中级技术员, 积分 117, 距离下一级还需 183 积分
刚好困扰在楼主说的范例上的GetADC(1)上,开始没照范例做,自我认为0通道,就是GetADC(0),得到的ADC值,按10位计算接近260 (即1.27V左右);再看范例是取GetADC(1),以为自己是做错了,就再按范例做,得到AD值总是看不懂。
看到论坛上正好有同样的话题能解惑,太好了!菜鸟总是担心会走错路,原来大大们早已了如指掌了。
经常来论坛看看,受益匪浅!
资深工程师, 积分 12191, 距离下一级还需 7809 积分
资深工程师, 积分 12191, 距离下一级还需 7809 积分
资深工程师, 积分 12191, 距离下一级还需 7809 积分
资深工程师, 积分 12191, 距离下一级还需 7809 积分
可能是写例程的人拷贝后没修改,实际应该是GetADC(0)
中级技术员, 积分 117, 距离下一级还需 183 积分
中级技术员, 积分 117, 距离下一级还需 183 积分
中级技术员, 积分 117, 距离下一级还需 183 积分
中级技术员, 积分 117, 距离下一级还需 183 积分
把 WORD idata Vbg_RAM _at_ 0 拷贝到程序中,却
出错C274: Vbg_RAM :absolute specifier illegal
照搬STC的例程里语句,却不能用,应该是漏了定义标注?
扫描二维码,随时随地手机跟帖
技术高手奖章
人才类勋章
时间类勋章
技术奇才奖章
人才类勋章
时间类勋章
奔腾之江水
发帖类勋章
精英会员奖章
等级类勋章
时间类勋章
晶莹之水滴
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
时间类勋章
您需要登录后才可以回帖
热门推荐 /6STC单片机的种类与区别介绍_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
STC单片机的种类与区别介绍
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢STC15系列单片机的宏定义不懂,求解答_百度知道
STC15系列单片机的宏定义不懂,求解答
我有更好的答案
宏定义可以看作是字符串的代换#define PI=3.就是编译器在编译时把3.替换“PI”,我们写程序时就只要写PI,不用记住复杂的数值。而且程序比较大时修改#define PI=XX就可以改变所有的PI,不用一个个改。
采纳率:84%
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。文章 - 0&评论 - 0&trackbacks - 0
STC15系列单片机教程之一:OneLED STC15系列单片机教程之一:OneLED一、开发软件准备二、STC15F2K60S单片机IO分配三、程序编写1.Keil 新建项目2.编写程序3. 程序的编译四、固件下载总结 本系列教程开始学习STC15系列单片机的C语言编程,读者需要有C语言的基础知识。 一、开发软件准备 1. 安装编程软件:Keil
2. 下载软件 3. 配置keil下的STC单片机编程环境 &
点击添加信号和头文件到Keil中,为 keil软件添加STC系列单片机器件的支持,以及后面要用到的仿真器。 二、STC15F2K60S单片机IO分配
如上图所示,STC15F2K60S 系列块单排及共有5组管脚:
管脚组名称
8bit (P0.0-P0.7)
8bit (P1.0-P1.7)
8bit (P2.0-P2.7)
8bit (P3.0-P3.7)
8bit (P3.0-P3.7)
2bit(P5.4-P5.5) STC15系列单片机每个管脚都有个IO口模式配置寄存器,可用配置任何一个管脚的输出模式。 & 每位管脚模式有以下四种: (默认为00,即准双向口)
三、程序编写 在了解了以上STC单片机的IO特性后,我们来尝试编写程序,控制开发板上的LED灯闪烁,其所在管脚为P5.5
1.Keil 新建项目 o 先在keil 的 Project 菜单下选择new uVision Project...创建新项目,并命名。
o Select a CPU Data Base File 中选择 STC MCU Database,创建STC系列单片机项目
o 根据板子类型,为项目选择CPU型号。我这选的是STC15F2K60S2
o 添加main.c文件
2.编写程序 程序代码如下: //************************************//STC_XGboard 51单片机学习板//author:Kimiyang//OneLEDFlash//实现单个LED闪烁////************************************// NAME Pin// LED P55#include &STC15F2k60S2.H& //单片机寄存器资源头文件#include &intrins.h& //使用_nop_();空操作函数时必须包含此头文件#define LED P55 //定义LED管脚号void Delay1ms() //@11.0592MHz{unsigned char i,_nop_();_nop_();_nop_();i = 11;j = 190;do{while (--j);} while (--i);}//************************************//*函数名称:delay//*函数功能:延时函数//*参 数:Dtime:延时时间mS//*返 回 值:无//************************************void delay_nMs(unsigned int Dtime){ //255for(i=0;i&Di++) // 10us{Delay1ms(); //1s}}//************************************//*函数名称:main//*函数功能:主函数,程序开机运行的第一个函数//*参 数:无//*返 回 值:无//************************************int main(void){LED = 1; //灯灭while(1) //重复执行下面大括号中的4行程序{LED = 0; //点亮LEDdelay_nMs(500); //延时约为0.5sLED = 1; //熄灭LEDdelay_nMs(500);}} 3. 程序的编译 o 设置生成可下载文件-'hex'文件
o 使用Keil软件工具条上的Rebuild图标按钮对程序编译
o 编译后观察keil软件底下的Build output窗口,了解编译信息错误或警告: 0 Error,0 Warning
四、固件下载 o 编译成功后(0 Error,0 Warning),使用STC_isp软件,通过单片机的串口下载hex程序到单片机内,观察运行现象。
o 开发板运行效果 总结
o STC单片机头文件STC15F2K60S.h中对管脚的位定义为 管脚组名+管脚bit号,如P15代表的是P1口的第5位。 o #define LED P55 使用#define 定义P55名称为 LED,在下面程序中可用LED 代表P55管脚。对程序阅读比较有帮助。
阅读(...) 评论()
@Kimiyang 2017

我要回帖

更多关于 pic系列单片机 的文章

 

随机推荐