2022年KEIL,STC单片机学习心得体会.docx
《2022年KEIL,STC单片机学习心得体会.docx》由会员分享,可在线阅读,更多相关《2022年KEIL,STC单片机学习心得体会.docx(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品学习资源51 单片机学习心得以下为本人学习 51 内核的个人心得,并且表达才能不是很好,如各路高手发觉小弟说的不对的地方,请多指教!为什么要用 51 单片机, 51 到现在算衰落的产品,但是它仍是有很大的市场,这是为什么?用性价比来说这个问题;一套产品用1 块钱能解决的问题假如搞成 10 块,在批量生产 10W 套后,你看看能节省到少 MONEY .本人是用 keil 来学习 51 单片机的,现在就利用KEIL2 编程心得;个人仍是想说一句话:成才主在己,有难先网络;师傅再强自己不下工夫是不能成功的,别人自学也能成才;并且基本上我们能遇到的方向性问题网上基本都有答案了;为什么说方向性的问题
2、 呢?比如:你可以在网上问如何做饭,但是你不能问:为什么我的饭做得不好吃;很多 51 单片机是没有在线仿真的,这样就需要我们想方设法做调试,指示灯,蜂鸣器,串口等等;可以通过串口发送一些内容到上位机便于观看;当然串口仍是没有仿真器实在,比如:Unsignedchar a,b;/我想将 A 左移 8 位后加上 b 得到一个 16 进制的数;这是针对于 c 语言问题;Unsignedshort c;A=0xaa;b=0xbb;C=Unsignedshorta8+b;请问 C 的值是多少?对于新手来说可能会犯的错误,可能我们会答成 0xaabb;其实并不是这样的, 要比+的优先级低;所以正确的写法为
3、 c=( Unsignedshort)a对象指针 - 成员名- 表达式 数据类型 表达式右到左单目运算符欢迎下载精品学习资源+自增运算符+变量名 / 变量名+单目运算符-自减运算符- 变量名 / 变量名-单目运算符*取值运算符* 指针变量单目运算符&取地址运算符&变量名单目运算符.规律非运算符. 表达式单目运算符按位取反运算符表达式单目运算符sizeof长度运算符sizeof表达式/除表达式 / 表达式双目运算符*%乘余数(取模)表达式 * 表达式整型表达式 / 整型表达式左到右双目运算符双目运算符+-加减表达式 +表达式表达式 - 表达式左到右双目运算符双目运算符左移右移变量 表达式左到右双
4、目运算符双目运算符大于表达式 表达式双目运算符=大于等于表达式 =表达式左到右双目运算符小于表达式 表达式双目运算符=小于等于表达式 =表达式双目运算符=等于表达式 =表达式双目运算符.=不等于表达式 .=表达式左到右双目运算符8&按位与表达式 &表达式左到右双目运算符9按位异或表达式 表达式左到右双目运算符10|按位或表达式 | 表达式左到右双目运算符11&规律与表达式 &表达式左到右双目运算符12|规律或表达式 | 表达式左到右双目运算符表达式 1. 表达式2:表达式 3=/=赋值运算符除后赋值变量 =表达式变量 /= 表达式*=乘后赋值变量 *= 表达式%=取模后赋值变量 %=表达式14
5、+=-=加后赋值减后赋值变量 +=表达式变量 -= 表达式右到左=左移后赋值右移后赋值变量 =表达式&=按位与后赋值变量 &=表达式=|=按位异或后赋值按位或后赋值变量 =表达式变量 |= 表达式15,逗号运算符表达式 , 表达式 , 左到右3456713.:条件运算符右到左三目运算符从左向右顺序运算以下问题: Unsigned char a,b;Float c;A=0xea;B=0x60;欢迎下载精品学习资源C=floata*256+b/100 ;C=600.仍是 -55.35 取决于单片机内部运算方式但是 C=floatusigned shorta*256+b/100;确定是 600;但是
6、 C=floatshorta*256+b/100 ;确定是 -55.35;Error: Multiplepublicdefinitions,symbol: (某个全局变量);这个错误是说一个全局变量多重定义了;对于体会不足的同学们来说,以下例子可能是比较难以找到缘由的问题;比如,我有2 个.C 文件( a1.c, a2.c),有一个 .h 文件 a1.h,然后在这个 .h 文件中 a1.h定义一个变量: Unsignedchar a;然后在 a1.c 中调用 a1.h文件,可以正常运行;但是 a1.c 和 a2.c 中同时调用 a1.h 文件就会显现以上错误(基本全部编译器都一样);是由于编译
7、器在编译的时候,编译A1.C 发觉定义了 char a,在编译 a2.c 的时候又发觉定义了一次 char a;良好的编程习惯是不要在 .H 文件中定义变量,在大工程中头文件用得比较多的情形下尤为重要;可以在.H 中声明如: #define a 10,extern u8 a;Error:Address space overflow;说明我们使用的变量空间太大了, 51单片机内部 ram只有128byte,需要将变量修改为 XDATA (片外ram 变量)标志,如: unsigned charxdata a=0;对于我们不需要修改的参数,可以设置为 const/code如,CRC校验数组我们就可
8、以用 code来定义:usigned char code auchCRCHi = ;当然也可以通过以下设置来解决这个问题:这样定义后,变量将放在片外 ram 中,编译器将以xdata处理;Uncalledsegment: ignored for overlay process, segment:(某个函数)这是一个警告,看起来是没什么作用的,但是对于51 脆弱的欢迎下载精品学习资源FLASH ,这些 warn 是很重要的;这个警告是说某个函数没用到;这 个函数不仅占空间,并且他所附带的变量也会占空间的;Keil2 编译生产执行文件 .hex 文件时,这些没用到的代码(当然你的注释不会编译进去)
9、也会编译到执行文件中,使得执行文件会偏大;当然有些问题是编译器能通过,但工作起来是有问题的,比如: Usigned short a,b;/(该问题针对 51,8 位单片机) A=2000;B=a*500/3333;请问 b 的值是多少?本意是想得 300,但是 51 内核运算是用 16 位为来运算的,所以a*500=1000000;明显溢出了,所以他得到的 值为 0x4240,最终得到的值为 5.以下为个人使用 51 内核时的笔记:51 内存问题欢迎下载精品学习资源部 ramdata-可寻址片内 rambdata-可位寻址的片内 ramidata-可寻址片内 ram,答应拜望全部内欢迎下载精品
10、学习资源pdata-分页寻址片外ramMOVX R0256BYTE/页xdata-可寻址片外ram64k地址范畴code-程序储备区64k地址范畴 , 对应 MOVC DPTR51 的 RAM只有 128byte ,不能存放太多数据假如 memory model 选择的small ,定义 data128 就会显现 ERROR:SEGMENTTOO LARG;E 这样就必需将有些数据定义为 XDATA,放在外部 RAM中,或者配置 memorymodel 设置为 large ;假如要用到大数组,并且数组不需转变时,对数组设置为code,将他们放在FLASH里面,数组数据不能改;假如大数组需要修改
11、的,进行xdata 定义,然后对其进行赋值;内存使用1、内存定义一个变量后,他们的内容是不确定的,假如你要使用它,先初始化2、内存定义一个数值时,他们是以补码的形式存在,正数补码为本身,负数的补码为(除标志符外)取反 +1),便于运算,减法也可以做加法运算欢迎下载精品学习资源在使用串口时,波特率是通过单片机的时钟来运算的,所以我们用于参与运算的时钟与单片机实际时钟偏大,单片机就不能正常运行串口,最好时钟外部晶振来解决这个问题;我使用 51 单片机做东西,发觉我的全局变量用得太多后(xdata1000 ), 显现了部分程序不能正常运行,我就单单设置了一个全局变量a1000 (未用),部分程序不能
12、工作,然后将该变量去掉,OK;生成 LIB 文件也可以削减部分代码生成对于 51 单片机,时钟速度比较低,并且执行周期比较长(假设12 个时钟周期,假如是浮点数运算,执行时间更长),因此尽量少用中断实现功能; 比如ADC采集,假如我们用中断来做的话,假定设置ADC采样周期为 840 个时钟周期,里面的语句有 20 条,这样使得每 840 个周期都会显现一个中断,并且每次中断要铺张 240 个周期来 ADC处理,这样会是单片机运行主程序的速度减低30%,假如在加上其他的中断,那就不得了了,MCU估量就跑不动主程序了;对于 51 单片机空间较小,对于状态位就不要用byte 了,可以用 bit,这样
13、可以节省确定的空间; sbit用于寄存器的位;如: sbit abc=P11 ;对于 51 单片机,假如发觉程序跑的很慢,又不能用仿真的时候,要考虑是否调用死循环( 虽然你能保证他能跳出循环,但是假如你频繁使用它就会导致降低速度 );keil4添加 C51型号keil被 arm 公司收购后,我们下载的 keil4是不行以直接选择 51 单片机的, 经过一些修改才能下载 51 单片机以下可以完成 51 单片机型号库的添加,但是不能实现51 单片机的 PC模拟调试,版本不兼容!大家假如 51 和 ARM都要用到,可以安装一个 keil3以及一个keil4放在不同的盘中;先装 keil2/3,他们里
14、面有 51 单片机的型号库,装好KEIL4,将 keil2/3里面的 C51文件夹放入 keil4中,在 keil4中的 tool.ini加入 51 单片机的内容keil2/3中 TOOL.INI 文件复制出 C51内容过来即可,记住在之前加上地址 :UV2BOOK0=UV4RELEASE_NOTES.HTMuVisionR2eleaseNotes BOOK1=UV4UV2.HLPuVision2 UsersGuide Version=V2.2欢迎下载精品学习资源C166 PATH=C:Keil4C51BOOK0=HLPRELEASE.TXTReleaseNotesBOOK1=HLPGS166
15、.PDFuVision2 GettingStarted BOOK2=HLPC166.PDFC166UsersGuideBOOK3=HLPC166LIB.CHMC166LibraryFunctions,C BOOK4=HLPA166.PDFA166&UtilitiesUsersGuide BOOK5=HLPDBG166.CHMuVision2DebugCommands TDRV0=MONITORMON166.DLLKeilMonitor-166Driver TDRV1=OCDSCBC166.DLLKeilOCDS-166 Driver RTOS1=RTXTINY.DLLRTX-166Tiny R
16、TOS2=RTXFULL.DLLRTX-166FullVersion=V4.2C51 BOOK0=HLPRELEASE_NOTES.HTMReleaNsoetesBOOK1=HLPGS51.PDFuVision2 GettingStartedBOOK2=HLPC51.PDFC51UsersGuideBOOK3=HLPC51LIB.CHMC51LibraryFunctions,C BOOK4=HLPA51.PDFAssembler/Utilities BOOK5=HLPTR51.PDFRTX51TinyUsersGuideBOOK6=HLPDBG51.CHMuVision2DebugComman
17、ds BOOK7=ISD51ISD51.HTMISD51 InSystemDebugger TDRV0=BINMON51.DLLKeilMonitor-51Driver TDRV1=BINISD51.DLL KeilISD51In-SystemDebugger TDRV2=BINTE5_UV2.DLL TriscendE5Driver RTOS1=RTXTINY.DLLRTX-51TinyRTOS2=RTX51.DLLRTX-51FullVersion=V6.2 PATH=C:Kei4C51 SN=K1RIP-M2192-K014EC251 PATH=C:Keil4C51BOOK0=HLPRE
18、LEASE.TXTReleaseNotesBOOK1=HLPGS51.PDFuVision2 GettingStarted BOOK2=HLPC251.PDFC251UsersGuideBOOK3=HLPC251LIB.CHMC251LibraryFunctions,CBOOK4=HLPA51.PDFAssembler/Utilities BOOK5=HLPDBG251.CHMuVision2DebugCommands TDRV0=BINMON251.DLLKeilMonitor-251Driver Version=V3.2欢迎下载精品学习资源接下来介绍一下在 KEIL2 环境中新建一个工程:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 KEIL STC 单片机 学习心得 体会
限制150内