单片机实验问题集锦.ppt

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机实验问题集锦

单片机实验中的主要问题 主要问题 联机下载 编程软件与C语言语法 编程技巧 1.1 检查串口线连接是否正确 电脑有两个串口接口,按上下排列。在上的串口为COM1,在下的串口为COM2。大多数机器使用的是COM1,因此在下载程序配置中设置的是COM1,并且串口线与电脑的上串口相连接。 如果发现在检查串口接线正确,仍无法联机下载时,可以检查串口线是否与电脑和实验系统连接良好,或将电脑的串口接口换到另外一个电脑串口接口上,并在配置中更改使用的串口(COM1或者COM2)。 1.2 检查下载软件WSD的设置 设置晶振频率 设置物理连接对应的串口端口 1.3 复位操作不正确 正确复位单片机,使其进入等待程序烧写状态,即先按下PSEN键,在保持PSEN按下的同时,按下RESET键使系统复位(直至指示灯全亮,数码管全灭)然后抬起RESET键,最后再抬起PSEN 键; 如果复位不正确,适当延长放开RESET后,PSEN按下的时间,而不是延长PSEN和RESET同时按下的时间。 1.4无法生成下载程序 如果程序编译后无hex文件,需要修改项目属性,在uVision2环境的左边资源浏览器中的【Target 1】上单击右键,选择【Operations for Target‘Target 1’】,选择Output 选项页面,将【Create HEX File:】一项的前面方框中打上钩。然后重新编译即可。 2.1 uVision程序出错 uVision程序出错,无法创建新项目,需要检查电脑系统时间,置成当前时间(日期)。如还出错,重装该软件,重启。 2.2 进制问题 Keil C51支持10进制和16进制数据格式,16进制以0x开头,如0x1C。在对特殊寄存器赋值时建议采用16进制。 2.3 运算符“与”()和“或”(|) 用“与”操作可以在不改变其它位的情况下对某些位写0。“或”操作可以在不改变其它位的情况下对某些位写1。例如要向P1端口的第三位和第五位写1,第一位和第七位写0,可以用下面语句实现: P1 = P1 0x7D; P1 = P1 | 0x28; 其中0x7D为00x28为0 2.4 逻辑判断符“与”()和“或”(||) 在判断语句中,如果存在两个条件的组合判断,就需要用到逻辑连接词“与”和“或”。虽然逻辑判断符和运算符都是使用“与”和“或”,但是两者有很大的不同,逻辑判断符的两个操作数要求是布尔型,对于非零的非布尔型的变量会被强制转换成1。两运算的不同举例如下: 0x2F 0x08 = 0x08; 0x2F 0x08 = true(1) 2.5运算符和逻辑判断符的优先级问题 使用运算符和逻辑判断符有优先级问题,在使用运算和判断的组合时请尽量使用括号来保证运算和判断的顺序。 操作和 | 操作的优先级小于比较符号(= =,=, =),因此下面语句运行会出现问题:if(P10x08 = = 0x08 ),这条语句程序会解读为:if(P1(0x08 = = 0x08))。因此上条语句的正确写法应该为if((P10x08) = = 0x08 )。 2.6 “除”(/)和“模”(%)运算 简单地说“除”就是整数除法中的取整数操作,“模”也就是整数除法中的取余数操作。举例来说:1234/100 = 12; 1234%100 = 34; 2.7 全角/半角问题 在编程中还有一个错误就是输入符号的半角和全角的问题。编译器只认半角字符,如果采用全角字符,就会报告编译错误。也就是我们所说的中文字符和英文字符的问题。由于全角的英文字符平时很少用,而且全角的英文和半角的英文差别也比较大,所以平时不会出错。但是全角的符号和半角的符号区别并不大,容易混用,特别是从文字编辑器上整段拷贝代码时更有可能出现错误。 3.1 按键输入判断 要使用P1输入按键的信号,必须首先要向P1相应的位输入0。 为了实现按键后count加1,下面的程序有什么问题? P1 = 0; count=0; while(1) { if(P1 == 0x08) { if(P1 == 0) { count = count + 1; } } } 3.2 单击按键单次响应逻辑 很多同学为了实现单次按下并不出发多次动作,在程序中加入了延时环节,这样的程序如果按键时间过长一样也会产生连续动作,下面的程序提供了一种按键单次相应程序,采用了逻辑锁定的概念。 P1 = 0; While(1) { If(((P10x08) == 0x08) (flag == 0)) { Count = count + 1; Flag = 1; } If((P10x08) == 0) {

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档