教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 小学教育 >

单片机程序设计编程规范(3)

来源:网络收集 时间:2026-08-28
导读: b0movy,#0;清RAMbank0 b0movz,#48 @@: clr@yz decmsz jmp@b clr@yz ret 2)系统寄存器必须进行初始化,比如说I/O口方向和输出电平等。 需要特别说明的是输出口的初始化必须按照下列顺序来处理: (1)设定相应I/O口输

b0movy,#0;清RAMbank0

b0movz,#48

@@:

clr@yz

decmsz

jmp@b

clr@yz

ret

2)系统寄存器必须进行初始化,比如说I/O口方向和输出电平等。

需要特别说明的是输出口的初始化必须按照下列顺序来处理:

(1)设定相应I/O口输出高低电平

(2)将相应I/O口为输出口

如此可确保MCU的I/O口从输入模式转为输出模式时不会有脉冲的存在。而在I/O口控制频繁变化(如通信)时更要引起注意。

例如:

(3)mova,#11111111b

;如果p1.0和p1.1原来为输入高电平,当直接切换为输出方式时会有高电平脉冲的输出,而这不是所希望的。

b0movp2m,a

mova,#11111100b

b0movp2,a

(4)mova,#00001100b

b0movp2,a

;这样处理p1.0和p1.1就避免了高电平脉冲的输出

mova,#11111111b;

b0movp2m,a

开机时后IOtoggle的作法

利用暂时没有用到的IO来做toggle可有效观察以下几点

1)系统是否正常开机

2)是否发生resetorwatchdogreset现象

3)程序是否重头运行

观察IOtogglepulsewidth可以了解InternalRC频率的准确性或是协助调整外部RC数值以上方法可以有效协助量产生产问题

开机时后TestMode的作法

TestMode必须在开机时后按下某些组合按键同时通过de-bounce才可进入testmode

2.按键处理

1)一般来说key的处理是所有程序的基础教科书里面所教导的key处理观念大多以delay循环与多次检查来处理弹跳事件,但是此种方法由于导入delay循环大大降低系统实时性,而大多使用者都没有警觉此问题依然延续此观念设计keyscanandde-bounce技巧,此份文件详细叙述key处理观念

2)家电产品中经常用到抗干扰的测试EFT,会从电源端打入噪声测试系统抗噪声能力,如果key处理不好会有key误动作产生,一般使用者会在keyscan地方加入电容以减低此问题的产生,但是此方法还是无法完全避免此问题同时还增加硬件成本,这里提出的de-bounce观念可以完全解决此问题

3)按键处理很多程序员都会将系统的程序设计与key程序结合没有分开结构,这造成很多程序就以key程序变成程序主体来运行,这里提出将key动作得出的keycode存到fifo(firstinfirstout)中,使得AP系统得以在有空闲的时候才处理keycode动作,程序架构自然形成

4)一般来说key处理都只侦测keydown,但是在某些系统确有keydownandkeyup的要求,这方面可以透过keyinbuffer的储存new/oldbufferXOR比对得到keyevent,更深一层的技巧侦测多按键处理更是需要利用new/oldbufferXOR来处理

合理的按键处理一般包括按键扫描、按键弹跳处理、按键输出转换等环节。

例如:

mn_key:

callkeyin;读取按键输入将资料储存在keyinbuf里面

callkeychk;按键弹跳处理

callkeycvt;弹跳处理后,将按键扫描码转换储存到FIFO里面!ret

①keyin――按键扫描,其主要负责将外部按键信息读入到内部buffer中。

常用的按键一般包括:直接按键、M*N矩阵式扫描按键、三角形按键、扩充按键、按键与其它周边共享I/O脚位等,部分场合还要考虑睡眠和按键的唤醒功能。下面进行分别说明:

1)直接按键

最简单的按键方式,通常作法利用MCU里面的pull-up电阻上拉,外面按键落地,平时没有按键的时候,MCUinput端口读到Hi,按键按下时候读到Low,如下图所示

2)M*N矩阵式扫描按键

最典型的按键扫描方式,有分Singlekey,multi-key扫描

单按键扫描:一个时间只允许一个按键动作同时也只读取一个按键

多按键扫描:一个时间允许一个以上的key按下,但是只读取最新按下的按键

扫描注意事项:一般来说扫描的作法有Outputportandinputport配合

Outputport1110

1101

1011

0111

依序送出0信号让inputport读取,但此时可能发生两件冲突事件需要注意

如果用output0andoutput1的组合来送出scanpattern,当客户同时按下同一排两组按键的时候,会有短路现象,传统作法是加入二极管diode来保护,现在单片机的作法则是利用outputàinputpull-upR的方式来达成.见图面说明

但是当使用Inputpull-upR时候又有另外一件事情要注意就是当1110à1101时候,bit0=output0àinputpull-up1,必须是bit0=output0àoutput1àinputpull-up中间必须经过output1的动作,这动作要协助output0的信号直接快速拉至Hi准位,然后再切换入inputmode,如果直接由output0àinputmode,此时会有一个较长的上升时间,导致keyscan错误

3)三角形按键有效的增加扫描按键数目,见图面说明

4)扩充按键可以加上diode增加keyscan数目见图面说明

5)按键与其它周边共享I/O脚位

6)ADC与RF接收机杂音避免的方式

②keychk――按键弹跳处理,其主要负责滤除按键输入口灌入的杂讯或按键弹跳杂波。

1)一般建议弹跳时间处理约在70mS~100mS,EFT特性如果要好可以更加长到使用者可接受到最常时间200mS

2)弹跳时间的处理并非用delayloop延迟,这会降低系统的实时性与反应力必须检查的动作放在主程序循环里面配合keychattime的递减来完成!

3)如果主循环绕圈时间1mS那按键稳定检查连续次数可高达100次左右这对于Key处理来说是非常稳定的

4)弹跳的检查是连续检查key变化后维持相同状态100mS,比如说key按下后Hi变成Low这时候程序侦测到输入有异动便开启检查时间机制,当程序连续检查100mS都发现Low没有改变的时候便发出keyevent,此时才有按键发生.

5)关于de-bounce的程序验证可透过修改弹跳时间测试,比如说故意将弹跳时间改1sec.观察在一秒内的按键动作是否都不成立,只有按键持续达一秒以上才有动作产生,确认后再将弹跳时间改回

③keycvt――按键输出转换,其主要负责将确认的按键信息进行转换和存储。

1)KeyCVT主要工作将经过de-bounce的keybuffer跟之前所得到的key相比对,看看新的keyevent为何,转换出来后存储到keybufferorkeyfifo甚至直接进入apfifo

2)将keycode储存到fifo中是一个非常重要的观念,这里展示出Key处理是一个独立的物件程序,他的运行跟其他程序都没有相关,唯一对外的界面interface就是fifo.而key的处理方式端看当时系统的status还有AP设计的流程才做出相对应的工作Task.

3.计时系统

计时系统一般包括定时器初始化和定时设置及处理两部分。

1)定时器初始化部分又包括:

(1)定时器控制寄存器的设定

(2)相关用户寄存器的设定

(3)定时时间的初始化

2)定时设置及处理:由于系统里面会经常在不同的时间点执行不同的动作,所以定时的设置及处理变的尤为重要。例如需要以下时间的定时:

10ms定时:每10ms产生定时到达标志位

100ms定时:每100ms产生定时到达标志位

1000ms定时:每1000ms产生定时到达标志位

一般来说,10ms的工作可放在中断处理程序或主程序循环圈中执行,至于采取哪种方式主要是看时间准确性的要求。100ms以上的工作如果没有特别的要求建议放在主程序循环中执行。此外在系统时间设计中,时间不准确的问题经常发生,一般来源于时基的计算与处理。可以在定时中断处理程序中输出一个方波来检查中断发生的时间。

定时设置及处理有两种方法可作参考:

(1)计算法:利用MCU本身的定时中断作出10ms的时基,再利用计算的方法作出100ms、1000ms的定时。

…… 此处隐藏:3356字,全部文档内容请下载后查看。喜欢就下载吧 ……
单片机程序设计编程规范(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/42567.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)