单片机编程注意事项_第1页
单片机编程注意事项_第2页
单片机编程注意事项_第3页
单片机编程注意事项_第4页
单片机编程注意事项_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1、单片编程注意事项、1、变量或常量定义(例如,var 1 equu 50h var 2 equi 51h sp _ vale qu 65h,其中前两项是变量定义,第三项是常量定义,定义上没有差异,仅在使用时使用)。例如:#sp_val mov var1,#21h注意:equ表示等价关系,在编译或编译器中使用。2,2,程序框架;变量常量定义,用于帮助程序读取和修改方便的var 1 equu 50h var 2 equi 51h sp _ vale qu 65h;中断与仪表org 00h ajp main org 0b h ajp time 0 _ serv;程序门户网站org 100h mai

2、n: mov sp,# sp _ val堆栈初始位置clr p3.5设置;能量,图,3,mov sp,# sp _ val call initial _ sub初始化函数主程序循环,必须具有loop :sjmp loop设置计时器,initial _ sub : mov tmod,# 01h mov tl0,# 78h mov th0,# 0ech setb et0 setb tr0 setb ea ret,4,计时器中断服务程序time 0 _ serv: mov tl0、# 78h mov th0、# 0ech.reti其他中断服务程序或函数;编译结束标记end注意:1,不要从服务中断程序

3、调用2作为call。如果服务中断程序或函数内有跳转命令,请不要移至实体外。同样,不要在其他地方跳转指令跳转到服务程序或函数内部。5,3,显示程序;必须使用以下函数创建:12数码管显示函数disf 12: mov dptr、# 9000 h mov a、dis var 12Disvar12是预定义movx dptr,a ret的变量。调用时movndis var12,#?-嗯?H call disf12其他数字显示函数使用6,4,显示移位程序显示变量v1,v2和v3,为了方便起见,在变量后分别显示l和h,并显示变量的低4位和高4位。例如,7,1,2,3,4,5,6、v1l、v11h、v2l、v2

4、h、v2h、v3l、v3h、new、1,2,3,4,5、vnew、v1l、v1h、v2h mov r0、# v3 mov a、v2 xchd a、 r0 mov v2、a、mov r0、# v2 mov a、# v1 xchd a、 r0 mov v1、a、8、5、 根据键盘要求,将中断时间设置为20毫秒是更合适的mov tl0、#00h mov th0、#0b8h计算方法11.0592/12=0.9216 MHz 1/0.9216 MHz=1.085 ms=1.085 us * x验证表格的一种方法:mov dptr、# 0c000h movx a、 dptrcpl a mov keyinp

5、utl、a anl a、#0fh mov dptr、# table 1 movc a、 a dptr、100 1 2 3 4 5 6 7 8 db 55h,0f4h,0f3h,55h,0f2h,55h,55h,55h,0f1h table 23:0 1 2 3 4 5 6 8 db 55h,44h,07h,55h,04h,55h,55h,55h,55h,01h另一半也一样,第11,第一个图像以较高的级别工作。低级别操作,第二个图像的抖动时间通常为10-20毫秒,或者可以解除。使用计时器读取键盘的示意图如下:无键状态、第一个键击发生、时间中断、20毫秒时间间隔、可抖动、稳定状态按下、第一次按下键

6、、抖动、无键状态、20毫秒时间间隔该方法可以在第一次确定键盘按压有延迟的情况下消除第一次抖动,并在第一次判断中使用延迟解除键,延迟长度可以选择30毫秒以允许最大限度的抖动,并且该方法效率低下。2、作为延迟计时器的方法,在确定第一次按下了键后,启动计时器或计时器内的计数器,删除第一个抖动,确定第一个键抬起后,启动计时器或计时器内的计数器,消除第二个抖动。3、状态判断的使用方法是,判断第一次按下了键,然后启动计数器,如果读取键没有更改,计数器加1,如果读取键发生变化(即出现抖动),计数器清洗,判断计数器的值为3时,表示第一次抖动发生了,进入键盘按键的稳定状态,此时等待键抬起,在第一次键抬起后启动计

7、数器,读取,13,软件抖动方法4,在线引入的方法(此方法仅供参考,并非必需),有很多方法可以设置3个变量Kready、Ktemp和Kinput,并将定时中断持续时间设置为20毫秒。周期性中断服务程序读取密钥,并将读取的数据存储在变量Kinput中。变量Kready是所需的稳定密钥信息。Ktemp是中间变量,其值是最后一个Kinput。kera dyn=k temp k input kre adyn-1(k tempk input)(1)k temp=k input(2),14,15,16,1小时是未按键的初始状态时间2的Kinput为1,但时间3的Kinput再次变为0。也就是说,时间2的Ki

8、nput是0,因为1可能不按键而直接干扰。在时间4上同时刻下2的情况也类似,但是如果时间4和5上的Kinput为1,则存在按键,并且时间5上的Kready为1。Kinput在7点是0,但是5小时、6小时、8点Kinput是1。这意味着按键一直被按下,只会干扰,Kready保持为1。Kinput为0的时间9,10表示提升关键点,时间10点Kready为0。17,通过分析表明,Kready是消除抖动、排除某种程度干扰的有效关键消息。从按键到Kready为1,最大时间约为40毫秒,最短时间约为20毫秒。此时间取决于按下键时预定的中断周期时间。如果继续按键,有效的密钥信息将以20毫秒的间隔重复输出。您

9、可以看到目前的Kready值与Ktemp和Kinput相关,也与Kready之前时间点的值相关。我们把Keady的当前时刻作为变量写下了KreadynKreadyn-1作为参数与Ktemp,Kinput一起记录,18,19,Kready和Kreadyn-1的初始设置为0,kera dyn=k temp k input kre adyn-1(k tempk iii有些地址不需要重复键值。按一次键就够了。有些应用程序系统需要使用两个关键点值,例如,在电视监视系统的控制关键点控制盘中控制镜头云,重复关键点值,不需要其他命令关键点。要满足这些要求,必须扩展表达式(1)。为此,引入了另外两个变量和一个常

10、量。分别是Koutput、Kstore和Kconst。Koutput输出为最终关键点信息。Kstore用作上次抖动后保存密钥信息的中间变量。Kconst是常数,必须先给出它的值。0对应于非重复键,1对应于重复键。显示Koutput、Kconst、Kstore、Kready之间关系的真表,21,22是Kstore中最后一个Kready的表达式(1)的扩展(如图2所示),从而获得了最简单的逻辑表达式。表连接(3)是包含表达式(1)的一个常规逻辑表达式。这用于具有现有重复密钥输出和非重复密钥输出的系统。对于仅输出重复键的系统,如果Kconst全部为1,则Koutput=Kready,因此只需要使用表

11、达式(1)。如果系统只要求非重复键输出,则Kconst全部为零,表达式(3)将简化为。这在按下时有效,在抬起时有效。例如,使用30毫秒计时器的Kready的相反,以及上面的Kstroe,23。在计时中断服务程序中定义键盘变量keyinputl equ 40h keyoutl equ 42h keyinputh e43h keypreh equ 44h keyouth equ 45h初始化程序中设置变量的初始值mov keyinputl,# 00h mov key prel,# 00h Mme a mov key pre、keyinputl JZ key right anl a、# 0fh mov dptr、#table1 movc a、 a dptr、25、key input、key pre、 在此,更改、无关键点状态、前一分钟有抖动。其中,更改,26,在上例中,未删除某些键盘(某些错误)的抖动。有两种方法。一种是增加计时长度,然后使用以下示例:定义变量,添加两个变量,后面的键盘值keypprel equ 46h keyppreh equ 4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论