欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年KEIL,STC单片机学习心得体会.docx

    • 资源ID:12791608       资源大小:693.37KB        全文页数:22页
    • 资源格式: DOCX        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年KEIL,STC单片机学习心得体会.docx

    精品学习资源51 单片机学习心得以下为本人学习 51 内核的个人心得,并且表达才能不是很好,如各路高手发觉小弟说的不对的地方,请多指教!为什么要用 51 单片机, 51 到现在算衰落的产品,但是它仍是有很大的市场,这是为什么?用性价比来说这个问题;一套产品用1 块钱能解决的问题假如搞成 10 块,在批量生产 10W 套后,你看看能节省到少 MONEY .本人是用 keil 来学习 51 单片机的,现在就利用KEIL2 编程心得;个人仍是想说一句话:成才主在己,有难先网络;师傅再强自己不下工夫是不能成功的,别人自学也能成才;并且基本上我们能遇到的方向性问题网上基本都有答案了;为什么说方向性的问题 呢?比如:你可以在网上问如何做饭,但是你不能问:为什么我的饭做得不好吃;很多 51 单片机是没有在线仿真的,这样就需要我们想方设法做调试,指示灯,蜂鸣器,串口等等;可以通过串口发送一些内容到上位机便于观看;当然串口仍是没有仿真器实在,比如:Unsignedchar a,b;/我想将 A 左移 8 位后加上 b 得到一个 16 进制的数;这是针对于 c 语言问题;Unsignedshort c;A=0xaa;b=0xbb;C=Unsignedshorta<<8+b;请问 C 的值是多少?对于新手来说可能会犯的错误,可能我们会答成 0xaabb;其实并不是这样的, <<要比+的优先级低;所以正确的写法为 c=( Unsignedshort)a<<8+b;这种情形下没用用仿真器来 看 , 经 验 不 足 是 很 难 发 现 这 段 代 码 有 问 题 的 ;If0x50&0xf0=0x50, 请问该语句为真仍是为假?仍是优先级问题;在不确认优先级的情形下,大家确定要知道: 优先级是最高的;附录 2C语言中的运算符及其优先级优先级运算符名称或含义数组下标使用形式数组名 常量表达式 (表达式) / 函数名 形参表 结合方向说明圆括号1.左到右2- 类型 成员选择(对象) 成员选择(指针)负号运算符强制类型转换对象 . 成员名->对象指针 -> 成员名- 表达式 数据类型 表达式右到左单目运算符欢迎下载精品学习资源+自增运算符+变量名 / 变量名+单目运算符-自减运算符- 变量名 / 变量名-单目运算符*取值运算符* 指针变量单目运算符&取地址运算符&变量名单目运算符.规律非运算符. 表达式单目运算符按位取反运算符表达式单目运算符sizeof长度运算符sizeof表达式/除表达式 / 表达式双目运算符*%乘余数(取模)表达式 * 表达式整型表达式 / 整型表达式左到右双目运算符双目运算符+-加减表达式 +表达式表达式 - 表达式左到右双目运算符双目运算符<<>>左移右移变量 <<表达式变量 >>表达式左到右双目运算符双目运算符>大于表达式 >表达式双目运算符>=大于等于表达式 >=表达式左到右双目运算符<小于表达式 <表达式双目运算符<=小于等于表达式 <=表达式双目运算符=等于表达式 =表达式双目运算符.=不等于表达式 .=表达式左到右双目运算符8&按位与表达式 &表达式左到右双目运算符9按位异或表达式 表达式左到右双目运算符10|按位或表达式 | 表达式左到右双目运算符11&&规律与表达式 &&表达式左到右双目运算符12|规律或表达式 | 表达式左到右双目运算符表达式 1. 表达式2:表达式 3=/=赋值运算符除后赋值变量 =表达式变量 /= 表达式*=乘后赋值变量 *= 表达式%=取模后赋值变量 %=表达式14+=-=加后赋值减后赋值变量 +=表达式变量 -= 表达式右到左<<=>>=左移后赋值右移后赋值变量 <<=表达式变量 >>=表达式&=按位与后赋值变量 &=表达式=|=按位异或后赋值按位或后赋值变量 =表达式变量 |= 表达式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;但是 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 文件就会显现以上错误(基本全部编译器都一样);是由于编译器在编译的时候,编译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校验数组我们就可以用 code来定义:usigned char code auchCRCHi = ;当然也可以通过以下设置来解决这个问题:这样定义后,变量将放在片外 ram 中,编译器将以xdata处理;Uncalledsegment: ignored for overlay process, segment:(某个函数)这是一个警告,看起来是没什么作用的,但是对于51 脆弱的欢迎下载精品学习资源FLASH ,这些 warn 是很重要的;这个警告是说某个函数没用到;这 个函数不仅占空间,并且他所附带的变量也会占空间的;Keil2 编译生产执行文件 .hex 文件时,这些没用到的代码(当然你的注释不会编译进去)也会编译到执行文件中,使得执行文件会偏大;当然有些问题是编译器能通过,但工作起来是有问题的,比如: 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,答应拜望全部内欢迎下载精品学习资源pdata->分页寻址片外ramMOVX R0256BYTE/页xdata->可寻址片外ram64k地址范畴code->程序储备区64k地址范畴 , 对应 MOVC DPTR51 的 RAM只有 128byte ,不能存放太多数据假如 memory model 选择的small ,定义 data>128 就会显现 'ERROR':SEGMENTTOO LARG;E 这样就必需将有些数据定义为 XDATA,放在外部 RAM中,或者配置 memorymodel 设置为 large ;假如要用到大数组,并且数组不需转变时,对数组设置为code,将他们放在FLASH里面,数组数据不能改;假如大数组需要修改的,进行xdata 定义,然后对其进行赋值;内存使用1、内存定义一个变量后,他们的内容是不确定的,假如你要使用它,先初始化2、内存定义一个数值时,他们是以补码的形式存在,正数补码为本身,负数的补码为(除标志符外)取反 +1),便于运算,减法也可以做加法运算欢迎下载精品学习资源在使用串口时,波特率是通过单片机的时钟来运算的,所以我们用于参与运算的时钟与单片机实际时钟偏大,单片机就不能正常运行串口,最好时钟外部晶振来解决这个问题;我使用 51 单片机做东西,发觉我的全局变量用得太多后(xdata>1000 ), 显现了部分程序不能正常运行,我就单单设置了一个全局变量a1000 (未用),部分程序不能工作,然后将该变量去掉,OK;生成 LIB 文件也可以削减部分代码生成对于 51 单片机,时钟速度比较低,并且执行周期比较长(假设12 个时钟周期,假如是浮点数运算,执行时间更长),因此尽量少用中断实现功能; 比如ADC采集,假如我们用中断来做的话,假定设置ADC采样周期为 840 个时钟周期,里面的语句有 20 条,这样使得每 840 个周期都会显现一个中断,并且每次中断要铺张 240 个周期来 ADC处理,这样会是单片机运行主程序的速度减低30%,假如在加上其他的中断,那就不得了了,MCU估量就跑不动主程序了;对于 51 单片机空间较小,对于状态位就不要用byte 了,可以用 bit,这样可以节省确定的空间; sbit用于寄存器的位;如: sbit abc=P11 ;对于 51 单片机,假如发觉程序跑的很慢,又不能用仿真的时候,要考虑是否调用死循环( 虽然你能保证他能跳出循环,但是假如你频繁使用它就会导致降低速度 );keil4添加 C51型号keil被 arm 公司收购后,我们下载的 keil4是不行以直接选择 51 单片机的, 经过一些修改才能下载 51 单片机以下可以完成 51 单片机型号库的添加,但是不能实现51 单片机的 PC模拟调试,版本不兼容!大家假如 51 和 ARM都要用到,可以安装一个 keil3以及一个keil4放在不同的盘中;先装 keil2/3,他们里面有 51 单片机的型号库,装好KEIL4,将 keil2/3里面的 C51文件夹放入 keil4中,在 keil4中的 tool.ini加入 51 单片机的内容keil2/3中 TOOL.INI 文件复制出 C51内容过来即可,记住在之前加上地址 :UV2BOOK0=UV4RELEASE_NOTES.HTM"uVisionR2eleaseNotes" BOOK1=UV4UV2.HLP"uVision2 User'sGuide" Version=V2.2欢迎下载精品学习资源C166 PATH="C:Keil4C51"BOOK0=HLPRELEASE.TXT"ReleaseNotes"BOOK1=HLPGS166.PDF"uVision2 GettingStarted" BOOK2=HLPC166.PDF"C166User'sGuide"BOOK3=HLPC166LIB.CHM"C166LibraryFunctions",C BOOK4=HLPA166.PDF"A166&UtilitiesUser'sGuide" BOOK5=HLPDBG166.CHM"uVision2DebugCommands" TDRV0=MONITORMON166.DL"LKeilMonitor-166Driver" TDRV1=OCDSCBC166.DLL"KeilOCDS-166 Driver" RTOS1=RTXTINY.DLL"RTX-166Tiny" RTOS2=RTXFULL.DLL"RTX-166Full"Version=V4.2C51 BOOK0=HLPRELEASE_NOTES.HTM"ReleaNsoetes"BOOK1=HLPGS51.PDF"uVision2 GettingStarted"BOOK2=HLPC51.PDF"C51User'sGuide"BOOK3=HLPC51LIB.CHM"C51LibraryFunctions",C BOOK4=HLPA51.PDF"Assembler/Utilities" BOOK5=HLPTR51.PDF"RTX51TinyUser'sGuide"BOOK6=HLPDBG51.CHM"uVision2DebugCommands" BOOK7=ISD51ISD51.HTM"ISD51 InSystemDebugger" TDRV0=BINMON51.DLL"KeilMonitor-51Driver" TDRV1=BINISD51.DLL "KeilISD51In-SystemDebugger" TDRV2=BINTE5_UV2.DLL "TriscendE5Driver" RTOS1=RTXTINY.DLL"RTX-51Tiny"RTOS2=RTX51.DLL"RTX-51Full"Version=V6.2 PATH="C:Kei4C51" SN=K1RIP-M2192-K014EC251 PATH="C:Keil4C51"BOOK0=HLPRELEASE.TXT"ReleaseNotes"BOOK1=HLPGS51.PDF"uVision2 GettingStarted" BOOK2=HLPC251.PDF"C251User'sGuide"BOOK3=HLPC251LIB.CHM"C251LibraryFunctions",CBOOK4=HLPA51.PDF"Assembler/Utilities" BOOK5=HLPDBG251.CHM"uVision2DebugCommands" TDRV0=BINMON251.DLL"KeilMonitor-251Driver" Version=V3.2欢迎下载精品学习资源接下来介绍一下在 KEIL2 环境中新建一个工程: 打开 keil2,点击 projectnew project然后选择路径,填入工程名字,点击:储存接下来就是选择单片机型号,对应你所用的单片机内核来选择型号:我这里用的是STC 单片机,内核是52 故选择 ATMEL公司的89c52;假如你需要重新选择内核可以一下途径:欢迎下载精品学习资源工程建立完成后,添加文件:输入内容后储存,然后添加文件,假如已有.c,.h 文件了,可以直接把那些文件拷到工程目录下,然后再添加,便于爱护:欢迎下载精品学习资源完成后,我们就要对工程的选项进行配置:欢迎下载精品学习资源欢迎下载精品学习资源然后编译工程成功后在指定目录中会生成.hex文件;以下我就共享一下我在keil2 环境用 STC5604AD 单片机的串口代欢迎下载精品学习资源码:/#include <Stc12c54.h>/#include <mcu.h> #include <config.h> u8 receiveError=0;/u8 receiveflag=0;UART1 UART1Receive;u8 code auchCRCHi=0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80,0x41, 0x00, 0xC1, 0x81,0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1,0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00,0xC1, 0x81, 0x40, 0x01,0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,0x40, 0x00, 0xC1, 0x81,0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,0xC0, 0x80, 0x41, 0x01,0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80,0x41, 0x00, 0xC1, 0x81,0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00,0xC1, 0x81, 0x40, 0x01,0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80,0x41, 0x00, 0xC1, 0x81,0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,0xC0, 0x80, 0x41, 0x01,0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80,欢迎下载精品学习资源0x41, 0x00, 0xC1, 0x81,0x40 ;/ CRC 低位字节值表/u8 auchCRCLo= ;u8 code auchCRCLo=0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07,0xC7, 0x05, 0xC5, 0xC4,0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA,0xCB, 0x0B, 0xC9, 0x09,0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E,0xDE, 0xDF, 0x1F, 0xDD,0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6,0xD2, 0x12, 0x13, 0xD3,0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2,0x32, 0x36, 0xF6, 0xF7,0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F,0x3E, 0xFE, 0xFA, 0x3A,0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB,0x2B, 0x2A, 0xEA, 0xEE,0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5,0x27, 0xE7, 0xE6, 0x26,0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61,0xA1, 0x63, 0xA3, 0xA2,0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC,0xAD, 0x6D, 0xAF, 0x6F,0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78,0xB8, 0xB9, 0x79, 0xBB,0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C,0xB4, 0x74, 0x75, 0xB5,0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70,0xB0, 0x50, 0x90, 0x91,0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94,0x54, 0x9C, 0x5C,0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99,0x59, 0x58, 0x98, 0x88,0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F,0x8D, 0x4D, 0x4C, 0x8C,0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83,0x41, 0x81, 0x80,0x40 ;欢迎下载精品学习资源u16 CRC16u8 *puchMsg,u8 usDataLenu8 uchCRCHi = 0xFF ;u8 uchCRCLo = 0xFF ;u16 uIndex ;while usDataLen- uIndex=uchCRCHi*puchMsg+ ;uchCRCHi=uchCRCLoauchCRCHiuIndex ;uchCRCLo=auchCRCLouIndex ;return uchCRCHi<<8 + uchCRCLo ;void UART_initSCON=0x50;/串行口把握寄存器 SCON;方式 1,单机对单机,答应接收;/TMOD=0x21 ;/定时器方式寄存器 TMOD ;与 INT0 有关,定时器 T1 模式,工作方式 2;/PCON=PCON&0x7f ;/PCON;7=1 翻倍,这里不翻倍TH1=0xed;/这里是 6M 晶振,波特率设成 4800 误差小, STC用 AUXR |=0x40 后快 12 倍模式TL1=0xed;/D9=4800,b1=2400,63=1200AUXR |=0x40 ;/定时器工作于 1T 模式,波特率快 12 倍/启动中断EA=1 ;/答应中断总把握位, 1 开启中断, 0 关闭中断ES=1;/串行口中断答应把握位,位地址ACH ;TR1=1;/T1 定时器启停位, 0 关闭定时器, 1 开启定时器/接受缓冲区初始化UART1Receive.ReceiveDataLen=0;UART1Receive.ProPointer=0;UART1Receive.IndexPointer=UART1Receive.ProPointer;欢迎下载精品学习资源void ReceiveOrSendFinishFlaginterrupt 4ifRI/RI :接收中断标志位,用于指示一帧数据信息是否接收完;UART1Receive.ReceiveDataUART1Receive.ProPointer=SBUF;/SBUF:串行数据缓冲器UART1Receive.ProPointer=UART1Receive.ProPointer+1%REC EIVEBUFLEN;UART1Receive.ReceiveDataLen+;ifUART1Receive.ReceiveDataLen>RECEIVEBUFLEN-1UART1Receive.ReceiveDataLen=0;UART1Receive.IndexPointer=UART1Receive.ProPointer=0;receiveError+;RI=0;/else ifTI/TI :发送中断标志位,用于指示一帧数据发送是否完成;/TI=0 ;/u8 GetDataFromUART1Bufferu8 *outBuffer,u8 GetLenu8 i=0;ifGetLen<=UART1Receive.ReceiveDataLenfori=0 ;i<GetLen;i+outBufferi=UART1Receive.ReceiveDataUART1Receive.Index欢迎下载精品学习资源Pointer+%RECEIVEBUFLEN ;UART1Receive.ReceiveDataLen-;return 1;return 0;void SendOneDataByteu8 senddataTI=0 ;SBUF=senddata;while.TI;TI=0 ;void SendDataBytesu8 *senddata,u8 sendDataLenu8 i=0;for i=0 ;i<sendDataLen;i+SendOneDataBytesenddatai;/WDT_CONTR=0x3f ;void delayu16 au16 b;b=a;whileb>1 b-;void mdelayu16 au16 b;b=a+1;whileb>1delay350;欢迎下载精品学习资源b-;void testuartu8 receivebuf32=0x11,0x55,0x2f,0x08,0x02,0x05,0x10,0x05,0x00,0x00, 0x00 ;/=0x00, 0x55, 0xBA, 0x02, 0x02, 0x00, 0x00, 0x00 ;u8sendbuf32=0xaa,0x55,0x2f,0x08,0x02,0x05,0x10,0x05,0x00,0x00,0x0 0 ;/sendbuf0=0xaa;/sendbuf1=0xbb;/sendbuf2=0xcc;/sendbuf3=0xdd;/sendbuf4=0xee;/sendbuf5=0xff ;/u8 i;u16 temp;/fori=0 ;i<32;i+/sendbufi=i ;/UART_init ;/WDT_CONTR=0x3f ;while1/ifUART1Receive.ReceiveData0=0xa5&&UART1Receive.ReceiveData1=0x5aifUART1Receive.ReceiveDataLen>=8GetDataFromUART1Bufferreceivebuf, 1;ifreceivebuf0=0xaa/&&receivebuf1=0x5a/&&receivebuf2=0x11&&receivebuf3=0x99欢迎下载精品学习资源GetDataFromUART1Bufferreceivebuf+1, 7;temp=CRC16receivebuf,8;receivebuf8=temp>>8; receivebuf9=temp;SendDataBytesreceivebuf,10;/SendDataBytesreceivebuf, 4;/sendbuf0=sendbuf0+1;/SendOneDataByte0xaa;/SendOneDataByte0x5a;/WDT_CONTR=0x3f ;/mdelay500;WDT_CONTR=0x3f ;H 文件/#include "const.h"#ifndef _UART_H #define _UART_H/#include "config.h"/struct UART1/u8 ReceiveData32;/u8 SendData32;/u8 ReceiveDataLen;/u8 ProPointer;/u8 IndexPointer;/ ;#define RECEIVEBUFLEN 32typedef struct uart欢迎下载精品学习资源unsigned charReceiveDataRECEIVEBUFLEN;/缓冲区/u8 SendData32;unsigned char ReceiveDataLe;n /接收长度unsigned char ProPointe;r /生产欢迎下载精品学习资源unsigned char IndexPointe;rUART1 ;extern UART1 UART1Receive;/消费指针欢迎下载精品学习资源void UART_init ;/void Recive_start;/void Tran_start;/void Trans_prepare_datavoid;/void Crc16u8 *puchMsg,u8 usDataLen;/void UART_init ;void ReceiveOrSendFinishFlag;/interrupt 4;u8GetDataFromUART1Bufferu8 *outBuffer,u8 GetLen;void SendOneDataByteu8 senddata;void SendDataBytesu8 *senddata,u8 sendDataLen;void testuart;void delayu16 a;void mdelayu16 a;u16 CRC16u8 *puchMsg,u8 usDataLen;/ex

    注意事项

    本文(2022年KEIL,STC单片机学习心得体会.docx)为本站会员(Che****ry)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开