首页 单片微机原理实验指导书

单片微机原理实验指导书

举报
开通vip

单片微机原理实验指导书单片微机原理及应用 实验指导书 湖南理工学院机械与电气工程系 LJD-2008 实验系统使用 注 意 事 项 1、 LJD-2008系统自带5V、+12V、-12V、-5V电源 。 请在使用的时候注意实验仪上的电源引出线。 2、 自带CPU内有测试监控程序,外接仿真器时需要拔掉本机CPU。 3、 所有的实验程序全部调试通过,说明书中的程序有重复的部分没有全部列出,完整的程序请参考随机光盘相应的文件。 4、 LJD-2008监控程序已经包含所有实验,具体操作请参考附录。 验机方法: 打开...

单片微机原理实验指导书
单片微机原理及应用 实验指导书 湖南理工学院机械与电气 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 系 LJD-2008 实验系统使用 注 意 事 项 1、 LJD-2008系统自带5V、+12V、-12V、-5V电源 。 请在使用的时候注意实验仪上的电源引出线。 2、 自带CPU内有测试监控程序,外接仿真器时需要拔掉本机CPU。 3、 所有的实验程序全部调试通过,说明书中的程序有重复的部分没有全部列出,完整的程序请参考随机光盘相应的文件。 4、 LJD-2008监控程序已经包含所有实验,具体操作请参考附录。 验机方法: 打开电源,实验仪LCD显示屏显示“欢迎使用LJD-2008实验系统”然后开始自检,等2秒显示“LJD-2008实验系统正常”表示机器正常,如果显示“LJD-2008实验系统错误”,表示机器有错误,请关电源检查,或者和本公司技术部联系。 目录 第一章 系统概述………………………………………………5 第二章 LJD-2008实验系统的地址分配………………………11 第三章 μVision2集成开发环境………………………………14 第4章 基本实验指导…………………………………………20 4、1、实验1 “LJD-2008+单片机实验开发系统”使用学习…………20 4.2、实验2 顺序、分支、循环三种结构程序的基本编程训练………21 4.3、实验3 并行I/O口实验………………………………………22 4.4、实验4 中断系统及应用实验…………………………………22 4.5、实验5 定时/计数器应用实验………………………………25 4.6、实验6 单片机并行口扩展实验(1) ……………………27 第五章 选修实验…………………………………………… 29 5.1、实验一、点阵式L C D ( 1 2 8 X 6 4 ) 模块显示实验…… 29 5.2、实验二、 三色16X 16 矩阵L E D 应用实验…………………52 5.3、实验三、A/D(ADC0809、)转换实验………………………55 5.4、实验四、DAC 0832 输出0-5V电压转换实验…………………60 5.5、实验5、电机(直流电机、步进电机、继电器)控制实………62 5.6、实验6、I 2 C 总线芯片的读、写实验………………………69 5.5、实验7、IC 卡(SE4442 控制)读、写实验…………………81 5.5、实验8、“看门狗”(813L)复位控制实验…………………100 第一章:系 统 概 述 1.1 系统的安装使用 1. 电源输出引脚定义 ( 图1 ) 实验仪自带一组工作电源,供实验时使用。 2、CZ1 打印机的接口定义 (图2) 在实验仪的左上方有一个打印机接口CZ1,该接口可与外接微型打印机直接连接。 3、串行接口(图3) 在实验仪的右下角有2个DB9的串口,其中COM1为实验仪自带的仿真器和计算机连接的接口,COM2为用户自己实验用的串行口,可以由用户CPU的P3.0、P3.1或者 82C51的RXD1、TXD1端控制。同时COM2还具备RS485通信功能,RS232和RS485的切换由跳线K11,K12决定,当K11,K12的1脚和2脚短接为RS232输出,2脚和3脚短接为RS485输出。RS485的控制由DI/RI决定。 4、LED发光二极管显示:(图4) 实验仪上有16只发光二极管以及相应的驱动电路。分4种颜色,L1~L16为发光二极管驱动信号输入端,该输入为“0”时发光二极管亮。 5、逻辑电平开关电路 (图5): 实验仪上有8只开关K1~K8和相应的K1~K8引线孔为逻辑电平的输出端。开关向上拨相应的孔输出高电平“1”,向下拨相应的孔输出低电平“0”。 6、单脉冲电路(图6) 实验仪上有一个单脉冲发生电路,标有“的两个引线插孔为正负脉冲的输出端,附近的AN按钮为单脉冲,每按一次产生一个脉冲。 7、键盘/LED电路:(图7) 实验仪上有16个键的矩阵键盘,8个LED,既可以由82C79控制也可以由用户扩展并行口来控制,键功能用户可以自己编程定义。 2、数码管的结构图: D7 D6 D5 D4 D3 D2 D1 D0 a f e g d c B h 3、字形表(数码管为共阴) 0 1 2 3 4 5 6 7 8 9 11H 7DH 23H 29H 4DH 89H 81H 3DH 01H 09H A B C D E F P. — 。 空 05H 0C1H 93H 61H 83H 87H 06H 0EFH 0FEH 0FFH 8、频率发生器电路:(图8) 实验仪上有一个1.8432MHZ的频率源,标有PCK的插孔为频率的输出端。 9、8X8双色矩阵LED (图9) 实验仪带一个8X8的LED,由IC(8255-1)控制,其中PA口经过反相驱动(7406)控制它的公共端(共阳),PB口经过反相驱动(ULN2803)绿色的发光部分,,PC口经过反相驱动(ULN2803)红色的发光部分,例如PA=00H,PB=0FFH 全部发绿色。PA=00H,PC=0FFH,全部发红色。 A、8X8 LED的内部结构图 B、8X8 LED的外部可视图 10、128X64 LCD液晶显示屏 (图10) 实验仪上有一个128X64点阵的液晶屏,内部带2M共8192个汉字库,可以显示字符、汉字、图形。内部带负压,带背光。 11、CPU的基本部分原理图 这里是整个实验系统的CPU部分,包括数据总线,地址总线、晶振启动的电路部分,在后面的各个扩展控制部分的原理图中的各个总线以及控制信号均来自这个部分。所以在后面的相关的部分就不再重复。 12、系统的RAM和ROM部分的原理图 这里是实验系统的数据存储器RAM (62256 32K),和程序存储器ROM(27C512 64K)的原理 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 图。 13、蜂鸣器的驱动部分的原理图 第二章实验系统的地址分配 实系统的各个元件的地址分配: ---------------------------------------------------------------------------------------------------------------------- 表(1):RTC(DS12C887)的地址分配以及符合定义 秒寄存器 = # 8000H SECOND = # 8000H 秒闹钟 = # 8001H SECOND_ALARM = # 8001H 分寄存器 = # 8002H MINUTE = # 8002H 分闹钟 = # 8003H MINUTE_ALARM = # 8003H 时寄存器 = # 8004H HOUR = #8004H 时闹钟 = # 8005H HOUR_ALARM = #8005H 星期寄存器= # 8006H WEEK = #8006H 日寄存器 = # 8007H DATE = #8007H 月寄存器 = # 8008H MONTH = #8008H 年寄存器 = # 8009H YEAR = #8009H A寄存器 = # 800AH REG_A = #800AH B寄存器 = # 800BH REG_B = #800BH C寄存器 = # 800CH REG_C = #800CH D寄存器 = # 800DH REG_D = #800DH 世纪寄存器= # 8032H CENTURY = #8032H 一般的RAM = # 800EH — #807FH (8032 除外) 表(2):LCD(字符、图形)的地址分配以及符合定义 LCD 写命令地址= # 0E000H W_C_GLCD = # 0E000H 写数据地址= # 0E001H W_D_GLCD = # 0E001H 读状态地址=# 0E002H R_ B_GLCD = #8402H 读数据地址=# 0E003H R_ D_GLCD = # 0E003H (DG-128x64 带2级 国标汉字库) 表(3):可以自定义扩展控制(8255)的地址分配及符合定义 8255-2 端口A 寄存器= # 8200H A_8255_2 = # 8200H 端口B 寄存器= # 8201H B_8255_2 = # 8201H 端口C 寄存器= # 8202H C_8255_2 = # 8202H 控制端口 寄存器= # 8203H D_8255_2 = # 8203H 表(4):可编程定时/计数扩展控制(82C53)的地址分配及符合定义 82C53 写计数器0= # 8400H W_0_82C53 = # 8400H 写计数器1 = # 8401H W_1_82C53 = # 8401H 写计数器2 = # 8402H W_2_82C53 = # 8402H 写命令控制寄存器 = # 8403H W_D_82C53 = # 8403H 读计数器0 = # 8400H R_0_82C53 = # 8400H 读计数器1 = # 8401H R_1_82C53 = # 8401H 读计数器2 = # 8402H R_2_82C53 = # 8402H 读命令控制寄存器 = # 8403H R_D_82C53 = # 8403H 表(5):可编程串行口扩展控制(82C51)的地址分配及符合定义 82C51 写数据地址= # 8300H W_D_82C51= #8300H 写命令地址= # 8301H W_C_82C51= #8301H 读数据地址= # 8300H R_ D_82C51= #8300H 读状态地址= # 8301H R_ B_82C51= #8301H 表(6):可编程键盘/显示扩展控制( 82C79 )的地址分配及符合定义 82C79 写数据地址= # 8100H W_D_82C79= # 8100H 写命令地址= # 8101H W_C_82C79= # 8101H 读数据地址= # 8100H R_ D_82C79= # 8100H 读状态地址= # 8101H R_ B_82C79= # 8101H 表(7):扩展简单 I / O (74HC244, 74HC273)的地址分配及符合定义 74HC244 读入地址= # 8600H R_D_244 = # 8600H 74HC273 输出地址= # 8700H W_D_273= # 8700H 表(8):A/D扩展(ADC0809、MC7135, AD574)的地址分配及符合定义 A/D 芯片的分配 符 号 定 义 通 道 号 0809的读(写)地址=# 0A000H W_D_0809 = # 0A000H 0-7通道对应 00H – 07H AD574的启动地址=#0D200H W_C_574 = # 0D200H 读高8位结果地址=#0D201H R_DH_574 = # 0D201H 读低4位结果地址=#0D202H R_DL_574 = # 0D202H MC7135通道地址= #0D000H W_C_7135 = # 0D000H 0 – 7通道对应 10H – 17H 结果读出地址=#0D100H R_D_7135 = #0D100H 表(9): D/A扩展(DAC0832)的地址分配及符合定义 D/A转换的地址= # 0C000H W_D_0832 = # 0C000H 第3章 μVision2集成开发环境 1、 软件简介 KEILμVision2 是流行的单片机开发环境之一,它集可视化编辑、编译、调试、仿真与一体,支持51 汇编、PLM 和C 语言的混合编程,功能强大、界面友好、易学易用。 安装KEIL μVision2 的方法同一般的软件安装。安装完成后将在Windows桌面生成一个®KEIL μVision2 图标。运行该软件,启动屏幕如下: 图、KEIL μVision2 启动界面 KEIL μVision2 启动界面 随后进入KEIL μVision2 的工作界面: 2、创建一个项目 要创建一个应用项目,需要下列步骤操作 启动 Keil ηVision,新建一个项目文件并从器件库中选择一个器件。 新建一个源文件并把它加入到项目中。 增加并设置选择器件的启动代码。 针对目标硬件设置工具选项。 编译项目并生成可以编程PROM的HEX文件。 下面逐步介绍: (1)、在KEIL μVision2 集成开发环境中,打开菜单Project->New Project; (2)、在弹出的Create New Project对话框中,选择目标项目的文件夹,并输入项目名称。 (3)、根据需要,选择ATMEL 89C51 或其它51 系列单片机作为目标设备。 选择目标单片机 (4)、这时需要建立一个源文件。建立一个汇编或C文件,如果已经有源程序文件,可以忽略这一步。选择File/New选项,在弹出的对话框中,输入一个源程序。 (5)、选择 File/Save选项,选择文件的存放路径并输入源程序文件名,注意一定要填上扩展名,如果C源程序文件,扩展名为.C;如果是汇编语言源程序文件,扩展名为.ASM后缀,单击保存。 (6)、单击对象Target1前的加号,展开的内容Source Group1,用右键单击Source Group1,在弹出的快捷菜单中选择Add File to Source Group1选项。 (7)、在弹出的对话框中找到刚才的文件,单击ADD按键,这时目录里就有源程序文件了。 (8)、项目设置,用鼠标右键单击对象Target1,在弹出的菜单中选择Options for’Traget’对话框选项,弹出的Options for Target1对话框中有8个选项卡, Target1选项卡中设置工作频率为12MHz,其它为默认选项,然后选中Debug页如下图,如选择Use Simulator 表示使用软件仿真;如选择Use:“ KEIL Monitor-51 Driver”表示使用监控方式。 设置使用KEIL Monitor-51 Driver 注意: 由于每次仿真器复位后用户代码区都将被自动擦除,所以如果用户需要启动调试时加载用户代码,“Load Application at Startup”选项也必须打勾。 在监控方式下还要对串口进行设置,单击“Settings”选择您要使用的计算机串行端口。KEIL μVision2 默认设置为COM1/57600。本实验系统支持57600bps(57.6Kbps)的波特率。最后单击“确定”按钮保存设定。 8个选项卡的详细介绍请参考Keil C使用 手册 华为质量管理手册 下载焊接手册下载团建手册下载团建手册下载ld手册下载 。 3、使用Keil进行调试的基本技巧 (1)、进入和退出仿真状态 只有在用户程序编绎和连接成功后才能进行调试工作,点击菜Debug->Start/Stop将进入/退出硬件仿真状态。 (2)、如何运行程序 在Keil 的IDE 中有以下几种运行方式: A)、Run 全速运行,遇到断点停下,或用户按动Stop按钮或RST CPU按钮停止. B) Step info 单步跟踪运行一条指令,如果该语句为C 中的调用子程序语句 或汇编中的CALL指令Step info 指令,将跟踪进入子程序内部。 C)、Step over 单步运行完一条指令,如果该语句为C 中的调用子程序语句或汇编中的CALL指令,Step over 指令将全速完成该子程序的运行停在下一指令处。 D)、Run till Cursor Line 从当前位置运行到光标处。 (3)、如何设置和删除断点 设置断点/删除断点最简单的方法是用鼠标双击待设置断点的源程序行或反汇编程序行或用断点设置命令bs …… (4)、如何查看和修改寄存器的内容 仿真时主寄存器的内容显示在主寄存器窗口,用户除了可以观察以外还可自行修改,用鼠标点击选中一个单元,例如单元DPTR,然后再单击DPTR 的数值位置,出现文字框后输入相应数值按回车键即可。另外的输入方法是使用命令行窗口,例如输入A=0X34将把A 的数值设置为0X34。 5、如何观察和修改变量 点击View->Watch & Call stack Window 出现相应窗口,选择Watch 1-3 中的任 一个窗口,按动F2 在Name 栏填入用户变量名,如:Temp1 Counter 等,但必须是存在的变量。如果想修改数值可单击Value 栏,出现文本框后输入相应数值。用户可以连续修改多个不同的变量,uVision2 IDE 提供了观察变量更简单的方法。在用户程序停止运行时移动鼠标光标到要观察的变量上停大约一秒钟就弹出一个变量提示块出来。 6、如何观察存储器区域 在Keil中可以区域性的观察和修改所有的存储器数据。Keil IDE 把MCS-51内核的存储器资源分成4个部分 A 内部可直接寻址RAM data ,IDE表示为D:xx B 间接寻址RAM区idata ,IDE表示为I:xx C RAM区xdata ,IDE表示为X:xxxx D 代码区code ,IDE表示为C:xxxx 这四个区域都可以在Keil 的 Memory Windows 中观察和修改。IDE 集成环境中点击菜单View->Memory Windows,便会打开Memory 窗口, Memory 窗口可以同时显示4 个不同的存储器区域。点击窗口下部分的编号可以相互切换显示。在地址输入栏内输入待显示的存储器区起始地址如D:45h 表示从内部可直接寻址RAM 的45H 地址处开始显示;x:3f00H 显示外部RAM,从3f00H 地址开始; c:0X1234显示代码区域,从1234H 地址开始;I:32H 显示内部间接寻址空间,从32H 地址开始显示。格式的切换: 在区域显示中缺省的显示单元为字节(byte),但是可以选择其他显示方式,在Memory 显示区域内按动鼠标右键在弹出的菜单中可以选择的显示方式为: Decimal 按照十进制方式显示 Unsigned 按照有符号的数字显示又分char 单字节int 整型long 长整型 Singed 按照无符号的数字显示又分char 单字节int 整型long 长整型 ASCII 按照ASCII 码格式显示 Float 按照浮点格式进行显示 Double 按照双精度浮点格式显示 在Memory 窗口中显示的数据可以修改,修改方法如下: 在鼠标对准要修改的存储器单元,按动鼠标右键,在弹出的菜单中选择“Modify Memory at 0x…”在弹出对话框的文本输入栏内输入相应数值后按回车键修改完成。注代码区数据不能更改。 第4章 基本实验指导 本章实验结合各章理论进行,其中实验1、2为纯软件实验,采用Smiulator方式;后面的实验为软、硬件结合实验,采用Keil Monitor-51 Driver方式。建议每个学生先建立一个文件夹,实验中的项目文件和源程序文件都放在这个文件夹中。 实验1 “LJD-2008+单片机实验开发系统”使用学习 1. 实验目的 (1)、了解实验设备的结构与组成,掌握Keile C平台的使用。 (2)、熟悉指令系统和寻指方式。 (3)、编辑、编译、链接、装载、全速/单步/断点运行、单片机内部资源查看与改写,会查找和排除简单故障。 2.实验步骤 (1)、启动Keil C,出现主界面后,建立一个新的工程。 (2)、在源程序输入窗口键入以下实验程序: INDEX EQU 20H SUM EQU 21H ORG 0000H START:MOV INDEX,#5 MOV A,#0 LOOP:ADD A, INDEX DJNZ INDEX,LOOP MOV SUM,A SJMP $ END 以上文件以FIRST.ASM存盘,预 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 程序的执行结果。 (3)、构造对象,以Simmulator方式启动仿真。打开汇编窗口,查看汇编代码,理解指令的存储格式。 (4)、打开寄存器窗口和片内数据存储器窗口。单步执行程序,观察累加器的内容和PSW的内容的变化以及内部数据存储器中20H单元内容的变化。 (5)、将断点设定在SJMP $指令行,观察程序运行的最终结果,即21H单元的内容的变化。 3.程序设计选题 (1)、将外部数据存储器0001H和0002H单元的内容互换,观察互换的结果。 (2)、将外部数据存储器0001H单元的内容的高低4位相交换,观察互换的结果。 (3)、完成8位数除以8位数,观察结果的商、余数和PSW中的状态标志。即R2/R1=R3…R4。 (4)、将外部数据存储器0001H单元的内容的奇数位取反,偶数位不变,观察处理结果。 实验2 顺序、分支、循环三种结构程序的基本编程训练 1.实验目的 (1)、通过拆字程序、拼字程序、数据排序程序和分类统计程序进步掌握三种结构程序的设计方法。 (2)、进一步掌握软件的编辑、编译、排错、调试方法。 (3)、进一步掌握十进制数的机内表示方法和有符号数据的机内表示方法。 2.实验内容 (1)、在仪器仪表等工业应用中要进行十制数的处理,一方面要以压缩BCD码的格式存储信息,另外又要把存储的结果一位一位的以十进制方式显示出来,这就要用到拆字和拚字程序。 (2)、拆字程序:定义一个压缩BCD码数据并保存在片外RAM8000H单元,分离为非压缩BCD码数存入片内RAM30H和31H单元,以断点调试方式观察分离结果。 (3)、拚字程序:定义一个二位的非压缩BCD码数据并保存在片外RAM8000H和8001H单元,拚接为压缩BCD码数据存入片内RAM30H单元,以断点调试方式观察拚接结果。 (4)、用DB伪指令定义10个无序数据,采用冒泡排序的方法将其从小到大或从大到小排序后存入片外RAM2000H开后的单元,调试程序观察排序结果。 (5)、用DB伪指令定义10个包含0、正数、负数的一组数据,分别统计其中各数的个数,统计结果保存到内部RAM30H、31H、32H单元,调试程序观察统计结果。 3.程序设计选题 (1)、完成两个4字节数的BCD码数的相加,和存入内部数据存储器24H~20H单元,观察运算结果。 (2)、将外部数据存储器中的10个十六进制数转换成ASCII码存放回原单元,观察转换结果。 实验3 并行I/O口实验 1.实验目的 (1)、熟悉51单片机并行口输入方式和输出方式的编程。 (2)、掌握子程序的设计和调用方法。 (3)、掌握子程序的仿真和调试方法。 2. 实验电路和程序 如图,实验电路为8个数码显示器的的测试电路。数码显示器的8个段连接实验箱上的8个逻辑电平开关,位驱动的每一引脚对应连接单片机的P1.0~P1.7。 (1)、数码显示电路的测试:将逻辑电平开关全置于逻辑‘1’,以秒为时间单位,编程轮流点亮8个数码管。若每个数码管都显示8.,则数码管及其显示电路工作正常。 (2)、动态扫描电路的原理分析:以10ms为时间单位,编程轮流点亮8个数码管,观察显示结果是否稳定。以2ms为时间单位,编程轮流点亮8个数码管,观察显示结果是否稳定。 (3)、将P1.7接逻辑电平开关,作输入引脚使用,a~g各段不变,H段浮空。当开关为逻辑‘1’时,8个数码管以秒为单位间隔闪烁。当开关为逻辑‘0’时,8个数码管分为高低4个两组,以秒为单位间交叉闪烁。 实验4 中断系统及应用实验 1. 实验目的 (1)、了解中断的产生和响应过程,掌握中断程序的编制。 (2)、学习利用中断实现单步运行的方法。 (3)、加深对边沿触发方式和电平触发方式的理解。 (4)、考察中断优先权的控制。 2、实验电路与实验内容 (1)、利用中断实现单步运行的方法。实验电路如图: 图4.单步运行电路连接示意图 按图4连接线路,调试并运行如下程序,观察单步运行过程。 实验程序如下: ;主程序 ORG 0000H LJMP MAIN ORG 0003H LJMP EXINT0 MAIN: CLR IT0 CLR A MOV P1,A MOV IE , #81H ;开中断 LOOP: CPL A MOV P1, A SJMP LOOP ;中断服务程序 EXINTO: JNB P3.2 , EXINTO WAIT : JB P3.2 ,WAIT RETI a)、预分析程序的功能和实验现象。 b)、单片机上电复位后启动程序执行,这时,虽然INT0引脚为低电平,但由于复位后特殊功能寄存器IE各位为零,禁止中断,所以在设置完IE后(程序中执行完MOV IE,#81H) 再执行一条指令才能进入中断程序。若P3.2(INT0)引脚为低电平,则程序陷入中断中断服务程序中。每按一次按键产生一个正脉冲,这样 当执行RETI指令从中断服务程序返回时P3.2引脚刚好为低电平中断请求信号有效,因此返回主程序中执行完一条指令后又会进入中断服务程序,达到通过外部按键控制程序单步运行的目的。 (2)、按下图所示电路连线,分析边沿触发方式的外中断和电平触发方式的外中断的中断请求信号的撤除有什么不同。考察中断优先级。 实验程序如下(两中断源均为边沿方式): ;主程序 MODW0 EQU 70H MODW1 EQU FEH ORG 0000H LJMP MAIN ORG 0003H LJMP EXINT0 ORG 0013H LJMP EXINT1 ORG 0050H MAIN: MOV SP , #60H SETB IT0 SETB IT1 CLR PX0 SETB PX1 MOV IE , #85H SJMP $ ;中断服务程序 EXINT1: PUSH ACC MOV R2,#08H LP1: MOV A ,#MODW0 MOV P1 , A LCALL DELY500 SWAP A MOV P1 , A LCALL DELY500 DJNZ R2, LP1 POP ACC RETI EXINT0: PUSH ACC MOV R3 , #08H MOV A , #MODW1 LP0: MOV P1 , A LCALL DELY500 RR A DJNZ R3 , LP0 POP ACC RETI DELY500为延时500ms的子程序,该子程序由同学们自己设计。 a)、两中断源都在边沿触发方式下作如下操作:启动程序运行,观察指示灯如何变化?按下按键手不松观察指示灯如何变化,松开手后观察批示灯如何变化? b)、修改程序两中断源都在边沿触发方式下作如下操作:启动程序运行,观察指示灯如何变化?按下按键手不松观察指示灯如何变化,松开手后观察指示示灯如何变化? C)、考察自然优先级。两中断源均为电平触发方式,优先级均为0,将单片机的P3.2(INT0)和P3.3(INT1)接逻辑电平开关,拨开关使P3.2和P3.3输出低电平,启动程序运行观察执行结果。再拨开关使P3.2输出高电平,观察程序运行的结果。 d)、考察优先权的控制。修改程序使INT1为高优先级,INT0为低优先级,拨开关使P3.2输出低电平,P3.3输出高电平,启动程序运行,观察运行结果。在程序运行过程中,拨开关使P3.3输出为低电平,程序运行的结果说明了什么? 3.程序设计题,自编程并通过调试。 使8个数码管显示‘H’,每中断一次,‘H’左移1位。参考实验3的实验电路。 实验5 定时/计数器应用实验 1.实验目的 (1)、学习利用定时/计数器扩展外中断的方法。 (2)、了解定时/计数器的应用,掌握其编程方法。 2.实验电路 3.实验内容 (1)、利用定时/计数器扩展外断。 按实验电路图连线,实验程序如下: MODW0 EQU 0F0H MODW1 EQU 0FEH ORG 0000H LJMP MAIN ORG 000BH LJMP EXT0 ORG 001BH LJMP EXT1 ORG 0050H MAIN: MOV SP , #60H MOV TMOD , #66H MOV TH0,#0FFH MOV TL0,#0FFH MOV TH1,#0FFH MOV TL1,#0FFH SETB TR0 SETB TR1 CLR PT0 SETB PT1 MOV IE , #85H SJMP $ ;中断服务程序 EXT1: PUSH ACC MOV TH1,#0FFH MOV TL1,#0FFH MOV R2,#08H LP1: MOV A ,#MODW0 MOV P1 , A LCALL DELY500 SWAP A MOV P1 , A LCALL DELY500 DJNZ R2, LP1 POP ACC RETI EXT0: PUSH ACC MOV TH0,#0FFH MOV TL0,#0FFH MOV R3 , #08H MOV A , #MODW1 LP0: MOV P1 , A LCALL DELY500 RR A DJNZ R3 , LP0 POP ACC RETI DELY500为延时500ms的子程序,该子程序由同学们自己设计。 (1)、预分析程序的功能。录入程序,以Monitor-51 Driver方式仿真调试。按下按键观察程序的执行结果;在指示灯停止闪烁后松开按键观察程序的执行结果。按下按键,指示灯下在闪烁时松开按键观察程序的执行结果。程序执行的结果与边沿方式的外中断的结果是否相同? (2)、定时/计数器的扩展应用。设计实现下列功能的程序,并在实验箱上实现。 a、 用定时/计数器T0产生秒闪烁信号,控制P1.0引脚上的指示灯以秒频率闪烁。 b、 用定时/计数器T0和T1级连扩展方式产生秒闪烁信号,控制P1.0引脚上有指示灯以秒频率闪烁。 实验6 单片机并行口扩展实验(1) 1、实验目的 (1)、学会单片机与8255、数码显示和键盘的接口掌握编程应用技术。 (2)、学习动态扫描显示的基本工作原理。 2、实验电路 按图示电路连线,其中:PA为段驱动端口与数码显示器的a,b,c,d,e,f,g等各段数据相连,输出段数据;PB口为扫描口,一方面连接数码显示器的扫描端,另一方面连接键盘扫描端RL0、RL1、RL2、RL3,输出扫描信息;PC口与键盘行扫描输入端相连。注意:单片机和8255A之间之间已经在实验箱内部连接好。其地址见下表: 8255-2 端口A 寄存器= # 8200H A_8255_2 = # 8200H 端口B 寄存器= # 8201H B_8255_2 = # 8201H 端口C 寄存器= # 8202H C_8255_2 = # 8202H 控制端口 寄存器= # 8203H D_8255_2 = # 8203H 2、实验内容 (1)、系统启动后,首先在显示器上显示“- - - - - - - - ”提示输入基准时间。 (2)、4×4矩阵键盘中,将A、B、C、D定义为功能键。 按A键后,即可按××××××格式输入时分秒基准 时间。如,输入143024表示14点30分24秒。输入过程 中LED自动向右滚动显示。如果输入的是合法时间, 系统即开始正常运行。并按“××-××-××”格式 动态显示当前时间。例如:“11 – 36 - 52”否则, 重新显示“- - - - - - - - ”提示输入合法的基准 时间。 (3)、设定定闹时间。在正常运行时,按“B”键即可 按“××××××”格式输入定闹时间。其输入方法 与基准时间的输入完全相同。设定合法的定闹时间后 10秒钟,系统恢复当前时间的动态显示。 (4)、查询定闹时间。在正常运行时,按“C”键,系 统按“××-××-××”格式显示当前定闹时间,若 用户未开启定闹功能,则显示“OP”,10秒钟后,系 统恢复当前时间的动态显示。 (5)、正常运行时,按“D”键,系统关闭显示器,进 入低功耗工作状态。再按一次“D”键又恢复正常显示。 (6)、主程序流程图 同学们按以按散转程序的结构画出主程序流程图。 (7)、设计、调试并实现该程序。 第五章 选修实验 实验1 点阵式L C D ( 1 2 8 X 6 4 ) 模块显示实验 LJD128X64 液晶显示模块概述 1)、LJD128X64 液晶显示模块是128×64 点阵的汉字图形型液晶显示模块,可显示汉字及图形,内置8192 个中文汉字(16X16 点阵)、128 个字符(8X16 点阵)及64X256 点阵显示RAM(GDRAM)。可与CPU 直接接口,提供两种界面来连接微处理机:8-位并行及串行两种连接方式。具有多种功能:光标显示、画面移位、睡眠模式等。 2)、外观尺寸:93×70×14mm(4X8),84×44×14mm(2X8),115×32×14mm(2X10) 3)、视域尺寸:73×39mm(4X8), 70×20mm(2X8),85×20mm(2X10), 132×39mm(4X16),补充说明:外观尺寸可根据用户的要求进行适度调整。 一、LJD128X64(128X64)引脚说明 1)、逻辑工作电压(VDD):4.5~5.5V 2)、电源地(GND):0V 3)、LCD 驱动电压(V0):0~-10V 4)、工作温度(Ta):0~60℃(常温) / -20~75℃(宽温) 保存温度(Tstg):-55~125℃ 二、位并行连接时序图 模块有并行和串行两种连接方法(时序如下): MPU 写资料到模块 MPU 从模块读出资料 三、用户指令集 备注: a、当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读取BF标志时BF 需为0,方可接受新的指令;如果在送出一个指令前并不检查BF 标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。 B、“RE”为基本指令集与扩充指令集的选择控制位元,当变更“RE”位元后,往后的指令集将维持在最后的状态,除非再次变更“RE”位元,否则使用相同指令集时,不需每次重设“RE”位元。 四、具体指令介绍: 不需每次重设“RE”位元 1)、清除显示 功能:清除显示屏幕,把DDRAM 位址计数器调整为“00H” 2)、位址归位 功能:把DDRAM 位址计数器调整为“00H”,游标回原点,该功能不影响显示DDRAM 3)、位址归位 功能:把DDRAM 位址计数器调整为“00H”,游标回原点,该功能不影响显示DDRAM 功能:执行该命令后,所设置的行将显示在屏幕的第一行。显示起始行是由Z 地址计数器控制的,该命令自动将A0-A5 位地址送入Z 地址计数器,起始地址可以是0-63 范围内任意一行。Z 地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。 4)、显示状态开/关 功能: D=1;整体显示ON C=1;游标ON B=1;游标位置ON 5)、游标或显示移位控制 功能:设定游标的移动与显示的移位控制位:这个指令并不改变DDRAM 的内容 6)、功能设定 7)、设定CGRAM 位址 功能:设定CGRAM 位址到位址计数器(AC) 8)、设定DDRAM 位址 功能:设定DDRAM 位址到位址计数器(AC) 9)、读取忙碌状态(BF)和位址 功能:读取忙碌状态(BF)可以确认内部动作是否完成,同时可以读出位址计数器(AC) 的值 10)、写资料到RAM 功能:写入资料到内部的RAM(DDRAM/CGRAM/TRAM/GDRAM) 11)、读出RAM 的值 功能:从内部RAM 读取资料(DDRAM/CGRAM/TRAM/GDRAM) 12)、待命模式(12H) 功能:进入待命模式,执行其他命令都可终止待命模式 13)、卷动位址或IRAM 位址选择(13H) 功能:SR=1;允许输入卷动位址SR=0;允许输入IRAM 位址 14)、反白选择(14H) 功能:选择4 行中的任一行作反白显示,并可决定反白的与否 15)、睡眠模式(015H) 功能:SL=1;脱离睡眠模式SL=0;进入睡眠模式 16)、扩充功能设定(016H) 功能:RE=1;扩充指令集动作RE=0;基本指令集动作G=1;绘图显示ON G=0;绘 图显示OFF 17)、设定IRAM 位址或卷动位址(017H) 功能:SR=1;AC5~AC0 为垂直卷动位址SR=0;AC3~AC0 写ICONRAM 位址 18)、设定绘图RAM 位址(018H) 功能:设定GDRAM 位址到位址计数器(AC) 五、显示坐标关系 图形显示坐标 3、字符表 代码(02H---7FH) 六、显示步骤 1、显示资料RAM(DDRAM) 显示资料RAM 提供64×2个位元组的空间,最多可以控制4 行16 字(64 个字)的中文字型显示,当写入显示资料RAM 时,可以分别显示CGROM、HCGROM 与CGRAM 的字型;ST7920A 可以显示三种字型,分别是半宽的HCGROM 字型、CGRAM 字型及中文CGROM 字型,三种字型的选择,由在DDRAM 中写入的编码选择,在0000H—0006H 的编码中将自动的结合下一个位元组,组成两个位元组的编码达成中文字型的编码(A140—D75F),各种字型详细编码如下: 1)、显示半宽字型:将8 位元资料写入DDRAM 中,范围为02H—7FH 的编码。 2)、显示CGRAM 字型:将16 位元资料写入DDRAM 中,总共有0000H,0002H,0004H,0006H 四种编码。 3)、显示中文字形:将16 位元资料写入DDRAMK ,范围为A1A1H—F7FEH 的编码。 绘图RAM(GDRAM) 绘图显示RAM 提供64×32 个位元组的记忆空间,最多可以控制256×64 点的二维也纳绘图缓冲空间,在更改绘图RAM 时,先连续写入水平与垂直的坐标值,再写入两个8 位元的资料到绘图RAM,而地址计数器(AC)会自动加一;在写入绘图RAM 的期间,绘图显示必须关闭,整个写入绘图RAM 的步骤如下: 1)、关闭绘图显示功能。 2)、先将水平的位元组坐标(X)写入绘图RAM 地址; 3)、再将垂直的坐标(Y)写入绘图RAM 地址; 4)、将D15——D8 写入到RAM 中; 5)、将D7——D0 写入到RAM 中; 6)、打开绘图显示功能。 绘图显示的记忆体对应分布请参考表 2、游标/闪烁控制 提供硬体游标及闪烁控制电路,由地址计数器(address counter)的值来指定DDRAM 中 的游标或闪烁位置。LJD-2008 实验系统增加了LCD 液晶显示实验,液晶为128X64 点阵,带2M 汉字库,在使用汉字的时候不再需要另外的软件。 一、实验目的 1、了解LCD 液晶的基本原理和功能。 2、掌握LCD 液晶模块和单片机的硬件接口和软件设计方法。 二、实验线路(见下图) 三、实验内容 利用LCD 实现字符的显示、利用LCD 实现汉字的显示、利用LCD 实现图形的显示。 四、实验步骤 一)、通过编程在LCD 上第一行显示0---F 16 个数据 二)、通过编程在LCD 上第二行显示“欢迎使用LJD-2008” 第三行显示“WWW.LJD-2008.COM” 三)、通过编程在LCD 上显示一幅无线发射的图案。 五、实验程序 文件名称: LCD_ZF.ASM 字符显示的源文件 LCD_HZ.ASM 汉字显示的源文件 LCD_TX.ASM 图形显示的源文件 六、预备资料 在使用LCD 前,先必须熟悉LCD 的内部机构功能以及命令等,请参考相关的资料。另外可以从网上下载“LCD 上显示图形的点阵提取软件”。 用户指令集 一)、LCD 字符显示实验 ;文件名称:LCD_ZF.ASM ;在第一行显示"0,1,2,3... 16 个字符" ;================================================== ;定义中文LCD 液晶128X64 的地址 W_C_GLCD XDATA 8400H W_D_GLCD XDATA 8401H R_B_GLCD XDATA 8402H R_D_GLCD XDATA 8403H ;=================================================== TIMER0 DATA 30H ;延时时间的初值 TIMER1 DATA 31H ;调用延时子程序的次数 DATA1 DATA 32H ;点阵显示的变量1 DATA2 DATA 33H ;点阵显示的变量2 X DATA 34H ;X 方向的位置 Y DATA 35H ;Y 方向的位置 COUNTER DATA 36H ;计数器 N DATA 37H ;行数变量 D1 DATA 38H ;点变量1 D2 DATA 39H ;点变量1 ADDR DATA 3AH ;起始的显示位置 ADDR1 DATA 3BH ;起始的显示位置临时变量 N1 DATA 3CH ;行数的临时变量 ;=================================================== ORG 0000H AJMP BEGIN ORG 0030H BEGIN: MOV SP,#60H ;------------------------------------------------- ;设定行号: ; 第一行: 00H-07H ; 第二行: 10H-17H ; 第三行: 08H-0FH ; 第四行: 18H-1FH ;------------------------------------------------- MOV ADDR1,#00H LCALL INITIAL_GLCD ;调用初始化程序 LCALL DCHAR ;调用字符显示子程序 SJMP $ ;显示字符8X16 字符子程序 DCHAR: MOV ADDR, ADDR1 ; 设定行号 MOV DATA1,#30H ; display 0,1,2,3.... MOV N,#1 DCH0: MOV B,#16 DCH1: MOV A,ADDR ;set DDRAM address ORL A,#80H LCALL COMMAND_GLCD ;送命令 DCH2: MOV A,DATA1 LCALL WRITE_GLCD ;送数据 INC DATA1 DJNZ B,DCH2 DJNZ N,DCH0 RET ;点阵式LCD(128X64)模块显示实验 ;以下是公共的程序: ;---------------------------------------------------------- ;执行LCD 初始化工作 INITIAL_GLCD: PUSH ACC MOV A,#30H ;功能设定 CALL COMMAND_GLCD MOV A,#30H ;功能设定 CALL COMMAND_GLCD MOV A,#30H ;功能设定 CALL COMMAND_GLCD MOV A,#06H ;显示器控制:游标不显示;但是字会闪烁 CALL COMMAND_GLCD MOV A,#01H ;清除显示器 CALL COMMAND_GLCD MOV A,#0CH ;进入模式设定 CALL COMMAND_GLCD POP ACC RET ;--------------------------------------------------------------- ;检查LCD 忙碌标志 CHKBUSY_GLCD: PUSH DPH PUSH DPL PUSH ACC MOV DPTR,#R_B_GLCD CHK$: MOVX A,@DPTR JB ACC.7,CHK$ ;判别是不是忙? POP ACC POP DPL POP DPH RET ;--------------------------------------------------------------- ;写命令到GLCD COMMAND_GLCD: PUSH DPH PUSH DPL CALL CHKBUSY_GLCD ;判别是不是忙? MOV DPTR,#W_C_GLCD MOVX @DPTR,A ;写入命令 POP DPL POP DPH RET ;--------------------------------------------------------------- ;写资料到GLCD WRITE_GLCD: PUSH DPH PUSH DPL CALL CHKBUSY_GLCD ;判别是不是忙? MOV DPTR,#W_D_GLCD ;写入数据 MOVX @DPTR,A POP DPL POP DPH RET ;-------------------------------------------------------------------- ;清除LCD 的显示幕 CLEAR_GLCD: PUSH ACC MOV A,#01H ;清除显示器 CALL COMMAND_GLCD POP ACC RET ;-------------------------------------------------------------------- ;将ACC 内容,以十六进制值显示 HEX_LCD: PUSH DPH PUSH DPL PUSH ACC PUSH ACC SWAP A ;高低四位元交换 ANL A,#0FH ;留下低四位元 MOV DPTR,#ASCII_CODE ;DPTR 指到ASCII_CODE MOVC A,@A+DPTR ;取得ASCII 码 CALL WRITE_GLCD ;写到LCD POP ACC ANL A,#0FH ;留下低四位元 MOVC A,@A+DPTR ;取得ASCII 码 CALL WRITE_GLCD ;写到LCD POP ACC POP DPL POP DPH RET ASCII_CODE: DB '0123456789ABCDEF' ;-------------------------------------------- END ;======================================================================= 二)、LCD 汉字显示实验 ;文件名称LCD_HZXS.ASM ;在第2 行显示"欢迎使用LJD 系列" , ;在第3 行显示"WWW.LJD-2008.COM" ;================================================== ;定义中文LCD 液晶128X64 的地址 W_C_GLCD XDATA 8400H W_D_GLCD XDATA 8401H R_B_GLCD XDATA 8402H R_D_GLCD XDATA 8403H ;=================================================== TIMER0 DATA 30H ;延时时间的初值 TIMER1 DATA 31H ;调用延时子程序的次数 DATA1 DATA 32H ;点阵显示的变量1 DATA2 DATA 33H ;点阵显示的变量2 X DATA 34H ;X 方向的位置 Y DATA 35H ;Y 方向的位置 COUNTER DATA 36H ;计数器 N DATA 37H ;行数变量 D1 DATA 38H ;点变量1 D2 DATA 39H ;点变量1 ADDR DATA 3AH ;起始的显示位置 ADDR1 DATA 3BH ;起始的显示位置临时变量 N1 DATA 3CH ;行数的临时变量 ORG 0000H AJMP BEGIN ORG 0030H BEGIN: MOV SP,#60H LCALL INITIAL_GLCD ;调用LCD 初试化 ;---------------------------------------------------- ;设定汉字的显示行: 第一行开始地址为00H~07H ;每行可以显示8 个汉字: 第二行开始地址为10H~17H ; 第三行开始地址为08H~0FH ; 第四行开始地址为18H~1FH MOV ADDR1,#00H ;第一行显示 MOV N1,#08H ;数量8 个 MOV DPTR,#DHZTAB1 ;需要显示的汉字位置 CALL DHZ ;调用汉字显示子程序 MOV ADDR1,#10H ;第二行显示 MOV N1,#08H ;数量8 个 MOV DPTR,#DHZTAB2 ;需要显示的汉字(一个汉字占2 个字符) CALL DHZ MOV ADDR1,#08H ;第三行显示 MOV N1,#08H ;数量8 个 MOV DPTR,#DHZTAB3 ;需要显示的汉字位置 CALL DHZ ; 调用汉字显示子程序 MOV ADDR1,#18H ;第四行显示 MOV N1,#08H ;数量8 个 MOV DPTR,#DHZTAB4 ;需要显示的汉字(一个汉字占2 个字符) CALL DHZ SJMP $ DHZTAB1: DB "欢迎使用" DHZTAB2: DB "LJD-2008 实验系统” DHZTAB3: DB "WWW.LJD-2008.COM” DHZTAB4: DB "设计者: 林建东" ;-------------------------------------------------------------------- ;显示汉字16X16 点阵 DHZ: MOV ADDR,ADDR1 ; 开始行位置 MOV B,N1 ; 显示数量 DHZ1: MOV A,ADDR; ORL A,#80H ; 送显示地址 LCALL COMMAND_GLCD ;调写命令子程序 DHZ2: CLR A MOVC A,@A+DPTR ; 查找汉字的高位码 INC DPTR LCALL WRITE_GLCD ; 送显示 CLR A MOVC A,@A+DPTR ; 查找汉字的低位码 INC DPTR LCALL WRITE_GLCD ; 送显示 DJNZ B,DHZ2 RET ;点阵式LCD(128X64)模块显示实验 ;以下是公共的程序: ;---------------------------------------------------------- ;执行LCD 初始化工作 INITIAL_GLCD: PUSH ACC MOV A,#30H ;功能设定 CALL COMMAND_GLCD CALL DELAY MOV A,#30H ;功能设定 CALL COMMAND_GLCD MOV A,#30H CALL DELAY ;功能设定 CALL COMMAND_GLCD ;CALL DELAY MOV A,#06H ;显示器控制:游标不显示;但是字会闪烁 CALL COMMAND_GLCD MOV A,#01H ;CALL DELAY;清除显示器 CALL COMMAND_GLCD MOV A,#0CH ;进入模式设定 CALL COMMAND_GLCD POP ACC RET ;--------------------------------------------------------------- ;检查LCD 忙碌标志 CHKBUSY_GLCD: PUSH DPH PUSH DPL PUSH ACC MOV DPTR,#R_B_GLCD CHK$: MOVX A,@DPTR JB ACC.7,CHK$ ;判别是不是忙? POP ACC POP DPL POP DPH RET ;--------------------------------------------------------------- ;写命令到GLCD COMMAND_GLCD: PUSH DPH PUSH DPL CALL CHKBUSY_GLCD ;判别是不是忙? MOV DPTR,#W_C_GLCD MOVX @DPTR,A ;写入命令 POP DPL POP DPH ;CALL DELAY RET ;--------------------------------------------------------------- ;写资料到GLCD WRITE_GLCD: PUSH DPH PUSH DPL CALL CHKBUSY_GLCD ;判别是不是忙? MOV DPTR,#W_D_GLCD ;写入数据 MOVX @DPTR,A POP DPL POP DPH ;CALL DELAY RET ;-------------------------------------------------------------------- ;清除LCD 的显示幕 CLEAR_GLCD: PUSH ACC MOV A,#01H ;清除显示器 CALL COMMAND_GLCD POP ACC RET ;-------------------------------------------------------------------- ;将ACC 内容,以十六进制值显示 HEX_LCD: PUSH DPH PUSH DPL PUSH ACC PUSH ACC SWAP A ;高低四位元交换 ANL A,#0FH ;留下低四位元 MOV DPTR,#ASCII_CODE ;DPTR 指到ASCII_CODE MOVC A,@A+DPTR ;取得ASCII 码 CALL WRITE_GLCD ;写到LCD POP ACC ANL A,#0FH ;留下低四位元 MOVC A,@A+DPTR ;取得ASCII 码 CALL WRITE_GLCD ;写到LCD POP ACC POP DPL POP DPH RET ASCII_CODE: DB '0123456789ABCDEF' ;-------------------------------------------- DELAY:MOV R6,#0FFH DELY1:NOP NOP NOP DJNZ R6,DELY1 RET END 三)、LCD 图形显示实验 ;文件名称LCD_TX.ASM ;显示无线发射的一幅画。 ;================================================== ;定义中文LCD 液晶128X64 的地址 W_C_GLCD XDATA 8400H W_D_GLCD XDATA 8401H R_B_GLCD XDATA 8402H R_D_GLCD XDATA 8403H ;=================================================== TIMER0 DATA 30H ;延时时间的初值 TIMER1 DATA 31H ;调用延时子程序的次数 DATA1 DATA 32H ;点阵显示的变量1 DATA2 DATA 33H ;点阵显示的变量2 X DATA 34H ;X 方向的位置 Y DATA 35H ;Y 方向的位置 COUNTER DATA 36H ;计数器 N DATA 37H ;行数变量 D1 DATA 38H ;点变量1 D2 DATA 39H ;点变量1 ADDR DATA 3AH ;起始的显示位置 ADDR1 DATA 3BH ;起始的显示位置临时变量 N1 DATA 3CH ;行数的临时变量 ;----------------------------------------------------------------- ; ORG 0000H AJMP BEGIN ORG 0040H BEGIN: MOV SP,#60H CALL INITIAL_GLCD ;调用初始化 QQ: CALL DDISALL ;调用点显示子程序 SJMP $ ;================================================================== DDISALL:MOV A,#34H; extension instruction, graphic display off LCALL COMMAND_GLCD MOV DPTR,#TAB1 ;画的上半部分的点 MOV 5AH,DPL MOV 5BH,DPH MOV DPTR,#TAB2 ;画的下半部分的点 MOV 5CH,DPL MOV 5DH,DPH MOV Y,#0 ;显示点的起始位置 DDISA1: MOV X,#0 DDISA2: MOV A,#0 MOV DPL,5AH MOV DPH,5BH MOVC A,@A+DPTR MOV DATA1,A INC DPTR MOV A,#00H MOVC A,@A+DPTR MOV DATA2,A INC DPTR MOV 5AH,DPL MOV 5BH,DPH LCALL WRXY INC X MOV A,X CJNE A,#08,DDISA2 DDS: MOV DPL,5CH MOV DPH,5DH MOV A,#00H MOVC A,@A+DPTR MOV DATA1,A INC DPTR MOV A,#00H MOVC A,@A+DPTR MOV DATA2,A INC DPTR MOV 5CH,DPL MOV 5DH,DPH LCALL WRXY INC X MOV A,X CJNE A,#16,DDS INC Y MOV A,Y CJNE A,#32,DDISA1 NOP MOV A,#36H; extension instruction, graphic display on CALL COMMAND_GLCD NOP RET NOP;--------------- ; ; WRXY: NOP ;写2 个字节到XY position MOV A,Y ORL A,#80H ; set Y address LCALL COMMAND_GLCD MOV A,X ; set X address ORL A,#80H LCALL COMMAND_GLCD NOP MOV A,DATA1 LCALL WRITE_GLCD MOV A,DATA2 LCALL WRITE_GLCD RET ;--------------------------------------------------------- ;点阵式LCD(128X64)模块显示实验 ;以下是公共的程序: ;---------------------------------------------------------- ;执行LCD 初始化工作 INITIAL_GLCD: PUSH ACC MOV A,#30H ;功能设定 CALL COMMAND_GLCD MOV A,#30H ;功能设定 CALL COMMAND_GLCD MOV A,#30H ;功能设定 CALL COMMAND_GLCD MOV A,#06H ;显示器控制:游标不显示;但是字会闪烁 ----------------------------------------------------------------------------------------------------------------------------------------- CALL COMMAND_GLCD MOV A,#01H ;清除显示器 CALL COMMAND_GLCD MOV A,#0CH ;进入模式设定 CALL COMMAND_GLCD POP ACC RET ;检查LCD 忙碌标志 CHKBUSY_GLCD: PUSH DPH PUSH DPL PUSH ACC MOV DPTR,#R_B_GLCD CHK$: MOVX A,@DPTR JB ACC.7,CHK$ ;判别是不是忙? POP ACC POP DPL POP DPH RET ;写命令到GLCD COMMAND_GLCD: PUSH DPH PUSH DPL CALL CHKBUSY_GLCD ;判别是不是忙? MOV DPTR,#W_C_GLCD MOVX @DPTR,A ;写入命令 POP DPL POP DPH RET ;--------------------------------------------------------------- ;写资料到GLCD WRITE_GLCD: PUSH DPH PUSH DPL CALL CHKBUSY_GLCD ;判别是不是忙? MOV DPTR,#W_D_GLCD ;写入数据 MOVX @DPTR,A POP DPL POP DPH ;-------------------------------------------------------------------- ;清除LCD 的显示幕 CLEAR_GLCD: PUSH ACC MOV A,#01H ;清除显示器 CALL COMMAND_GLCD POP ACC RET ;-------------------------------------------------------------------- ;以上您调入了一幅图象: 长度x 宽度=128x64, 调整后为: 128x64 END 实验二、 三色16X 16 矩阵L E D 应用实验 一、实验目的 1、了解双色16X16 矩阵LED 基本原理和功能。 2、掌握双色16X16矩阵LED 和单片机的硬件接口和软件设计方法。 二、实验线路 双色16X16 LED 为共阳极,行信号 由4根I/O口线来提供74LD154,4-16译码器经过驱动来控制共阳端,列信号由4根I/O口线提供两片74HC595移位寄存器经过反向驱动(ULN2803A)来控制。在这里A、B、C、D为4-16译码器的输入端,RCLK、SRCLK、SRCLR、SER为74HC595的信号输入端可以用单片机I/O口来控制。在实验箱上,如果把开关SW1 到ON位置,那么上面8个信号分别由P1.0~P1.7控制。如果把开关SW1 到OFF位置可由用户定义连接方式。 公共端由8255 PA 口经过反相驱动来控制, 三、实验内容 用16X16 LED实现汉字显示实验。(由P1.0-P1.7控制) 四、 实验步骤 P1.0 — A P1.4 — SER P1.1 — B P1.5 — SRCLR P1.2 — C P1.6 — SRCLK P1.3 — D P1.7 — RCLK 五、 实验程序 文件名称: 16X16 LED_1.ASM 显示汉字的源文件 六、 预备资料 在使用16X16 LED前,先必须熟悉其的内部机构,工作原理、功能以及命令等,请参考相关的资料。 七、思考 编程模拟霓虹灯显示,从两边的绿色灯显示向中间靠拢,再变成红色向两边分散。改变程序可以控制不同的显示。 程序如何设计。 汉字显示的源文件 ;16X16LED汉字显示实验 ;行扫描由74LS154控制 P1.0-P1.4对应154的A-D ;列扫描由74HC59移位控制 ; ORG 0000H START: MOV DPTR,#TAB ;汉字表的位置 MOV P1,#00H ;由第一行开始显示 LP5: CLR P1.5 ;74HC595输出清零 P1.5--SRCLR SETB P1.5 INC DPTR ;取汉字字符 MOV A,#00H MOVC A,@A+DPTR LCALL FS1 ;调用9-16列显示子程序 MOV A,#00H DEC DPL MOVC A,@A+DPTR LCALL fs1 ;调用1-8列显示子程序 INC P1 ;下一行显示 MOV A,P1 ANL A,#0fh CJNE A,#00h,LP4 SJMP START LP4: INC DPTR INC DPTR SJMP LP5 ;数据发送子程序 FS1: CLR C LP11: MOV R5,#08H ;发送字符 LP: RRC A MOV P1.4,C ;P1.4--SER 数据输入端 CLR P1.6 ;P1.6--SRCLK 数据输入同步脉冲,上升沿有效 SETB P1.6 DJNZ R5,LP ;8个位发送是否结束 CLR P1.7 ;P1.7--RCLK 数据输出锁存器 SETB P1.7 RET ; 当前所选字体下一个汉字对应的点阵为: 宽度x高度=16x16 TAB: DB 00H,00H,00H,20H,02H,10H,02H,10H,02H,1CH,0EH,38H,7CH,0F0H,37H,70H DB 06H,70H,1CH,0DEH,1DH,97H,04H,0D1H,04H,70H,00H,10H,00H,00H,00H,00H END 实验三、A/D(ADC0809、)转换实验 一、ADC0809 8 位8 路A/D 转换实验。 一)、实验目的 1、了解ADC0809 8 位A/D 转换芯片的基本原理和功能。 2、掌握ADC0809 和单片机的硬件接口和软件设计方法。 二)、实验线路 三)、实验内容 采样0-5V 电压,把采样的结果从LCD 上显示。 四)、 实验步骤 1、用实验插针把W3 10K电位器输出端的 VT1插孔和ADC0809 的0 通道 IN0 连接,这样A/D的0通道的采样电压在0-5V之间可以变化。改变通道,修改程序可以显示不同的数据采样。 五)、 实验程序 文件名称:AD_1.ASM ;ADC0809 采样子程序 W_D_0809 EQU 0A000H ORG 0000H ;-------------------------------------------------- AD0809: PUSH DPL PUSH DPH PUSH ACC MOV DPTR,#W_D_0809 ; AD0809的启动地址 MOV A,#00H MOVX @DPTR,A ; 0 通道 LCALL DELAY100US ; 延时100US MOVX A,@DPTR ; 读出A/D的结果 MOV 3FH,A ; 暂存 POP ACC POP DPH POP DPL RET DELAY100US: MOV R6,#19H DELY1: NOP NOP DJNZ R6,DELY1 RET ;---------------------------------------------------- END ;===================================================================== ; A/D采样显示源文件 ;文件名称:AD_2.ASM ;ADC0809 采样子程序 ;采样的结果在LCD上面显示. 从0通道输入变化的电压信号,观察LCD显示的结果是不是对应。 ORG 0000H AJMP START ORG 0030H START: MOV SP,#60H MOV R0,#57H CALL INITIAL_GLCD ;调用LCD初始化 CALL AD_LCD CALL DELAY500 AJMP $ ;======================================================== AD_LCD: MOV ADDR1,#10H ;第二行显示 MOV N1,#08H MOV DPTR,#DHZTAB1 CALL DHZ MOV DPTR,#DHZTAB2 ;第三行显示 MOV ADDR1,#08H MOV N1,#08 CALL DHZ AD_LCD1: LCALL ADC0809 ;调用0809采样程序 LCALL ZHH ;调用转换程序 MOV ADDR1,#0CH ;采数据送LCD显示 SETB F0 MOV A,40H SWAP A MOV 42H,A CALL LDHZ CLR F0 MOV ADDR1,#0DH MOV 42H,41H CALL LDHZ CALL DELAY500 ;调用延时 JMP AD_LCD1 ;------------------------------------------------------------------- TAB: DB 10H,11H,13H,15H,09H,0BH,0DH,1EH DHZTAB1: DB "A/D 0809采样结果' DHZTAB2: DB "通道 0 : . V " ;-------------------------------------------------------------------- ;显示汉字16X16点阵 DHZ: MOV ADDR,ADDR1 ; 开始行位置 MOV B,N1 ; 显示数量 DHZ1: MOV A,ADDR; ORL A,#80H ; 送显示地址 LCALL COMMAND_GLCD ;调写命令子程序 DHZ2: CLR A MOVC A,@A+DPTR ; 查找汉字的高位码 INC DPTR LCALL WRITE_GLCD ; 送显示 CLR A MOVC A,@A+DPTR ; 查找汉字的低位码 INC DPTR LCALL WRITE_GLCD ; 送显示 DJNZ B,DHZ2 RET LDHZ: MOV ADDR,ADDR1 ; 开始行位置 LDHZ1: MOV A,ADDR; ORL A,#80H ; 送显示地址 LCALL COMMAND_GLCD LDHZ3: MOV A,42H LDHZ2: LCALL HEX_LCD RET ;-------------------------------------------------------- ADC0809: PUSH DPL PUSH DPH PUSH ACC MOV DPTR,#W_D_0809 ; AD0809的启动地址 MOV A,#00H MOVX @DPTR,A ; 0 通道 LCALL DELAY01 ; 延时100US MOVX A,@DPTR ; 读出A/D的结果 MOV 3FH,A ; 暂存 POP ACC POP DPH POP DPL RET ;-------------------------------------------------------------------- ;转换子程序 : 3FH的内容(A/D采样的结果)*(5V/256(FFH))=十进制结果 ;40H,41H.例如:3FH=0FFH, 那么程序执行后:40H=04H , 41H=99H 既4.99V ZHH: PUSH PSW PUSH ACC SETB RS0 MOV A,#0C4H MOV B,3FH MUL AB MOV R6,B MOV R7,A HB2: CLR A MOV R3,A MOV R4,A MOV R5,A MOV R2,#10H HB3: MOV A,R7 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A MOV A,R5 ADDC A,R5 DA A MOV R5,A MOV A,R4 ADDC A,R4 DA A MOV R4,A MOV A,R3 ADDC A,R3 MOV R3,A DJNZ R2,HB3 MOV 40H,R3 MOV 41H,R4 POP ACC POP PSW RET 实验四、DAC 0832 输出0-5V电压转换实验 一、实验目的 1、 了解 D/A (DAC0832)的基本原理和功能。 2、 掌握 D/A (0832)和单片机的硬件接口以及软件设计方法。 二、实验线路 三、实验内容 送00- 0FF到 D/A ,可以通过万用表去测量,观察输出电压的变化。 四、实验步骤 把D/A 信号的输出口OUT插孔,用连接线接入到万用表观察。 五、实验程序 文件名称: DAC_1.ASM D/A转换程序源文件。 六、预习要求 了解0832的基本原理以及内部结构 ;文件名称:DAC_1.ASM ;DAC0832转换子程序 ;================================================== ;可编程 D/A 控制IC (0832) 的地址 W_D_0832 XDATA 0C000H ;-------------------------------------------------- DAC0832: PUSH DPL PUSH DPH PUSH ACC MOV DPTR,#W_D_0832 ; DAC0832启动地址 MOV A,#00H MOVX @DPTR,A ; 输出电压0-5V POP ACC POP DPH POP DPL RET END 实验5、电机(直流电机、步进电机、继电器)控制实验 电动机包括直流电动机、交流电动机及步进电动机等三种,其在工业控制中扮演极重要的角色。其中,由于步进电动机的驱动方式简单、激活快速及定位准确等优点,被广泛应用于计算机外设装置上,如打印机、绘图机、磁盘驱动器以及工业控制的工具机、机械手臂等。 下面首先针对步进电动机与直流电动机的工作原理进行说明,并一常用驱动电路与的综合运用进行实习,以实际程序范例进行讲解,以使读者能更进一步加以发挥运用。 一、直流电机驱动实验 1、实验目的 1)、掌握采用单片机控制直流电动机的硬件接口技术。 2)、掌握直流电动机驱动程序的设计和调试方法。 3)、熟悉直流电动机的工作特性。 2、实验线路和说明 3、实验内容 由单片机控制控制电机的转动方向。快、慢由电位器W3调节。 4、实验步骤 把实验用的连接线把W3的VT1插孔和电机的DJ插孔连接,可以通过W3来调节DJ端的电压。P1.0连接到CH0, P1.1连接到CH1, 运行程序,观察电机的变化. P1.0=0, P1.1=1 电机正转 P1.0=1, P1.1=0 电机反转 P1.0=0, P1.1=0 电机停止 5、实验程序 ;直流电机控制输出程序 ;文件名称:DJKZ.ASM ;================================================== ORG 0000H DJKZ: CLR P1.0 ;电机正转 SETB P1.1 LCALL 10S CLR P1.0 ;停止 CLR P1.1 LCALL 10S SETB P1.0 ;电机反转 CLR P1.1 6、预习要求 了解直流电机的工作原理,以及控制方法。 7、思考问题 如果用DAC0832的输出的电压信号来控制电机的转动快,慢。 二、步进电机驱动实验 1、步进电动机的工作原理及运用 1)、步进电动机有三线式、五线式、六线式三种,但其控制方式均相同,必须以脉冲电流来驱动。若每旋转一圈以200个励磁信号来计算,则每个励磁信号前进18度,其旋转角度与脉冲数成正比,正、反转可由脉冲顺序来控制。 2)、步进电动机的励磁方式可分为全部励磁及半步励磁,其中全步励磁又有1相励磁及2相励磁之分,而半步励磁又称1-2相励磁。图为步进电动机的控制等效电路,适应控制A、B、/A、/B的励磁信号,即可控制步进电动机的转动。每输出一个脉冲信号,步进电动机只走一步。因此,依序不断送出脉冲信号,即可步进电动机连续转动。分述如下: (1) 1相励磁法:在每一瞬间只有一个线圈导通。消耗电力小,精确度良好,但转矩小,振动较大,每送一励磁信号可走1.8度。若欲以1相励磁法控制步进电动机正转,其励磁顺序如图所示。若励磁信号反向传送,则步进电动机反转。 励磁顺序: A→B→C→D→A (2) 2相励磁法:在每一瞬间会有二个线圈同时导通。因其转矩大,振动小,故为目前使用最多的励磁方式,每送一励磁信号可走1.8度。若以2相励磁法控制步进电动机正转,其励磁顺序如图所示。若励磁信号反向传送,则步进电动机反转。 励磁顺序: AB→BC→CD→DA→AB (3)1-2相励磁法:为1相与2相轮流交替导通。因分辨率提高,且运转平滑,每送一励磁信号可走0.9度,故亦广泛被采用。若以1相励磁法控制步进电动机正转,其励磁顺序如图所示。若励磁信号反向传送,则步进电动机反转。 励磁顺序: A→AB→B→BC→C→CD→D→DA→A 3、步进电动机的负载转矩与速度成反比,速度愈快负载转矩愈小,当速度快至其极限时,步进电动机即不再运转。所以在每走一步后,程序必须DELAY一段时间。 1、实验目的 1)、掌握采用单片机控制步进电机的硬件接口技术。 2)、掌握步进电机驱动程序的设计和调试方法。 3)、 熟悉步进电动机的工作特性。 2、实验线路和说明 3、实验内容 1)、通电时,步进电机停止 2)、按P1.0(键盘7 ) 时电机正转; 按P1.1(键盘 8) 时电机反转 3)、按P1.2(键盘9) 时电机停止运行。  4、实验步骤 把P1.0, P1.1, P1.2分别接到插孔RL0,RL1,RL2(键盘扫描行信号输出端) ; P2.0,P2.1,P2.2,P2.3 接步进电机的HA,HB,HC,HD插孔, XO插孔接GND插孔 运行程序,观察电机的转动情况和指示灯的相应变化。 正转控制模型数据 延时可由程序延时,也可以由定时器,这里的程序由延时为例。 五、实验程序 ;文件名称:BJDJ.ASM ;============================================================================= ;步进电机控制实验 ORG 00H STOP: ORL P2, #0FFH ;步进电机停止运行 LOOP: JNB P1.0, FOR2 ;是否按P1.0,是 JNB P1.1, REV2 JNB P1.2, STOP1 JMP LOOP FOR: MOV R0, #00H FOR1: MOV A, R0 MOV DPTR, #TABLE MOVC A, @A+DPTR JZ FOR CPL A MOV P2, A JNB P1.2, STOP1 JNB P1.1, REV2 CALL DELAY INC R0 JMP FOR1 REV: MOV R0, #05H REV1: MOV A, R0 MOV DPTR, #TABLE MOVC A, @A+DPTR JZ REV CPL A MOV P2, A JNB P1.2, STOP1 JNB P1.0, FOR2 CALL DELAY INC R0 JMP REV1 STOP1: CALL DELAY JNB P1.2, $ CALL DELAY JMP STOP FOR2: CALL DELAY JNB P1.0, $ CALL DELAY JMP FOR REV2: CALL DELAY JNB P1.1, $ CALL DELAY JMP REV DELAY: MOV R1, #40 D1: MOV R2, #48 DJNZ R2, $ DJNZ R1, D1 RET TABLE: DB 03H,09H,0CH,06H,00 DB 03H,06H,0CH,09H,00 END ;========================================================== 六、思考问题 如果改变电机的工作方式或者方向、速度,任何设计控制软件。 三、继电器控制输出驱动实验 1、实验目的 1)、掌握采用单片机继电器的硬件接口技术。 2)、掌握继电器驱动程序的设计和调试方法。 3)、熟悉继电器的工作特性。 2、实验线路和说明 3、实验内容 利用P1口输出高低电平,控制继电器的开合,来控制风扇的启动和停止控制. 4、实验步骤 用实验用的连接线,把P1.0接JIN端,运行程序,使P1.0的电平变化,高电平继电器吸合,常开点接上灯点亮,风扇不动.低电平时,继电器不工作,常闭点闭合熄灭,风扇启动. 实验程序 ; ============================================================================= ;文件名称: JDQ.ASM ;============================================================================== ORG 0000H JMP START ORG 0030H START: MOV SP,#50H SETB P1.0 CALL DELY LP: CPL P1.0 JMP LP DELY: MOV R6,#0FFH DL2: MOV R7,#0FFH DL1: NOP NOP DJNZ R7,DL1 DJNZ R6,DL2 RET END 六、预习要求 现代自动化控制的设备中都存在一个电子和电气电路的互相连接问题,一方面要使电子电路的控制信号能够控制电气电路提供良好的电隔离,以保护电子电路和人身的安全,电子继电器便能够完成这个桥梁的作用. 七、思考问题 如果继电器需要提供光电隔离驱动,应该任何连接设计. 实验6、I 2 C 总线芯片的读、写实验 一、I2C(24C02)读、写实验 1、串行EEPROM(24C02)接口方法 在新一代单片机中,无论总线型还是非总线型单片机,为了简化系统结构,提高系统的可靠性,都推出了芯片间的串行数据传输技术,设置了芯片间的串行传输接口或串行总线。串行总线扩展接线灵活,极易形成用户的模块化结构,同时将大大简化其系统结构。串行器件不仅占用很少的资源和I/O 线,而且体积大大缩小,同时还具有工作电压宽,抗干扰能力强,功耗低,数据不宜丢失和支持在线编程等特点。目前,各式各样的串行接口器件层出不穷,如:串行EEPROM,串行ADC/DAC,串行时钟芯片,串行数字电位器,串行微处理器监控芯片,串行温度传感器等等。 串行EEPROM 是在各种串行器件应用中使用较频繁的器件,和并行EEPROM 相比,串行EEPROM 的数据传送的速度较低,但是其体积较小,容量小,所含的引脚也较少。所以,它特别适合于需要存放非挥发数据,要求速度不高,引脚少的单片机的应用。这里介绍串行EEPROM 芯片,以及它们和单片机的接口技术。 2、串行EEPROM 及其工作原理 串行EEPROM 中,较为典型的有ATMEL 公司的AT24CXX 系列以及该公司生产的AT93CXX 系列,较为著名的半导体厂家,包括Microchip,国家半导体厂家等,都有AT93CXX系列EEPROM 产品。 AT24CXX 系列EEPROM AT24CXX 系列的串行电可改写及可编程只读存储器EEPROM 有10 种型号,其中典型的型号有AT24C01A/02/04/08/16 等5 种,它们的存储容量分别是1024/2048/4096/8192/16384位,也就是128/256/512/1 024/2048 字节。这个系列一般用于低电压,低功耗的工业和商业用途, 并且可以组成优化的系统。这个系统还有多种电压级别,包括:5V(4.5~5.5V),2.7V(2.7~5.5V),2.5V(2.5~5.5V),1.8V(1.8~5.5V)等4 种电压级别。它们的封装有8引脚PDIP 方式,8 引脚和16 引脚SOIC 方式。信息存取采用2 线串行接口。这里我们就24C02的结构特点,其他系列比较类似。 3、结构原理及引脚 AT24C02 有地址线A0~A2,串行数据引脚SDA,串行时钟输入引脚SCL,写保护引脚WP 等引脚。很明显,其引脚较少,对组成的应用系统可以减少布线,提高可靠性。 各引脚的功能和意义如下。 ①VCC 引脚,电源+5V。 ②GND 引脚,地线。 ③SCL 引脚,串行时钟输入端。在时钟的正跳沿即上升沿时把数据写入EEPROM;在 时钟的负跳沿即下降沿时把数据从EEPROM 中读出来。 ④SDA 引脚,串行数据I/O 端,用于输入和输出串行数据。这个引脚是漏极开路的端 口,故可以组成“线或”结构。 ⑤A0,A1,A2 引脚,是芯片地址引脚。在型号不同时意义有些不同,但都要接固定电平。 ⑥WP 引脚,写保护端。这个端提供了硬件数据保护。当把WP 接地时,允许芯片执行 一般读写操作;当把WP 接VCC 时,则对芯片实施写保护。 ⑦NC 引脚,无用引脚,不接任何电平。 4、存储器的组织及运行 ①存储器的组织:对于不同的型号,存储器的组织不一样,其关键原因在于存储器容 量存在差异。对于AT24CXX 系列的EEPROM,其典型型号的存储器组织如下。 AT24C01A:内部含有128 个字节,故需要7 位地址对其内部字节进行寻址 AT24C02:内部含有256 个字节, 故需要8 位地址对其内部字节进行读写。 5、运行方式: 对于时钟及数据传送,串行数据I/O 端口SDA 一般需要用外部上拉电阻将其电平拉高。加到SDA 的数据只有在串行时钟SCL 对于低电平的时间周期内可以改变。当串行时钟SCL处于高电平时,SDA 的数据变化用于指明起始或停止状态。在SCL 为高电平期间,如果SDA从低电平上升到高电平,则表示起始状态;如果SDA 从高电平下降到低电平,则表示停止状态。 起始状态:当SCL 为高电平时,SDA 由高电平变到低电平则处于起始状态。起始状态应处于任何其他命令之前。 停止状态:当SCL 处于高电平时,SDA 从低电平变到高电平则处于停止状态。在执行完读序列信号之后,停止命令将把EEPROM 置于低功耗的备用方式(Standby Mode). 应答信号:应答信号是由接受数据的器件发出的。当EEPROM 接受完一个写入数据之后,会在SDA 上发一个”0”应答信号。反之,当单片机接受完来自EEPROM 的数据后,单片机也应向SDA 发ACK 信号。ACK 信号在第9 个时钟周期时出现。 备用方式(Standby Mode):AT24C01A/02/04/08/16 都具有备用方式,以保证在没有读写操作时芯片处于低功耗状态。在下面两种情况中,EEPROM 都会进入备用方式:第一,芯片通电的时候;第二,在接到停止位和完成了任何内部操作之后。 AT24C02 等5 种典型的EEPROM 在进入起始状态之后,需要一个8 位的“器件地址字” 去启动存储器进行读或写操作。在写操作中,它们有“字节写”,“页面写”两种不同的写入方法。在读操作中,有“现行地址读”,随机读和“顺序读”种各具特点的读出方法。下面分别介绍器件寻址,写操作和读操作。 ① 器件寻址:所谓器件寻址(Device Addressing)就是用一个8 位的器件地址字(DeviceAddress Word)去选择存储器芯片。在逻辑电路中的AT24CXX 系列的5 种芯片种,即AT24C01A/02/04/08/16 中,如果和器件地址字相比较结果一致,则读芯片被选中。下面对器件寻址的过程和意义加以说明。 ② 芯片的操作地址 用于存储器EEPROM 芯片寻址的器件地址字如图所示。它有4 种方式,分别对应于 1K/2K,4K,8K 和16K 位的EEPROM 芯片。 从图中看出:器件地址字含有3 个部分。第一部分是高4 位,它们称为EEPROM AT24C01A/02/04/08/16 的标识第二部分称为硬布线地址,它们是标识后的3 位。第三部分是最低位,它是读/写操作选择位。 第一部分:器件标识,器件地址字的最高4 位。这4 位的内容恒为”1010”,用于标识 EEPROM 器件AT24C01A/02/04/08/16。 第二部分:硬布线地址,是与器件地址字的最高4 位相接的低3 位。硬布线地址的3 位 有2 种符号:Ai(i=0~2),Pj(j=0~2)其中Ai 表示外部硬布线地址位对于AT24C10A/02 这两种1K/2K 位的EEPROM 芯片,硬布线地址为”A2,A1,A0”.在应用时,”A2,A1,A0”的内容必须和EEPROM 芯片的A2,A1,A0 的硬布线情况,即逻辑连接情况相比较,如果一样,则芯片被选中;否则,不选中。 AT24C01A/02:真正地址=字地址 第三部分:读/写选择位,器件地址字的最低位,并用R/W 表示。当R/W=1 时,执行读 操作;当R/W=0 时,执行写操作。 当EEPROM 芯片被选中时,则输出”0”;如果EEPROM 芯片没有被选中,则它回到备用 方式。被选中的芯片。其以后的输入,输出情况视写入和读出的内容而定。 ②写操作:AT24C01A/02/04/08/16 这5 种EEPROM 芯片的写操作有2 种:一种是字节 写,另一种是页面写。 字节写 这种写方式只执行1 个字节的写入。字节写的过程如图所示,其写入过程分外部写和内 部写两部分,分别说明如下。 在起始状态中,首先写入8 位的器件地址。则EEPROM 芯片会产生一个”0”信号ACK 输出作为应答;接着,写入8 位的字地址,在接受了字地址之后,EEPROM 芯片又产生一个”0”应答信号ACK;随后,写入8 位数据,在接受了数据之后,芯片又产生一个”0”信号ACK 作为应答。到此为止,完成了一个字节写过程,故应在SDA 端产生一个停止状态,这是外部写过程。 在这个过程中,控制EEPROM 的单片机应在EEPROM 的SCL,SDA 端送入恰当的信号。 当然在一个字节写过程结束时,单片机应以停止状态结束写过程。在这时,EEPROM 进入内 部定时的写周期,以便把接受的数据写入到存储单元中。在EEPROM 的内部写周期中,其 所有输入被屏蔽,同时不响应外部信号直到写周期完成。这是内部写过程。内部写过程大约 需要10ms 时间。内部写过程处于停止状态与下一次起始状态之间。 页面写 这种写入方式执行含若干字节的1 个页面的写入。对于AT24C01A/02,它们的1 个页面 含8 个字节;页面写的开头部分和字节写一样。在起始状态,首先写入8 位器件地址;待 EEPROM 答当了”0”信号ACK 之后,写入8 位字地址;又待芯片应答了”0”信号ACK 之后, 写入8 位数据。 随后页面写的过程则和字节写有区别。 当芯片接受了第一个8 位数据并产生应答信号ACK 之后,单片机可以连续向EEPROM 芯片发送共为1 页面的数据。对于AT24C01A/02,可发送共1 个页面的8 个字节(连第一个 8 位数据在内)。对于AT24C04/08/16,则共可发送1 个页面共16 个字节(连第一个8 位数据在内)。当然,每发一个字节都要等待芯片的应答信号ACK。 之所以可以连续向芯片发送1 个页面数据,是因为字地址的低3~4 位在EEPROM 芯片内部可实现加1,字地址的高位不变,用于保持页面的行地址。页面写和字节写两者一样可,都分为外部写和内部写过程。 应答查询:应答查询是单片机对EEPROM 各种状态的一种检测。单片机查询到EEPROM 有应答”0”信号ACK 输出,则说明其内部定时写的周期结束,可以写入新的内容。单片机是通过发送起始状态及器件地址进行应答查询的。由于器件地址可以选择芯片,则检测芯片送出到SDA 的状态就可以知道其是否有应答了。 ③读操作:读操作的启动是和写操作类同的。它一样需要图所示的器件地址字。和写操 纵不同的就是信号为时执行读操作。 读操纵有3 种方式,即现行地址读,随机读和顺序读。下面分别说明它们的工作过程。 现行地址读 在上次读或写操纵完成之后。芯片内部字地址计数器会加1,产生现行地址。只要没有再执行读或写操作,这个现行地址就会在EEPROM 芯片保持接电的期间一直保存。一旦器件地址选中EEPROM 芯片,并且有R/W=1,则在芯片的应答信号ACK 之后把读出的现行地址的数据送出。现行地址的数据输出时,就由单片机一位一位接受,接收后单片机不用向EEPROM 发应答信号ACK”0”电平,但应保证发出停止状态的信号以结束现行地址读操作。 现行地址读会产生地址循环覆盖现象,但和写操纵的循环覆盖不同。在写操纵中,地址的循 环覆盖是现行页面的最后一个字节写入之后,再行写入则覆盖同一页面的第一个字节。而在 现行地址读操纵中,地址的循环覆盖是在最后页面的最后一个字节读出之后,再行读出才覆 盖第一个页面的第一个字节。 随机读 随机读和现行地址读的最大区别在于随机读会执行一个伪写入过程以把字地址装入 EEPROM 芯片中,然后执行读出, 显然,随机读有2 个步骤。 第一,执行伪写入——把字地址送入EEPROM,以选择需读的字节。 第二,执行读出——根据字地址读出对应内容。 当EEPROM 芯片接收了器件地址及字地址时,在芯片产生应答信号ACK 之后,单片机必须再产生一个起始状态,执行现行地址读,这时单片机再发出器件地址并且令R/W=1,则EEPROM 应答器件地址并行输出被读数据。在数据读出时由单片机执行一位一位接收,接收 完毕后,单片机不用发”0”应答信号ACK,但必须产生停止状态以结束随机读过程。 应该注意:在随机读的第二个步骤是执行现行地址读的,由于第一个步骤时芯片接收了 字地址,故现行地址就是所送入的字地址。 顺序读 顺序读可以用现行地址读或随机读进行启动。它和现行地址读。随机读的最大区别在于:顺序读在读出一批数据之后才由单片机产生停止状态结束读操作;而现行地址读和随机读在读出一个数据之后就由单片机产生停止状态结束读操作。 执行顺序读时,首先执行现行读或随机读的有关过程,在读出第一个数据之后,单片机输出“0”应答信号ACK。在芯片接收应答信号ACK 后,就会对字地址进行计数加1,随后串行输出对应的字节。当字地址计数达到存储器地址的极限时,则字地址会产生覆盖,顺序读将继续进行。只有在单片机不再产生“0”应答信号ACK,而在接收数据之后马上产生停止状态,才会结束顺序读操作。 在对AT24CXX 系列执行读写的2 线串行总线工作中,其有关信号是由单片机的程序和EEPROM 产生的。有两点特别要记住:串行时钟必须由单片机程序产生,而应答信号ACK则是由接收数据的器件产生,也就是写地址或数据时由EEPROM 产生ACK,而读数据时由单片机产生。 (4)AT24CXX 系列应用注意事项 AT24CXX 系列型号:AT24CXX 系列EEPROM 有13 种型号。它们的容量不同,执行页历写时的页历定义不同,进行读写时的地址位数也不同,器件地址不同。有关主要指标在应用中要加以区别和注意。 一、实验目的 1、掌握采用单片机和I2C 存储器24C02 硬件接口技术。 2、掌握24C02 读、写程序的设计和调试方法。 3、熟悉24C02 的芯片的功能。 二、实验线路和说明 三、实验内容 对24C02 进行读,写、效验程序控制,充分了解I2C 总线的应用方法。 四、实验步骤 用实验用的连接线把P1.0 插孔和24C02 的SCL 插孔相连,P1.1 插孔和24C02 的SDA 插孔相连,通过仿真器来运行程序,观察24C02 的内部存储器的变化. 实验程序 1、写把CPU 的RAM 31H~38H 的数据送到24C02 的00H~07H 单元 CPU 写数据到24C02 的数据格式如下 其中: S 表起始条件, A 表示应答响应, P 表示停止条件 ; 文件名称:W24C02.ASM SCL EQU P1.0 SDA EQU P1.1 ORG 0000H WR_EEROM: MOV R6,#40H MOV 30H,#00H MOV R0,#30H W_LOOP: LCALL WR_DATA W_LOOP2: INC @R0 DJNZ R6,W_LOOP1 SJMP STOP W_LOOP1:LCALL WR_DATA2 SJMP W_LOOP2 STOP: LCALL STOP24 SJMP $ ;------------------------------------- WR_DATA: LCALL START MOV A,#0A0H LCALL WBYTE WR_DATA1: MOV A,@R0 LCALL WBYTE WR_DATA2: MOV A,#99H LCALL WBYTE RET ;------------------------------------- WBYTE: NOP MOV R3,#08H WBY0: CLR SCL RLC A MOV SDA,C SETB SCL DJNZ R3,WBY0 CLR SCL NOP SETB SCL NOP JB SDA,$ CLR SCL NOP RET ;--------------------------------- START: CLR SCL NOP SETB SDA NOP SETB SCL NOP CLR SDA NOP CLR SCL RET ;--------------------------------- STOP24: CLR SCL NOP CLR SDA NOP SETB SCL NOP SETB SDA NOP CLR SCL RET END 2、读24C02 的00H~07H 到CPU 的RAM 31H~38H 单元。 CPU 从24C02 内读数据格式如下: 其中: S 表起始条件, A 表示应答响应, P 表示停止条件 ;文件名称:R24C02.ASM SCL EQU P1.0 SDA EQU P1.1 ORG 0000H RD_EEROM: MOV R6,#08H MOV 30H,#00H MOV R0,#30H MOV R1,#40H R_LOOP: LCALL START MOV A,#0A0H LCALL WBYTE MOV A,@R0 LCALL WBYTE R_LOOP1: LCALL START MOV A,#0A1H LCALL WBYTE LCALL RBYTE MOV @R1,A INC R1 DJNZ R6,R_LOOP1 LCALL STOP24 SJMP $ ;------------------------------------------ RBYTE: NOP MOV R3,#08H RBY0: CLR SCL NOP SETB SCL NOP MOV C,SDA RLC A DJNZ R3,RBY0 CLR SCL NOP SETB SDA NOP SETB SCL RET ;---------------------------------------------- WBYTE: MOV R3,#08H WBY0: CLR SCL NOP RLC A MOV SDA,C SETB SCL DJNZ R3,WBY0 CLR SCL NOP SETB SCL NOP JB SDA,$ CLR SCL NOP RET ;--------------------------------------------- START: CLR SCL NOP SETB SDA NOP SETB SCL NOP CLR SDA NOP NOP NOP CLR SCL RET ;--------------------------------- STOP24: CLR SCL NOP CLR SDA NOP SETB SCL NOP SETB SDA NOP CLR SCL RET END 思考:如果读、写24C02 的10H 到1FH 的16 个单元应该如何操作。 实验7、IC 卡(SE4442 控制)读、写实验 一、逻辑加密卡(IC)SEL4442 及其应用 随着“三金工程”的实施,智能卡(即IC 卡)的应用已逐渐出现在人们的生活中。目前应用较多的逻辑加密卡,主要是由EEPROM 单元陈列和密码控制逻辑构成的,它具有一定的保密逻辑功能,不像存储器卡(如24C01、02 等)那样可以自由擦写,也不需要像CPU 卡那样进行复杂的密码计算,有很好的使用范围。西门子逻辑加密卡SLE4442,由于它的安全性能好,存储量大等优点,适合于一卡多用,在IC 卡个人化的应用系统设计中,采用是一种很好的选择。 本实验中用的IC 卡为带有保护功能和可编程密码(PSC)的256 个字节EEPROM 的存储卡SLE4442。 西门子公司生产SLE4442 的特征为: ①、256X8 位的EEPROM 用户存储器; ②、32X1 位写保护存储器; ③、2 线制通信 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 ,可以按字节寻址; ④、串行接口、触点配置、复位响应符合ISO 标准7816-3; ⑤、擦除和写入的编程时间各为2.5MS; ⑥、至少可以擦/写10000 次,数据保持10 年以上. (1)、卡功能分区 图为SLE4442 主存储器和密码存储器示意图。主存储器的容量为256 个字节,每个字节为8 位。主存储器可分为保护区和应用区,地址单元为00H~1FH 的32 个字节是保护区,带位保护功能,一旦实行保护后,被保护的单元不可擦除和改写。保护区中没有设置为保护状态的字节,其使用与应用区完全相同。 SLE4442 保护区已固化的信息如下: 00H~03H 复位应答信息 04H~ 07H 芯片生产厂家代码和卡型编码。 15H~1AH 应用标识。 在应用系统中,根据需要,保护区既可用作存放固定信息,如发行单位编号、卡编号、批次号、发行时间、持卡人姓名、证件号码等,也可像应用区一样,存放可变信息。 应用区地址范围为20H~FFH,该区的读/写操作是以字节方式进行。由于SLE4442 的应用区容量较大,空间安排显得十分灵活,在具体应用中,可根据不同的应用要求,将应用区空间分为几个区,实现一卡多用的功能。 SLE4442 还提供了一个4 字节的密码存储器,其中0 单元的EC 是误码计数器,只用了该单元的后三位,在IC 卡个人化后,(EC)=111.其余3 个字节是密码存放单元(PSC)。 在上电以后,除了密码以外,整个存储器都是可读的。如果擦除或改写卡中内容,必须校验密码,只有3 个字节的密码内容完全相同才可进行。这时才可读出密码内容,如果需要的话,还可以改写新的密码。如果输入的数据与密码比较为不正确,错一次,(EC)为011,再一次不正确,(EC)为001,三次不正确的话,(EC)则为000,这时卡片自锁,不能再改写卡中内容。如三次比较里面有一次正确,则(EC)恢复为111。 芯片正面 IC 引脚示意图 引脚定义和功能 2、IC 卡接口电路 图为IC 卡座与CPU 连接的电路原理图。在电路上,IC 卡与接口设备的连接采用I2C 总线形式,支持ISO/7816-3 同步传输协议,除去密码区操作外,其它类似与对一般串行EEPROM的操作。对SLE4442 的操作仅需3 根线,即串行时钟线CLK、复位线RST 和双向数据线I/O。3根线各自都需要通过一个上拉电阻连到电源线上。 A、复位和复位应答 复位和复位应答的时序如图所示,软件程序框图如图所示。 上电以后,随着CLK 上的1 个时钟脉冲,当RST 由高电平到低电平时,即进行了一次复位操作。这个操作将得到卡的应答。随着以后32 个时钟脉冲的输入,I/O 线上将得到相应的32 位数据,这就是从卡发送到CPU 的复位应答标头。标头长度固定为32 位,组成的4个字节为H1,H2,H3,H4。其中H1 表示同步传输协议的类型,H2 表示协议类型的参数,它们必须符合的ISO/7816-3 标准;H3 和H4 不在ISO/7816-3 范围之内。SLE4442 的标头为A2 13 10 91。 图中,以上为复位操作,以下为复位应答。 复位应答标头能卡与接口设备是否兼容,如不兼容,则要求IC 卡下电,释放触电。 复位过程的时钟频率可在7kHz~50kHz 之间选取。 在对卡操作前,一般要进行复位和复位应答操作,有时要连续进行两次这样的操作,才 能得到正确的复位应答信息。 B、操作命令 复位应答以后,芯片等待输入操作命令。每个命令必须由三部分组成:一个开始状态,接着是写入三个字节(命令字、地址、数据),再接着是一个停止状态。 CLK 在高电平时,I/O 线由高到低为开始状态;CLK 在高电平时,I/O 线由高到低为停止状态。命令方式时序如图所示。所有在I/O 线上的数据变化有CLK 线上的下降沿开始。 命令方式时序图 表列出了SLE4442 的7 个操作命令。表中上面4 个命令同样适合与不带密码存储器其余 与SLE4442 完全兼容的SLE4432 卡,下面3 个命令是针对密码存储器操作的。 SLE4442 的7 个操作命令 3、密码存储器操作 对密码存储器的操作有三个命令:读密码、写密码和校验密码。其中最主要的是校验密码,密码校验正确,读/写密码的情况就类似与读/写主存储器的操作。 校验密码必须严格按图的程序框图进行,任何改变都会导致失败,达不到改写卡中数据的目的,还可能引起EC 位从“1”变为“0”。 在程序返回前,如校验不成功,芯片内部将相当于使EC 的三位右移一次,高位用0 填充。 4、存储器操作 对主存储器的操作有4 个命令,包括了读/写保护区的命令。如果保护区里有被保护位,被保护的信息就不能改写。伴随着32 个时钟脉冲的输入,使用读保护区的命令可以知道32个字节中那些有被保护的位,也就能够读出保护区的内容。 保护区中没带保护位单元的操作如同对应用区的操作一样。图表示写主存储器的程序框图。 程序一开始,要对卡进行复位和复位应答操作,然后校验密码。接着在3 个寄存器里分别放入写主存储器命令字,要写入的卡中地址单元和要写入的数据。然后按对卡操作的命令方式,发出一个启动信号,即在CLK 高电平时,I/O 下跳变,伴随着后面的24 个时钟脉冲,CPU 把3 个寄存器的内容顺次写入卡中,并发出停止信号,在CLK 高电平时,I/O 线上跳变。接着I/O 线清零,CPU 输出256 个时钟脉冲,这是擦写数据所需要的时钟脉冲数。这样,就可把1 个字节的数据写进卡中相应的地址单元中。 读主存储器的操作除了命令不一样以外,无需校验密码,命令里的3 个字节写入后,CPU 也无需对卡输出256 个时钟脉冲。其它就类似与写操作了。 注意: 我们提供的IC 卡有密码,在卡的反面,如果实验时候连续输入3 次错误,此卡将自动销毁,实验的时候请注意. 1、实验目的 1)、掌握单片机和IC 卡的硬件接口技术。 2)、掌握单片机和SE4442 IC 卡数据交换方法。 3)、熟悉IC 卡以及SE4442 的功能特性。 2、实验线路和说明 3、实验内容 对内部带SLE4442 智能控制芯片的IC 卡进行读,写,校验以及加密. 4、实验步骤 用实验用的连接线把P1.1 插孔和IC 卡下面的SCL 插孔相连,P1.2 插孔和IC 卡下面的的SDA 插孔相连, P3.2 插孔和IC 卡下面的INT0(IC 卡的RST) 插孔相连,插入我们提供的SLE4442IC 卡,通过仿真器来运行程序,观察IC 卡的内部存储器的变化. 5、实验程序 SLE4442 IC 卡读、写程序 ;文件名称:ICARD.ASM ;--------------------------------------------------------------------- SLE4442READMAINMEMORY EQU 30H ;读主存储区 SLE4442READPROTECTIONMEMORY EQU 34H ;读保护存储区 SLE4442UPDATEMAINMEMORY EQU 38H ;写主存储区 SLE4442WRITEPROTECTIONMEMORY EQU 3CH ;写保护存储区 SLE4442READSECURITYMEMORY EQU 31H ;读保密存储区 SLE4442COMPAREVERIFICATIONDATA EQU 33H ;比较验证数据 SLE4442UPDATESECURITYMEMORY EQU 39H ;更新保密存储区 ;--------------------------------------------------------------------- ATRDATA EQU 30H ; 4 字节复位应答 ICCOMMAND EQU 34H ; 3 字节命令 ICADDRESS EQU 35H ; 1 字节地址 ICDATAIN EQU 36H ; 1 字节数据 ICLENGTH EQU 37H ; 1 字节读写长度 ICCODE EQU 38H ; 3 字节密码 ICDATA EQU 3BH ; 32 字节读写数据 ;--------------------------------------------------------------------- RST EQU P1.3 SDA EQU P1.2 SCL EQU P1.4 ;---------------------------------------------------------------------- ORG 000H SJMP MAIN1 ORG 0020H MAIN1: MOV SP,#10H MOV R0,#ICCODE ;送密码 MOV @R0,#0FFH INC R0 MOV @R0,#0FFH INC R0 MOV @R0,#0FFH LCALL SLE4442_RDSM_EC ;读错误计数器 LCALL SLE4442_VERIFI ; 校验密码 LCALL SLE4442_RDSM_EC ;读错误计数器 ;************************ ;* 写主存储区* ;************************ MAINLOOP: MOV ICADDRESS,#20H ;送起始地址 MOV ICLENGTH,#20H ;送长度 LCALL SLE4442_RDMM ;读主存储区 MOV R4,#20H MOV R0,#ICDATA CLR A MOV A,#0FFH LOOP1: MOV @R0,A ; INC A INC R0 DJNZ R4,LOOP1 MOV ICADDRESS,#20H MOV ICLENGTH,#20H LCALL SLE4442_WRMM ;写主存储区 MOV ICADDRESS,#20H MOV ICLENGTH,#20H LCALL SLE4442_RDMM ;读主存储区 LJMP MAINLOOP ;* 读主存储区* ;************************ DUZQ: LCALL SLE4442_RST_ATR ; MOV ICADDRESS,#30H ; MOV ICLENGTH,#20H ; LCALL SLE4442_RDMM ; RET ;===================================================================== ;SubName : ICDelay 延时程序 ;Function: make a delay period (about 10us) ;Input : ;OutPut : ;--------------------------------------------------------------------- ICDelay: NOP NOP NOP NOP RET MOV ICADDRESS,#30H ; MOV ICLENGTH,#20H ; LCALL SLE4442_RDMM ; RET ;===================================================================== ;SubName : ICDelay 延时程序 ;Function: make a delay period (about 10us) ;Input : ;OutPut : ;--------------------------------------------------------------------- ICDelay: NOP NOP NOP NOP RET ;===================================================================== ;SubName : CardPulse 时钟脉冲 ;Function: make a pulse on SCL pin ;Input : ;OutPut : ;--------------------------------------------------------------------- CardPulse: SETB SCL LCALL ICDelay ; 延时程序 CLR SCL LCALL ICDelay ; 延时程序 RET ;===================================================================== ;SubName : CardRdByte 读字节 ;Function: read one byte from the card on SDA pin ;Input : ;OutPut : A ;--------------------------------------------------------------------- CardRdByte: MOV R3,#8 SETB SDA CLR A Rdbyte: MOV C,SDA RRC A LCALL CardPulse ;时钟脉冲 DJNZ R3,RdByte RET ;===================================================================== ;SubName : CardWrByte 写字节 ;Function: write one byte to the card on SDA pin ;Input : A ;OutPut : ;--------------------------------------------------------------------- CardWrByte: MOV R3,#8 RRC A MOV SDA,C LCALL CardPulse DJNZ R3,WrByte RET ;===================================================================== ;SubName : SLE4442_RST_ATR 复位与应答 ;Function: reset the card and the answer to erset ;Input : ;OutPut : (ATRDATA),(ATRDATA+1),(ATRDATA+2),(ATRDATA+3) ; : 0xA2,0x13,0x10,0x91 ;--------------------------------------------------------------------- SLE4442_RST_ATR: CLR RST CLR SCL LCALL ICDelay SETB RST LCALL ICDelay SETB SCL LCALL ICDelay CLR SCL LCALL ICDelay CLR RST LCALL ICDelay MOV R0,#ATRDATA MOV R4,#4 ATR: LCALL CardRdByte MOV @R0,A INC R0 DJNZ R4,ATR RET ;===================================================================== ;SubName : SLE4442_SendCommand 发送命令3 字节 ;Function: send a 3-byte command to the card ;Input : ICCOMMAND,ICADDRESS,ICDATAIN ; : (ICCOMMAND),(ICCOMMAND+1),(ICCOMMAND+2) ;OutPut : ;--------------------------------------------------------------------- SLE4442_SendCommand: ;Start condition SETB SCL LCALL ICDelay CLR SDA LCALL ICDelay CLR SCL ;3-byte command MOV R0,#ICCOMMAND MOV R4,#3 SendCommand: MOV A,@R0 LCALL CardWrByte INC R0 DJNZ R4,SendCommand ;Stop condition CLR SCL CLR SDA LCALL ICDelay SETB SCL LCALL ICDelay SETB SDA LCALL ICDelay CLR SCL LCALL ICDelay RET ;===================================================================== ;SubName : SLE4442_RDMM 读主存储区 ;Function: read main memory from the card ;Input : ICADDRESS,ICLENGTH ; : (ICCOMMAND),(ICCOMMAND+1),(ICCOMMAND+2) ;OutPut : (ICDATA),(ICDATA+1) ... ;--------------------------------------------------------------------- SLE4442_RDMM: LCALL SLE4442_RST_ATR MOV ICCOMMAND,#SLE4442READMAINMEMORY LCALL SLE4442_SendCommand MOV R0,#ICDATA MOV R4,ICLENGTH RDMM: LCALL CardRdByte MOV @R0,A INC R0 DJNZ R4,RDMM RET MOV ICCOMMAND,#SLE4442READMAINMEMORY LCALL SLE4442_SendCommand MOV R0,#ICDATA MOV R4,ICLENGTH LCALL CardRdByte MOV @R0,A INC R0 DJNZ R4,RDMM RET ;===================================================================== ;SubName : SLE4442_RDPM 读保护存储区 ;Function: read protect memory from the card ;Input : ;OutPut : (ICDATA),(ICDATA+1),(ICDATA+2),(ICDATA+3) ;--------------------------------------------------------------------- SLE4442_RDPM: LCALL SLE4442_RST_ATR MOV ICCOMMAND,#SLE4442READPROTECTIONMEMORY LCALL SLE4442_SendCommand MOV R0,#ICDATA MOV R4,#4 RDPM: LCALL CardRdByte MOV @R0,A INC R0 DJNZ R4,RDPM RET ;===================================================================== ;SubName : SLE4442_WRMM 写主存储区 ;Function: write main memory to the card ;Input : ICADDRESS,ICLENGTH ; : (ICDATA),(ICDATA+1) ... ;OutPut : ;--------------------------------------------------------------------- SLE4442_WRMM: LCALL SLE4442_RST_ATR MOV R5,ICLENGTH MOV ICCOMMAND,#SLE4442UPDATEMAINMEMORY MOV R1,#ICDATA WRMM1: MOV ICDATAIN,@R1 LCALL SLE4442_SendCommand MOV R4,#0FFH WRMM2: LCALL CardPulse DJNZ R4,WRMM2 INC ICADDRESS INC R1 DJNZ R5,WRMM1 RET ;===================================================================== ;SubName : SLE4442_WRPM 写保护存储区 ;Function: write protect memory to the card ;Input : ICADDRESS,ICLENGTH ; : (ICDATA),(ICDATA+1) ... ;OutPut : ;--------------------------------------------------------------------- SLE4442_WRPM: LCALL SLE4442_RST_ATR MOV R5,ICLENGTH MOV ICCOMMAND,#SLE4442WRITEPROTECTIONMEMORY MOV R1,#ICDATA WRPM1: MOV ICDATAIN,@R1 LCALL SLE4442_SendCommand MOV R4,#0FFH WRPM2: LCALL CardPulse DJNZ R4,WRPM2 INC ICADDRESS INC R1 DJNZ R5,WRPM1 RET ;===================================================================== ;SubName : SLE4442_RDSM 读保密存储区 ;Function: read secret memory from the card ;Input : ;OutPut : (ICDATA),(ICDATA+1),(ICDATA+2),(ICDATA+3) ;--------------------------------------------------------------------- SLE4442_RDSM: LCALL SLE4442_RST_ATR MOV ICCOMMAND,#SLE4442READSECURITYMEMORY LCALL SLE4442_SendCommand MOV R0,#ICDATA MOV R4,#4 RDSM: LCALL CardRdByte MOV @R0,A INC R0 DJNZ R4,RDSM RET ;===================================================================== ;SubName : SLE4442_RDSM_EC 读错误计数器 ;Function: read error counter from the card ;Input : ;OutPut : A ;--------------------------------------------------------------------- SLE4442_RDSM_EC: LCALL SLE4442_RST_ATR MOV ICCOMMAND,#SLE4442READSECURITYMEMORY LCALL SLE4442_SendCommand LCALL CardRdByte RET ;===================================================================== ;SubName : SLE4442_WRSM 更新保密存储区 ;Function: write secret memory to the card ;Input : ICADDRESS ; : (ICDATA) ;OutPut : ;--------------------------------------------------------------------- SLE4442_WRSM: LCALL SLE4442_RST_ATR MOV R5,#1 MOV ICCOMMAND,#SLE4442UPDATESECURITYMEMORY MOV R1,#ICDATA WRSM1: MOV ICDATAIN,@R1 LCALL SLE4442_SendCommand MOV R4,#0FFH WRSM2: LCALL CardPulse DJNZ R4,WRSM2 INC ICADDRESS INC R1 DJNZ R5,WRSM1 RET ;===================================================================== ;SubName : SLE4442_UPDATEPSC 更新密码 ;Function: update PSC to the card ;Input : (ICDATA),(ICDATA+1),(ICDATA+2) ;OutPut : ;--------------------------------------------------------------------- SLE4442_UPDATEPSC: LCALL SLE4442_RST_ATR MOV R5,#3 MOV ICCOMMAND,#SLE4442UPDATESECURITYMEMORY MOV ICADDRESS,#01H MOV R1,#ICCODE PSC1: MOV ICDATAIN,@R1 LCALL SLE4442_SendCommand MOV R4,#0FFH PSC2: LCALL CardPulse DJNZ R4,PSC2 INC ICADDRESS INC R1 DJNZ R5,PSC1 RET ;===================================================================== ;SubName : SLE4442_SENDPSC 比较验证数据 ;Function: compare PSC to the card ;Input : (ICDATA),(ICDATA+1),(ICDATA+2) ;OutPut : ;--------------------------------------------------------------------- SLE4442_SENDPSC: MOV R5,#3 MOV ICCOMMAND,#SLE4442COMPAREVERIFICATIONDATA MOV ICADDRESS,#01H MOV R1,#ICCODE PSC21: MOV ICDATAIN,@R1 LCALL SLE4442_SendCommand MOV R4,#123 PSC22: LCALL CardPulse DJNZ R4,PSC22 INC ICADDRESS INC R1 DJNZ R5,PSC21 RET ;===================================================================== ;SubName : SLE4442_VERIFI 校验密码 ;Function: verify the card ;Input : (ICDATA),(ICDATA+1),(ICDATA+2) ;OutPut : A (error counter) ;--------------------------------------------------------------------- SLE4442_VERIFI: LCALL SLE4442_RDSM_EC ANL A,#07H CJNE A,#00H,VERI1 RET VERI1: CJNE A,#07H,VERI21 MOV A,#03H SJMP VERI2 VERI21: CJNE A,#06H,VERI22 MOV A,#02H SJMP VERI2 VERI22: CJNE A,#05H,VERI23 MOV A,#01H SJMP VERI2 VERI23: CJNE A,#04H,VERI24 MOV A,#00H SJMP VERI2 VERI24: CJNE A,#03H,VERI25 MOV A,#01H SJMP VERI2 VERI25: MOV A,#00H VERI2: MOV ICDATA,A MOV ICADDRESS,#00H LCALL SLE4442_WRSM LCALL SLE4442_SENDPSC MOV ICDATA,#07H MOV ICADDRESS,#00H LCALL SLE4442_WRSM LCALL SLE4442_RDSM_EC ANL A,#07H RET ;------------------------------------------------------------------- END 第十五部分: “ 看门狗” 复位实验 实验8、“看门狗”(813L)复位控制实验 1、实验目的 1)、掌握“看门狗”(813L)复位控制的硬件接口技术。 2)、掌握“看门狗”(813L)复位控制驱动程序的设计和调试方法。 3)、熟悉“看门狗”(813L)的工作特性。 2、实验线路和说明 3、实验内容 利用IMP813L 实现单片机上电自动复位,手动复位,“看门狗”自动检测。 4、实验步骤 对于上电复位和手动复位在电源打开,或者按实验仪的复位键盘就可以实现。在实现“看门狗”实验时,用实验用的连接导线把P1.0 和WDI 插孔连接,运行程序。观察LED 或者LCD的变化,要求在1.6S 以内,P1.0 的信号要变化一次,否则单片机会自动复位。 5、实验程序 见下面:文件名称:WDT.ASM 6、预习要求 熟悉813L 的管脚定义以及功能. 7、思考问题 任何在具体的应用程序中插入”看门狗”的应用. ;”看门狗”的应用程序 ;文件名称: WDT.ASM ORG 0000H SETB P1.0 LP1: LCALL DELY CPL P1.0 SJMP LP1 注意:DELY 子程序可以自己定义,观察DELY 延时时间小于或者大于1.6 秒单片机的复位的变化。 关于“看门狗”的使用说明 为了控制系统不受外界干扰而出现死机现象,本系统采用MAX813L 复位监控芯片,该芯片具备复位及监视跟踪两大功能。主要功能: ·精密电源电压、监控4.65V ·200ms 复位脉冲宽度·V1=1V 时保证复位RESET 有效 ·TTL/CMOS 兼容的防抖动人工复位输入·独立的监视跟踪定时器-1.6S 溢出时间 ··电源故障或欠电压报警的电压监控·加电,掉电有电压降低时输出复位信号 ·低电平有效的人工复位输入 (1)MR:人工复位输入、当输入降至0.8V 时产生复位脉冲,低电平有效的输入可用开关短路到地或TTL/CMOS 逻辑驱动,不用时浮空。 (2)Vcc +5V 输入 (3)GND:地 (4) PFL:电源故障比较器输入,高PFL 低于1.25V 时PFO输出低电平吸收电流;否则PFO 输出保持高电平,如果不用将PFI 接地或Vcc。 (5)PFO:电源故障比较器输出,高PFI 低于1.25V 时,输出低电平且吸收电流;否则PFO 输 出保持高电平。 (6)WDI:监视跟踪定时器输入,WDI 保持高或低电平时间长达1.6S,WDI 输出低电平,WDI 浮空或接高阻三态门将禁止监控跟踪定时器功能,只要发生复位,内部监视跟踪定时的清零 (7)RESET 复位输出(低电平有效)。 (8)WDO 监视跟踪定时器输出,当内部监视跟踪定时器完成1.6S 计数后,本脚输出低电平, 直到下一次监视跟踪定时器清零, 才再变为高电平,在低电源或V cc 低于复位门限电压 时,WDO 就保持低电平,只要Vcc 上升到复位门跟电压以上后WDO 就变为高电平而没有滞后。 第五章 选修实验指导 本章为选做实验可供这们在课程设计或毕业设计期间学习。 X0 X1 X2 X3 RL0 RL1 RL2 RL3 在此处输入源程序 段 驱 动 位 驱 动 a b c d e f g h LE1 LE2 . LE3 LE4 LE5 LE6 LE7 LE8 P1.0 P1.1 … P1.7 P1.7 Vcc Vcc K P3.2 单稳 电路 89C51 INT00 RL0 RL1 RL2 RL3 X0 X1 X2 X3 C D E F 8 9 A B 4 5 6 7 0 1 2 3 PC3 PC2 PC1 PC0 8255A PB0 ~ PB7& PA7 ~ PA0 LE1 LE2 . LE3 LE4 LE5 LE6 LE7 LE8 a b c d e f g h 位 驱 动 段 驱 动 N N N N Y Y Y Y N Y D键否? 关 闭 显 示 C键否? 查询定闹时间 设定定闹时间 B键否? A键否? 设定基准时间 击键否? 显示提示信息 初始化显示缓冲区 开 始 PAGE 1
本文档为【单片微机原理实验指导书】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_191127
暂无简介~
格式:doc
大小:1MB
软件:Word
页数:0
分类:初中语文
上传时间:2017-06-05
浏览量:16