单片机原理实验讲义(4)

2019-01-27 18:58

单片机原理实验

①每个模块应具有独立的功能,完成一个明确的任务。

②模块之间的控制耦合应尽量简单,数据耦合应尽量少,这就是模块间的低耦合性。控制耦合是指模块进入和退出的条件及方式,数据耦合是指模块间的信息交换方式、交换量的多少及交换的频繁程度。

③模块长度适中。模块语句的长度通常在20条~100条的范围较合适。模块太长时,分析和调试比较困难,失去了模块化程序结构的优越性;过短则模块的连接太复杂,也不合适。

例,如图3.3所示程序结构框架,可将模块分成主程序、初始化模块、读键状态及去抖处理子程序、数码管动态扫描显示子程序4个模块。采用汇编语言编程时,主程序清单如下(文件名MAIN.ASM): ;====变量定义段==== CS0 BIT P2.0 ;个位位选 CS1 CS2 CS3 CS4 DSW DSB0 DSB1 DSB2 DSB3

BIT P2.1 BIT P2.2 BIT P2.3 BIT P2.4 EQU 30H EQU 31H EQU 32H EQU 33H EQU 34H

;十位位选 ;百位位选 ;千位位选 ;LED灯位选 ;位选计数

;显示缓冲单元个位 ;显示缓冲单元十位 ;显示缓冲单元百位 ;显示缓冲单元千位

DSB4 EQU 20H ;显示缓冲单元指示灯状态 LD1 BIT DSB4.0 ;指示灯LD1控制位 ???? ;指示灯LD2~7控制位 LD8 BIT DSB4.7 ;指示灯LD8控制位 KEY EQU 21H ;键状态字 SW1 BIT KEY.6 SW2 BIT KEY.7

;SW1键 ;SW2键

EKEY EQU 22H ;键前沿字 ESW1 BIT EKEY.6 ;SW1键前沿 ESW2 BIT EKEY.7 ;SW2键前沿 KTMR

EQU 35H ;键去抖延时器

;================== ORG 0000H LJMP MAIN

ORG 0030H

MAIN: INCLUDE \添加初始化模块 MLOOP: LCALL DELAY

;延时5ms ;读键

15

LCALL RDKEY

单片机原理实验

LCALL DISP ????

;主程序中的其它任务

M05:LJMP MLOOP

;====延时子程序(2*R7+3)*R6+5=5ms==== DELAY: MOV R6,#0AH DL01: DL02:

MOV R7,#0F8H DJNZ R7,DL02

DJNZ R6,DL01 RET

;====通用子程序段==== INCLUDE \ INCLUDE \

END

与高级语言编程不同,当用汇编语言编程时,程序员必须对CPU资源进行统筹规划,因此在主程序的开始处必须有变量定义段,该段中包含IO口定义、所有程序模块所用变量的定义。各程序模块、子程序中所用变量一般不使用各变量的地址,而使用变量的名称(或符号),将所有变量集中在主程序开始处定义,便于CPU资源的统筹规划、调整和修改。各模块、子程序均以文件形式单独编辑和调试,主程序使用伪指令将各模块添加到指定位置,主程序、模块、子程序通常放在同一工作文件夹中。

在上述程序清单中, 5mS延时子程序仅有5行,因此未将其作成1个独立模块。

;添加读键状态及去抖处理子程序

;添加数码管动态扫描显示子程序

四、 实验内容

1. 5位LED数码管动态显示驱动子程序设计

参照图3.4,将“实验原理2”的“5位LED数码管动态显示子程序”中用“??”表示的十、百、千位数码管扫描部分程序行、以及程序最后1行的七段码码表写完整。

建立工作文件夹“E:\\学号\\实验三”,启动“WAVE 3.2”软件,点击“新建文件”快捷按钮,在打开的文件窗口中编辑5位LED数码管动态显示子程序,编辑完成后,在工作文件夹中,以文件名“DISP.ASM”保存文件。

2. 独立键盘读键状态及去抖动处理子程序设计

点击“新建文件”快捷按钮,在打开的文件窗口中编辑“实验原理3”中的“读独立按键子程序(延时去抖)”,编辑完成后,在工作文件夹中,以文件名“RDKEY.ASM”保存文件。

3. 按键控制4位显示数码加减程序设计

以图3.3的框图为基础,设计1个工程项目,实现以下功能:①上电最初阶段完成下列操作(即初始化),设置内部RAM中60H~7FH单元为堆栈区,清除内部RAM中的20H~7FH单元,在LED数码显示器中显示“学号”的低4位1秒,之后清除5个显示缓冲单元(这样进入主循环后先显示0000)。②在主循环中“??”添加内容,以实现“每按1次SW1键,显示数值十进制加1,每按1次SW2键,显示数值十进制减1。”

功能②可按如下方法实现,在内部RAM中定义1个变量(比如记为,

16

单片机原理实验

无符号、双字节、压缩BCD码);当CPU查询到SW1键(前沿型),则十进制加1;当CPU查询到SW2键(前沿型),则十进制加9999(等价于减1);将加减1后的送入显示缓冲单元DSB3~0。

按工程项目的功能要求和上述算法,完成以下任务:①将图3.3的主程序流程画完整,写出完整的主程序清单;②用“WAVE 3.2”软件,点击“新建文件”快捷按钮,在打开的文件窗口中编辑主程序,编辑完成后,在工作文件夹中,以文件名“MAIN.ASM”保存文件,用同样方法建立初始化模块“INITIAL.ASM;③在工作文件夹中,以“PROJECT1”文件名创建工程项目,将MAIN.ASM添加到模块文件中,编译项目直至通过;④将编译通过的目标程序下载到实验板中,取下下载器,通电试运行;⑤若目标程序运行不能达到预期效果,用实验一、所述方法进行模拟仿真,查找算法、程序错误,再编译、下载、运行目标程序直至达到预期效果,完成调试。

五、 实验报告要求

实验报告要求写明实验目的,并提交以下内容。

1. 简述“按键控制4位显示数码加减程序设计”的控制算法原理,提交所有程序流图、汇编语言源程序清单。

2. 回答思考题。

六、 思考题

1. “按键控制4位显示数码加减程序设计”项目中,若查询SW1或SW2键时采用开关型键状态,会出现什么现象?可修改程序,在实验板中运行程序,观察现象。

2. 把5mS软件延时改用定时器/计数器定时,如何实现?并说明两种方法的优缺点。

17

单片机原理实验

实验四、定时器应用实验

――LED数码显示与矩阵键盘赋值程序设计

一、

实验目地

1. 掌握定时器/计数器定时设计方法。

2. 掌握矩阵键盘工作原理及读矩阵键盘和去抖程序设计方法。 3. 掌握LED数码显示与矩阵键盘赋值程序设计方法。

4. 进一步学习模块化的程序设计方法,掌握状态及其转移分析方法。

二、 实验设备

PC 兼容机1台、目标程序下载接口电路1套、AT89S52实验板1套;操作系统为WindowsXP,安装有单片机集成开发软件“WAVE 3.2”和下载器驱动软件。

三、 实验原理

1. 定时器及其中断 在实验三中,我们采用调用处延时程序实现5位LED数码管动态显示,并采用独立键盘对显示内容进行加1和减1设置。我们发现在这样一个简单的设计中,CPU很忙,每时每刻都在执行不可缺省的指令,没有时间作完成其它任务。若要增加系统的功能必须在主程序中增加模块,也就增加了CPU执行相应模块的时间,这将导致主程序每次循环的时间超过5mS,且每次循环的时间可能不相同。当系统增加的功能消耗CPU时间不多,主程序循环时间偏离5mS的误差较小,这样的设计方法仍不失是一种可行的方法,反之应放弃该方法。

解决上述问题的方法可以采用单片机的定时/计数器,若将定时/计数器T0设置为方式1定时器,定时时长为4mS,则定时/计数器工作方式寄存器TMOD=01H;若系统晶体振荡器频率为12MHz,则定时器初值为:

M?65536?定时时长?65536-4000?F060H

机器周期即TH0=F0H、TL0=60H。

2. 矩阵键盘工作原理及读键盘和去抖处理

在实验三中,独立键盘SW1和SW2的每个键均接独立K11ROW2接1条IO口,当系统所需按键较多,若每个按键均占用1条IO端口,则按键占用的CPU资源过多,系统实现难度较大。 解决上述问题的方法可以采用矩阵键盘电路。图4.1是3*4矩阵键盘电路,其中K0~

18

K10K6K2CS2K9K5K1CS1K8K4K0CS0ROW1ROW0K7K3CS3图4.1:3*4矩阵键盘电路 单片机原理实验

K3四键、K4~K7四键、K8~K11四键组成矩阵键盘的第0、1、2行,各行分别由选择控制口ROW0、ROW1、ROW2控制;(K0,K4,K8)三键、(K1,K5,K9)三键、(K2,K6,K10)三键、(K3,K7,K11)三键组成矩阵键盘的第0、1、2、3列,分别由4条数据线读取键状态。

由图4.1可见,读取键状态的4条数据线CS0~3与LED数码管动态显示电路5条扫描线中的4条共用。之所以能够共用CS0~3端口,是由于CPU读取按键状态所需时间很短(几十微秒),而LED数码管动态显示每个数码管的点亮时间为几个毫秒,因此先短暂关闭数码显示(=1111),读取按键状态;然后关闭矩阵键盘(=111),打开数码显示,并不会影响数码显示的视觉效果,或者说矩阵键盘与数码管动态显示分时复用CS0~3端口。

矩阵键盘各行按键的键状态也是分时读取的。首先置=110,选择第0行四个按键,此时若K0~K3中有键按下,CS0~3端口线的相应位为0,其它位为1,而另两行的按键如有键按下不会影响上述逻辑,此时从CS0~3读取的数据为第0行四个按键的键状态。然后置=101,选择第1行四个按键,读取第1行四个按键的键状态。再后然后置=011,选择第2行四个按键,读取第2行四个按键的键状态。如前所述,上述所有按键的键状态读取仅需几十微秒。

图3.6所示的读键状态及去抖等处理子程序流图对矩阵键盘仍然适用,所不同的是在内部RAM中应指定2字节KEY1和KEY2用于保存开关型的键状态;指定2字节EKEY1和EKEY2用于保存前沿型的键状态。KEY1和KEY2共可以保存16个键状态,而本实验板中矩阵键盘只有12个键,因此可以将2个独立按键的状态也并入这2个字节中。这样,矩阵键盘和独立按键的读键状态及去抖处理子程序框仍可延用图3.6的流图,只需将图3.6中第一个功能框“读键、转正逻辑、新的键状态暂存”可细化,如图4.2所示。部分程序如下:

;====读矩阵、独立按键子程序(延时去抖)==== RDKEY: ORL P2,#0FFH ;关闭LED数码显示器

CLR ROW0 NOP NOP MOV A,P2

ANL A,#0FH ;K0~3键位保留 XRL A,#0FH ;求反转正逻辑 MOV R6,A ;新的键状态暂存R6 ORL P2,#0FFH CLR ROW1 ;ROW1=0,扫描K4~7键

;扫描第1、2行按键等

19

关闭数码显示器 扫描0行按键=110、读K3~0键状态、新的键状态暂存R6低4位 扫描1行按键=101、读K7~4键状态、新的键状态暂存R6高4位 扫描2行按键=011、读K11~8键状态、新的键状态暂存R7低4位 关闭矩阵键盘=111、读独立按键SW1和SW2键状态、新的键状态暂存R7低4图4.2:“图3.6读键、转正逻辑、新的键状态暂存”细化

;ROW0=0,扫描K0~3键

;延时,键盘线越长延时越长

????


单片机原理实验讲义(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:考研政治知识结构框架图

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: