M16新老型号有差异,运行一段简单的程序见分晓!
搭建一个M16最小系统,在PD4\PD5\PD6\PD7端口分别接四只按键开关s1\s2\s3\s4。程序很简单,就是状态机按键扫描处理,程序在这里,
接入M16A,运行程序,按s1和s4蜂鸣器报警。
接入M16或M16L按键无反应。
难道M16新老型号时序有区别?
将主循环中的语句改为:
if(Trg==16) buzzer(200);
if(Trg==32) buzzer(200);
if(Trg==64) buzzer(200);
if(Trg==128) buzzer(200);
新老型号的M16都能顺利驱动蜂鸣器,为什么? 我尝试在主循环中加入延时,老型号的M16仍然对key==?这样的按键执行语句没有反应,有遇到过这样的情况的朋友吗? 晶振上有区别吧. 也可能熔丝位的设置有差别 是不是编译器的问题,感觉编译器的问题的可能性大 熔丝位, 编译环境的差异
ahong2hao 发表于 2014-10-28 11:38
晶振上有区别吧.
没有,都是外置8M晶振。 Gallen.Zhang 发表于 2014-10-28 11:50
也可能熔丝位的设置有差别
熔丝位设置相同。 Xiangxiang8 发表于 2014-10-28 12:06
是不是编译器的问题,感觉编译器的问题的可能性大
采用相同的编译器,ICCAVR7.2 按键口有没有上拉电阻?是不是内部上拉电阻设计不一样? richyhuang 发表于 2014-10-28 13:37
按键口有没有上拉电阻?是不是内部上拉电阻设计不一样?
请注意,我楼主位说的很清楚,相同的程序段,相同的电路,相同的编译器,相同的下载线,不同的就是芯片。 没注意过,你的蜂鸣器是直流还是交流? 本帖最后由 skylly3 于 2014-10-28 14:15 编辑
蜂鸣器是有源的还是无源的。
我的结论是KeyRead函数写的很糟糕。 yuanbao502 发表于 2014-10-28 13:59
没注意过,你的蜂鸣器是直流还是交流?
普通的5V有源蜂鸣器。通过8050驱动。这个有关系吗?用M16A就正常,用M16L或M16就不正常? 蜂鸣器交流和直流驱动方式不同 现在买回来的学习板上面有些是交流的。 用WINHEX看下HEX是否相同。或者写入同一个HEX文件试下。 yuanbao502 发表于 2014-10-28 15:02
现在买回来的学习板上面有些是交流的。
哎,难道我说的还不够清楚?我是相同的环境,相同的PCB和电路,不同的结果。 fsclub 发表于 2014-10-28 15:05
用WINHEX看下HEX是否相同。或者写入同一个HEX文件试下。
就是用同样的HEX文件。 头文件改了没?M16和M16A 表示不明觉历
我用16L的工程编译,烧些到16A是没问题的. jianjun42 发表于 2014-10-28 13:55
请注意,我楼主位说的很清楚,相同的程序段,相同的电路,相同的编译器,相同的下载线,不同的就是芯片。 ...
就是单片机内部的结构不知道有没有改变.
A是改变工艺的品种,也就是新一代的产品。 看芯片有没有运行? 用内部时钟试下 hutomy 发表于 2014-10-28 16:27
看芯片有没有运行? 用内部时钟试下
哎,能认真些看帖子吗?无语了。 jianjun42 发表于 2014-10-28 16:34
哎,能认真些看帖子吗?无语了。
你帖子有说晶震起震了吗,你怎么保证芯片运行了呢? 我也无语了 那看看它们的电气参数是不是一样的,估计IO的这方面不一样,如驱动力,是否带内置上拉之类的 hutomy 发表于 2014-10-28 23:20
你帖子有说晶震起震了吗,你怎么保证芯片运行了呢?
同样的环境,同样的代码,用M16A一切正常,换上M16或M16L按键无反应。
将主循环中的语句改为:
if(Trg==16) buzzer(200);
if(Trg==32) buzzer(200);
if(Trg==64) buzzer(200);
if(Trg==128) buzzer(200);
新老型号的M16都能顺利驱动蜂鸣器。
这说的还不够明白?如果没有起震,能驱动蜂鸣器?
页:
[1]