8051初学实验教程系列五.doc

Similar documents
单片机原理及应用实验指导书.doc

DPJJX1.DOC

Microsoft Word - P3.doc

HD61202 HD HD61203 HD61202, HY HY HD61202 HD61202 HD61203 HD =4096 RAMRAM LCD 2HD HD HD /32--

微處理機期末專題

untitled

» n ¹ú KS0108 x ÍÍÙ q n KS0108 KS KS0107 KS0108 KS *32 128*64 192*64 KS0108 KS0108 KS0107 KS =4096 RAM RAM LCD 2 KS

12232A LED LED LED EL EL CCFL EL CCF

CA24064B LED LED LED EL EL CCFL EL CCF /

<4D F736F F D20B3E6B4B9A4F930365F32A443AC71C5E3A5DCBEB9B1B1A8EE2E646F63>

untitled

单片机学习教程

Microsoft Word - 專題封面.doc

W77E58中文手册

目 录

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0

1 TPIS TPIS 2 2

TSINGTEK DISPLAY CO.,LTD LCD CONTROLLER & DRIVER ST7920 OR EQUIVALENT (f) 639 2A f B1

() () () () () () () () DDRAM () II

CH559指令周期.doc

1.1 ML_ONOFF = 1 Q 3 Q 8 C 0.3V M 2 L 1 ML_ONOFF = 0 Q 3 Q 8 C 1. + R31 VCC R21 10K ML_ONOFF R15 0:off 1:on 1K Green Light VCC=5V L1 Q VDD=12V C

逢 甲 大 學

Microsoft Word - FM12232C.doc

电 阻 应 变 式 传 感 器 是 将 被 测 量 的 力, 通 过 它 产 生 的 金 属 弹 性 变 形 转 换 成 电 阻 变 化 的 元 件 由 电 阻 应 变 片 和 测 量 线 路 两 部 分 组 成 电 阻 应 变 片 产 生 的 误 差, 主 要 来 源 于 温 度 的 影 响, 本


2 Keil µ vision 2.1 1) Keil µ vision2 V2.34 µ vision3 2) Sino_Keil.exe Keil c:\keil\ 3) JET51 USB PC C:\Keil\ USB PC 4) S-L

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

7688使用手冊V10.doc

PowerPoint 簡報

Ps22Pdf

AT89C2051中文资料.doc

Microsoft Word - FG12232A.doc

93C46串行EEPROM数据读写

µPSD3000 系列

第5章:汇编语言程序设计

Microsoft Word - ISSFA-0134_A_AP_User-definedDownload_SC_.doc

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

学习MSP430单片机推荐参考书

untitled

Microsoft Word - IRFWX_A051_C_SyncMOS_with_STC_APN_SC_.doc

dfgdafhdafhdafhdafh

Microsoft PowerPoint - chap4.ppt

??????????????????

第一次段考 二年級社會領域試題 郭玉華 (A)(B) (C)(D)

Microsoft Word - 部分习题参考答案.doc

Microsoft PowerPoint - chap5.ppt

1 2 / 3 1 A (2-1) (2-2) A4 6 A4 7 A4 8 A4 9 A ( () 4 A4, A4 7 ) 1 (2-1) (2-2) ()

4 / ( / / 5 / / ( / 6 ( / / / 3 ( 4 ( ( 2

!!"#$ " # " " " " " "$%%& " $%% " "!!

Microsoft Word - ZX12232B.doc

Microsoft Word - ha0013s.doc

128K Flash EPROM 的程序?\(Bank=64K\) 切?


MCS FCC

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

电子技术基础 ( 第 版 ) 3. 图解单相桥式整流电路 ( 图 4-1-3) 电路名称电路原理图波形图 整流电路的工作原理 1. 单相半波整流电路 u 1 u u sin t a t 1 u 0 A B VD I A VD R B

1

SIGNUM 3SB3

Hz 10MHz 0.5V 5V 0.01% 10s 2 0.5V 5V 1Hz 1kHz 10% 90% 1% 3 1Hz 1MHz 1% EPM7128SLC84-15 LM361 LM361 Zlg

<4D F736F F D20C7B6C8EBCABDCFB5CDB3C9E8BCC6CAA6B0B8C0FDB5BCD1A75FD1F9D5C22E646F63>

untitled

Microsoft PowerPoint - chap2.ppt

,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far address L10: jmp jmp L20: L10 L20

untitled

STEP-MXO2 V2硬件手册

Microsoft Word - RT-T19264B-SPEC.doc

TD

该 奈 自 受 PZ 多 透 soc i e B t h y. y t is NA YL OR exp os ed t h a t b e i n g wh o res or sa in t es s e s we r e m ad e n b ot om. M ean wh i l e NA YL

Microsoft PowerPoint - chap3.ppt

第10章:CCP捕捉/比较/脉宽调制


SIK) 者, 需 實 施 1 年 以 上, 經 體 格 檢 查 無 後 遺 症 者 5. 身 體 任 何 部 分 有 刺 青 紋 身 穿 耳 洞 者, 不 得 報 考, 各 項 檢 查 結 果 須 符 合 體 位 區 分 標 準 常 備 役 體 位 二 在 校 軍 訓 成 績 總 平 均 70 分

2.181% 0.005%0.002%0.005% 2,160 74,180, ,000, ,500,000 1,000,000 1,000,000 1,000,000 2


FET848

Transcription:

实验一 : 扩展存储器读写实验 一. 实验要求编制简单程序, 对实验板上提供的外部存贮器 (62256) 进行读写操作 二. 实验目的 1. 学习片外存储器扩展方法 2. 学习数据存储器不同的读写方法 三. 实验电路及连线 将 P1.0 接至 L1 CS256 连 GND 孔 四. 实验说明 1. 单片机系统中, 对片外存贮器的读写操作是最基本的操作 用户藉此来熟悉 MCS51 单片机编程的基本规则 基本指令的使用和使用本仿真实验系统调试程序的方法 用户编程可以参考示例程序和流程框图 本示例程序中对片外存贮器中一固定地址单元进行读写操作, 并比较读写结果是否一致 不一致则说明读写操作不可靠或该存储器单元不可靠, 程序转入出错处理代码段 ( 本示例程序通过熄灭一个发光二极管来表示出错 ) 读写数据的选用, 本例采用的是 55(0101,0101) 与 AA(1010, 1010) 一般采用这两个数据的读写操作就可查出数据总线的短路 断路等, 在实际调试用户电路时非常有效 用户调试该程序时, 可以灵活使用单步 断点和变量观察等方法, 来观察程序执行的流程和各中间变量的值 2. 在 I 状态下执行 MEM1 程序, 对实验机数据进行读写, 若 L1 灯亮说明 RAM 读

写正常 3. 也可进入 LCA51 的调试工具菜单中的对话窗口, 用监控命令方式读写 RAM, 在 I 状态执行 SX0000 55,SPACE, 屏幕上应显示 55, 再键入 AA,SPACE, 屏幕上也应显示 AA, 以上过程执行效果与编程执行效果完全相同 注 :SX 是实验机对外部数据空间读写命令 4. 本例中,62256 片选接地时, 存储器空间为 0000~7FFFH 五. 实验程序框图 实验示例程序流程框图如下 : 六. 实验源程序 : ORG 0000H LJMP START ORG 0040H

START: MOV SP,#60H MOV DPTR,#0000H ; 置外部 RAM 读写地址 MOV A,#55H ; 测试的数据一 MOV B,A ; 写外部 RAM MOVX A,@DPTR ; 读外部 RAM XRL A,B ; 比较读回的数据 JNZ ERROR MOV A,#0AAH ; 测试的数据二 MOV B,A MOVX A,@DPTR XRL A,B JZ PASS ; 测试通过 ERROR: SETB P1.0 ; 测试失败, 点亮 LED SJMP $ PASS: CPL P1.0 ;LED 状态 ( 亮 / 灭 ) 转换 MOV R1,#00H ; 延时 DELAY: MOV R2,#00H DJNZ R2,$ DJNZ R1,DELAY LJMP START ; 循环测试 END 实验二 P1 口输入 输出实验 一. 实验要求 1.P1 口做输出口, 接八只发光二极管, 编写程序, 使发光二极管循环点亮 2.P1 口做输入口, 接八个扭子开关, 以实验机上 74LS273 做输出口, 编写程序读取开关状态, 将此状态, 在发光二极管上显示出来 二. 实验目的 1. 学习 P1 口的使用方法 2. 学习延时子程序的编写和使用 三. 实验电路及连线实验三 P3 口输出控制继电器实验 一. 实验要求 利用 P3.5 输出高低, 控制继电器的开合, 实现对外部装置的控制 二. 实验目的 掌握继电器控制的基本方法和经验

三. 实验电路及连线 P3.5 接 JD R-MID 接 L1 灯,R-CLOSE 接 GND 四. 实验说明 现代自动控制设备中, 都存在一个电子电路与电气电路的互相连接问题, 一方面要使电子电路的控制信号能够控制电气电路的执行元件 ( 电动机, 电磁铁, 电灯等 ), 另一方面又要为电子线路的电气电路提供良好的电隔离, 以保护电子电路和人身的安全 电子继电器便能完成这一桥梁作用 继电器电路中一般都要在继电器的线圈两头加一个二极管以吸收继电器线圈断电时产生的反电势, 防止干扰 本电路的控制端为 JD, 当 JD 为高电平时, 继电器不工作, 当 JD 为低电平时, 继电器工作, 常开触点吸合 执行时, 对应的 LED 将随继电器的开关而亮灭 五. 实验程序框图 六. 源程序 ORG 0000H LJMP START ORG 0040H

START: MOV SP,#60H JD: CPL P3.5 ;P3.5 取反 LCALL DELAY ; 延时 NOP SJMP JD DELAY: ; 延时子程序 (1 秒 ) MOV R0,#0AH DELAY1: MOV R1,#00H DELAY2: MOV R2,#0B2H DJNZ R2,$ DJNZ R1,DELAY2 DJNZ R0,DELAY1 RET END 实验四简单 I/O 实验 ( 交通灯控制 ) 一. 实验要求 以 74LS273 作为输出口, 控制 4 个双色 LED 灯 ( 可发红, 绿, 黄光 ), 模拟交通 灯管理 二. 实验目的 1. 学习在单片机系统中扩展简单 I/O 接口的方法 2. 学习数据输出程序的设计方法 3. 学习模拟交通灯控制的方法 4. 学习双色灯的使用 三. 实验电路及连线

PO0-PO3 接 DG1-DG4,PO4-P07 接 DR1-DR4 CS273 接 8300H 四. 实验说明 1. 因为本实验是交通灯控制实验, 所以要先了解实际交通灯的变化规律 假设一个十字路口为东西南北走向 初始状态 0 为东西红灯, 南北红灯 然后转状态 1 南北绿灯通车, 东西红灯 过一段时间转状态 2, 南北绿灯闪几次转亮黄灯, 延时几秒, 东西仍然红灯 再转状态 3, 东西绿灯通车, 南北红灯 过一段时间转状态 4, 东西绿灯闪几次转亮黄灯, 延时几秒, 南北仍然红灯 最后循环至状态 1 2. 双色 LED 是由一个红色 LED 管芯和一个绿色 LED 管芯封装在一起, 公用负端 当红色正端加高电平, 绿色正端加低电平时, 红灯亮 ; 红色正端加低电平, 绿色 正端加高电平时, 绿灯亮 ; 两端都加高电平时, 黄灯亮 五. 实验程序框图 程序框图 :

六. 源程序 ORG 0000H LJMP START ORG 0040H START: MOV SP,#60H LCALL STATUS0 ; 初始状态 ( 都是红灯 ) CIRCLE: LCALL STATUS1 ; 南北绿灯, 东西红灯 LCALL STATUS2 ; 南北绿灯闪转黄灯, 东西红灯 LCALL STATUS3 ; 南北红灯, 东西绿灯 LCALL STATUS4 ; 南北红灯, 东西绿灯闪转黄灯 LJMP CIRCLE STATUS0: ; 南北红灯, 东西红灯 MOV DPTR,#8300H MOV A,#0FH MOV R2,#10 ; 延时 1 秒 LCALL DELAY RET STATUS1: ; 南北绿灯, 东西红灯 MOV DPTR,#08300H

MOV A,#5AH ; 南北绿灯, 东西红灯 MOV R2,#50 ; 延时 5 秒 LCALL DELAY RET STATUS2: ; 南北绿灯闪转黄灯, 东西红灯 MOV DPTR,#8300H MOV R3,#03H ; 绿灯闪 3 次 FLASH: MOV A,#5FH MOV R2,#03H LCALL DELAY MOV A,#5AH MOV R2,#03H LCALL DELAY DJNZ R3,FLASH MOV A,#0AH ; 南北黄灯, 东西红灯 MOV R2,#10 ; 延时 1 秒 LCALL DELAY RET STATUS3: ; 南北红灯, 东西绿灯 MOV DPTR,#8300H MOV A,#0A5H MOV R2,#50 ; 延时 5 秒 LCALL DELAY RET STATUS4: ; 南北红灯, 东西绿灯闪转黄灯 MOV DPTR,#8300H MOV R3,#03H ; 绿灯闪 3 次 FLASH1: MOV A,#0AFH MOV R2,#03H LCALL DELAY MOV A,#0A5H MOV R2,#03H LCALL DELAY DJNZ R3,FLASH1 MOV A,#05H ; 南北红灯, 东西黄灯 MOV R2,#10 ; 延时 1 秒

LCALL DELAY NOP RET DELAY: ; 延时子程序 PUSH 2 PUSH 1 PUSH 0 DELAY1: MOV 1,#00H DELAY2: MOV 0,#0B2H DJNZ 0,$ DJNZ 1,DELAY2 ; 延时 100 ms DJNZ 2,DELAY1 POP 0 POP 1 POP 2 RET END 实验一时,P1.0-P1.7 接 L1-L8 实验二时,P1.0-P1.7 接 K1-K8,PO0-PO7 接 L1-L8 CS273 接 8300H 四. 实验说明 1.P1 口是准双向口 它作为输出口时与一般的双向口使用方法相同 由准双向口结构可知当 P1 口作为输入口时, 必须先对它置高电平使内部 MOS 管截止 因为内部上拉电阻阻值是 20KΩ~40KΩ, 故不会对外部输入产生影响 若不先对它置高, 且原来是低电平, 则 MOS 管导通, 读入的数据是不正确的 2. 延时子程序的延时计算问题

对于程序 DELAY: MOV R0,#00H DELAY1: MOV R1,#0B3H DJNZ R1,$ DJNZ R0,DELAY1 查指令表可知 MOV,DJNZ 指令均需用两个机器周期, 而一个机器周期时间长度 为 12/11.0592MHz, 所以该段程序执行时间为 : (( 0B3+1) 256+1) 2 12 11059200=100.002mS 五. 实验程序框图 主程序框图 (1): 程序框图 (2): 六. 1 主程序 ORG 0000H LJMP START ORG 0040H START: MOV SP,#60H MOV A,#0FEH ROTATE: MOV P1,A ; 写 P1 口 RL A ; 循环左移 LCALL DELAY ; 延时 NOP SJMP ROTATE DELAY: ; 延时子程序 (1 秒 ) MOV R0,#0AH

DELAY1: MOV R1,#00H DELAY2: MOV R2,#0B2H DJNZ R2,$ DJNZ R1,DELAY2 DJNZ R0,DELAY1 RET END 2 读 P1 口程序框 ORG 0000H LJMP START ORG 0040H START: MOV DPTR,#8300H ; 并行输出口地址 MOV P1,#0FFH ; 因 P1 口是准双向口, 所以把 P1 口作为 ; 输入口时, 应先置高电平. READ: MOV A,P1 ; 读开关状态 ; 把读入的数据输出 AJMP READ END

实验五外部中断实验 ( 急救车与交通灯 ) 一. 实验要求 在实验四内容的基础上增加允许急救车优先通过的要求 有急救车到达时, 两向 交通信号为全红, 以便让急救车通过 假定急救车通过路口时间为 10 秒, 急救车 通过后, 交通灯恢复中断前状态 本实验以按键为中断申请, 表示有急救车通过 二. 实验目的 1. 学习外部中断技术的基本使用方法 2. 学习中断处理程序的编程方法 三. 实验电路及连线 PO0-PO3 接 DG1-DG4,PO4-P07 接 DR1-DR4 CS273 接 8300H K8 接 P3.2 四. 实验说明 中断服务程序的关键是 :1. 保护进入中断时的状态, 并在退出中断之前恢复进入时的状态 2. 必须在中断程序中设定是否允许中断重入, 即设置 EX0 位 本例中使用了 INT0 中断, 一般中断程序进入时应保护 PSW,ACC 以及中断程序使用但非其专用的寄存器 本例的 INT0 程序保护了 PSW,ACC,2 等三个寄存器并且在退出前恢复了这三个寄存器 另外中断程序中涉及到关键数据的设置时应关中断, 即设置时不允许重入 本例中没有涉及这种情况 实验开始时 K8 应在 H( 高电平 ) 端, 要产生中断时先拨向 L( 低电平 ) 端再拨回 H 端 五. 实验程序框图

六. 源程序 ORG 0000H LJMP START ORG 0003H ;INT 0 中断入口地址 LJMP INT0 ORG 0040H START: MOV SP,#60H SETB EX0 ;INT 0 中断有效 SETB IT0 SETB EA LCALL STATUS0 ; 初始状态 ( 都是红灯 ) CIRCLE: LCALL STATUS1 ; 南北绿灯, 东西红灯 LCALL STATUS2 ; 南北绿灯闪转黄灯, 东西红灯 LCALL STATUS3 ; 南北红灯, 东西绿灯 LCALL STATUS4 ; 南北红灯, 东西绿灯闪转黄灯 LJMP CIRCLE

INT0: PUSH PSW ; 保护现场 PUSH 2 PUSH ACC MOV DPTR,#8300H MOV A,#0FH ; 南北, 东西都亮红灯 MOV R2,#100 ; 延时 10 秒 LCALL DELAY POP ACC ; 恢复现场 POP 2 POP PSW RETI STATUS0: ; 南北红灯, 东西红灯 MOV DPTR,#8300H MOV A,#0FH MOV R2,#10 ; 延时 1 秒 LCALL DELAY RET STATUS1: ; 南北绿灯, 东西红灯 MOV DPTR,#8300H MOV A,#5AH ; 南北绿灯, 东西红灯 MOV R2,#50 ; 延时 5 秒 LCALL DELAY RET STATUS2: ; 南北绿灯闪转黄灯, 东西红灯 MOV DPTR,#8300H MOV R3,#03H ; 绿灯闪 3 次 FLASH: MOV A,#5FH MOV R2,#03H LCALL DELAY MOV A,#5AH MOV R2,#03H LCALL DELAY DJNZ R3,FLASH MOV A,#0AH ; 南北黄灯, 东西红灯 MOV R2,#10 ; 延时 1 秒 LCALL DELAY

RET STATUS3: ; 南北红灯, 东西绿灯 MOV DPTR,#8300H MOV A,#0A5H MOV R2,#50 ; 延时 5 秒 LCALL DELAY RET STATUS4: ; 南北红灯, 东西绿灯闪转黄灯 MOV DPTR,#8300H MOV R3,#03H ; 绿灯闪 3 次 FLASH1: MOV A,#0AFH MOV R2,#03H LCALL DELAY MOV A,#0A5H MOV R2,#03H LCALL DELAY DJNZ R3,FLASH1 MOV A,#05H ; 南北红灯, 东西黄灯 MOV R2,#10 ; 延时 1 秒 LCALL DELAY NOP RET DELAY: ; 延时子程序 PUSH 2 PUSH 1 PUSH 0 DELAY1: MOV 1,#00H DELAY2: MOV 0,#0B2H DJNZ 0,$ DJNZ 1,DELAY2 ; 延时 100 ms DJNZ 2,DELAY1 POP 0 POP 1 POP 2 RET END 实验六定时器实验 一. 实验要求

由 8031 内部定时器 1, 按方式 1 工作, 即作为 16 位定时器使用每 0.05 秒钟 T1 溢出中断一次 P1 口的 P1.0-P1.7 分别接八个发光二极管 要求编写程序模拟一时序控制装置 开机后第一秒钟 L1,L3 亮, 第二秒钟 L2,L4 亮, 第三秒钟 L5,L7 亮, 第四秒钟 L6,L8 亮, 第五秒 L1,L3,L5,L7 亮, 第六秒钟 L2,L4,L6, L8 亮, 第七秒钟八个二极管全亮, 第八秒钟全灭, 以后又从头开始,L1,L3 亮, 然后 L2,L4 亮... 一直循环下去 二. 实验目的 1. 学习 8031 内部计数器的使用和编程方法 2. 进一步掌握中断处理程序的编程方法 三. 实验电路及连线 P1.0--P1.7 接 L1--L8 四. 实验说明 1. 关于内部计数器的编程主要是定时常数的设置和有关控制寄存器的设置 内部计 数器在单片机中主要有定时器和计数器两个功能 本实验用的是定时器, 有关计 数器的说明请查阅实验七 2. 内部计数器用作定时器时, 是对机器周期计数 每个机器周期的长度是 12 个振荡器周期 因为实验系统的晶振是 11.0592MHz, 所以定时常数的设置可按以下方法计算 : 机器周期 =12 11.0592MHz=1.0857μS (65536- 定时常数 )*1.0857μS=50mS 定时常数 =4C00H 3. 定时器的有关的寄存器有工作方式寄存器 TMOD 和控制寄存器 TCON TMOD

用于设置定时器 / 计数器的工作方式 0~3, 并确定用于定时还是用于计数 TCON 主要功能是为定时器在溢出时设定标志位, 并控制定时器的运行 或停止等 4. 在例程的中断服务程序中, 因为中断定时常数的设置对中断程序的运行起到关键 作用, 所以在置数前要先关对应的中断, 置数完之后再打开相应的中断 五. 实验程序框图 程序框图 : 六. 实验程序 ORG 0000H AJMP START ORG 001BH ;T1 中断入口地址 AJMP INT_T1 ORG 0100H START:

MOV SP,#60H MOV TMOD,#10H ; 置 T1 为方式 1 MOV TL1,#00H ; 延时 50mS 的时间常数 MOV TH1,#4BH MOV R0,#00H MOV R1,#20 SETB TR1 SETB ET1 SETB EA ; 开中断 SJMP $ INT_T1: ;T1 中断服务子程序 PUSH ACC ; 保护现场 PUSH PSW PUSH DPL PUSH DPH CLR TR1 ; 关中断 MOV TL1,#00H ; 延时 50mS 常数 MOV TH1,#4BH SETB TR1 ; 开中断 DJNZ R1,EXIT MOV R1,#20 ; 延时一秒的常数 MOV DPTR,#DATA ; 置常数表基址 MOV A,R0 ; 置常数表偏移量 MOVC A,@A+DPTR ; 读常数表 MOV P1,A ; 送 P1 口显示 INC R0 ANL 00,#07H EXIT: POP DPH ; 恢复现场 POP DPL POP PSW POP ACC RETI ;LED 显示常数表 DATA: DB 0FAH,0F5H,0AFH,05FH,0AAH,55H,00H,0FFH END 实验七计数器实验 一. 实验要求 8031 内部定时计数器, 按计数器模式和方式 1 工作, 对 P3.4(T0) 引脚进行计数 使用 8031 的 T1 作定时器,50ms 中断一次, 看 T0 内每 0.50ms 来了多少脉冲, 将 其数值按二进制数在 74LS273 驱动 LED 灯上显示出来,5 秒后再次测试

二. 实验目的 1. 学习 8031 内部定时 / 计数器使用方法 2. 进一步掌握中断处理编程方法 三. 实验电路及连线 P3.4 接一计数脉冲 ( 25 模块中的 149.06K 频率 ) PO0~PO7 接 L1~L8 CS273 接 8300H 四. 实验说明 1. 本实验中内部计数器起计数器的作用 外部事件计数脉冲由 P3.4 引入定时器 T0 单片机在每个机器周期采样一次输入波形, 因此单片机至少需要两个机器周期才能检测到一次跳变 这就要求被采样电平至少维持一个完整的机器周期, 以保证电平在变化之前即被采样 同时这就决定了输入波形的频率不能超过机器周期频率 2. 实验时 P3.4 对应的连线为 149.06KHZ 孔,0.5ms 内来了 80 次 (50H) 脉冲 五. 实验程序框图

六. 实验程序 : ORG 0000H AJMP START ORG 000BH ;T0 中断入口地址 RETI ORG 001BH ;T1 中断入口地址 AJMP INT_T1 ORG 0040H START: MOV SP,#60H MOV TMOD,#1DH ; 置 T1 为方式 1 ; 置 T0 为方式 1, 计数方式, ; 门控选通位有效 MOV TL0,#0H ; 计数器清零 MOV TH0,#0H MOV TL1,#32H ; 延时 0.50mS 常数 MOV TH1,#0FEH MOV R0,#20 ; 延时 5 秒常数 SETB TR0 ; 启动 T0 SETB ET0

SETB TR1 ; 启动 T1 SETB ET1 SETB EA ; 开中断 SJMP $ INT_T1: PUSH ACC PUSH PSW CLR TR1 MOV TL1,#32H ; 延时 0.50mS 常数 MOV TH1,#0FEH MOV R1,TL0 ; 保存计数值 MOV R2,TH0 MOV TL0,#00H ; 清计数器 MOV TH0,#00H SETB TR1 DJNZ R0,EXIT MOV R0,#20 ; 延时 5 秒常数 MOV DPTR,#8300H ;LED 地址 MOV A,R1 ; 把计数值在 LED 上显示 EXIT: POP PSW POP ACC RETI END 实验八 8255 输入 输出实验 一. 实验要求 编写程序, 使用 8255 可编程并行口芯片, 来检测八位拨动开关的状态, 并控制八 位发光二极管 使得八位发光二极管的亮灭变化与八位拨动开关的状态相一致 实验中用 8255PB 口作输入,PC 口做输出 二. 实验目的 了解 8255 芯片结构及编程方法 三. 实验电路及连线

8255 的 PB0~PB7(PB 口 ) 接至八位拨动开关 K1~K8 将 PC0~PC7(PC 口 ) 接至八位发光二极管 L1 -- L8 CS8255 接 8500H 四. 实验说明 可编程通用接口芯片 8255A 有三个八位的并行 I/O 口, 请用户仔细阅读有关书籍掌握其特点和各种用法 由于 8255 的 A1 A2 脚分别接至地址线的 A0 A1 所以相对应 8255 各口 / 寄存器的地址分配如下 :PA 口 :8500H; PB 口 :8502H;PC 口 :8504H; 控制寄存器地址 :8506H 本示例程序中使用 PB 口作输入, 检测八位拨动开关的状态 ; 使用 PC 口作输出, 控制八个发光二极管的亮灭 五. 实验程序框图 实验程序流程框图如下 :

六. 实验程序见 : ;--------------------------------------------------------- D8255 EQU 8506H ;8255 状态 / 命令口地址 D8255A EQU 8500H ;8255 PA 口地址 D8255B EQU 8502H ;8255 PB 口地址 D8255C EQU 8504H ;8255 PC 口地址 ;--------------------------------------------------------- ORG 0000H LJMP START ORG 0100H START: LCALL DELAY ; 延时 MOV DPTR,#D8255 MOV A,#82H ; 置 8255 状态 ; 方式 0,PA,PC 口输出,PB 口输入 ROTATE: MOV DPTR,#D8255B MOVX A,@DPTR ; 读开关状态 MOV DPTR,#D8255C ; 点亮对应的 LED SJMP ROTATE DELAY: MOV R0,#0H ; 延时子程序 DELAY1: MOV R1,#0H DJNZ R1,$ DJNZ R0,DELAY1

RET END

实验九 8255 扫描键盘 显示实验 一. 实验要求 利用 8255 可编程并行口做一个扫描键盘实验, 把按键输入的键码, 显示在由 8279 控制 的七段数码管上 8255PA 口做键盘输入线,PB 口作扫描线 二. 实验目的 1. 掌握 8255 编程方法 2. 掌握扫描键盘和显示的编程方法 三. 实验电路及连线 CS8255 接 8500H, 则命令字地址为 8506H,PA 口地址为 8500H,PB 口地址为 8502H, PC 口地址为 8504H CS8279 接 8700H, 则 8279 的状态口地址为 8701H; 8279 的数据口地址为 8700H; 模块中的十个短路套都套在 8255 侧 四. 实验说明 在 PA 口与 PB 口组成的 64 点阵列上, 把按键接在不同的点上, 将得到不同的键码, 本 实验采用 8 2 的阵列, 共可按 16 个键 显示部分由 8279 控制, 由 7407 驱动 8 位数码 管显示 五. 实验程序框图

主程序框图 读键显示部分框图 六. 实验程序 : D8255 EQU 8506H ;8255 状态 / 数据口地址 D8255A EQU 8500H ;8255 PA 口地址 D8255B EQU 8502H ;8255 PB 口地址 Z8279 EQU 8701H ;8279 状态口地址 D8279 EQU 8700H ;8279 数据口地址 DISPTR EQU 08H ; 当前显示位置 KEYVAL EQU 09H ; 读到的键码 ORG 0000H LJMP START ORG 0040H START: MOV SP,#60H LCALL DELAY ; 延时 MOV DISPTR,#30H ; 显示缓冲区头指针 MOV DPTR,#D8255 MOV A,#90H ; 置 8255 状态 ; 方式 0,PB,PC 口输出,PA 口输入 MOV DPTR,#Z8279 ; 置 8279 命令字 MOV A,#0D3H ; 清 LED 显示 MOV A,#00H MOV A,#38H

MOV A,#0D1H KB_DIS: LCALL RD_KB ; 读键盘 MOV A,#0FFH CJNE A,KEYVAL,DISBUF ; 判读到键 SJMP KB_DIS ; 没有则继续读键 DISBUF: LCALL DISP ; 把键移入显存 LCALL DELAY ; 延时消抖 LCALL DELAY SJMP KB_DIS DISP: ; 显存依次前移 MOV R1,#31H ; 在最后加入新键值 MOVE: MOV A,@R1 DEC R1 MOV @R1,A INC R1 INC R1 CJNE R1,#38H,MOVE MOV 37H,KEYVAL MOV KEYVAL,#0FFH MOV DPTR,#Z8279 MOV A,#90H MOV R0,#08H MOV R1,#30H MOV DPTR,#D8279 LP: MOV A,@R1 INC R1 DJNZ R0,LP RET RD_KB: ; 键盘扫描 MOV A,#02H ; 扫描第一行 MOV DPTR,#D8255B MOV DPTR,#D8255A MOVX A,@DPTR MOV R1,#00H CJNE A,#0FFH,KEYCAL ; 判键是否按下 MOV A,#01H ; 扫描第二行 MOV DPTR,#D8255B

MOV DPTR,#D8255A MOVX A,@DPTR MOV R1,#08H CJNE A,#0FFH,KEYCAL SJMP NOKEY ; 无键按下 KEYCAL: ; 计算键码 MOV R0,#08H SHIFT: RRC A JNC CALC INC R1 DJNZ R0,SHIFT CALC: ; 换算显示码 MOV DPTR,#DL_DAT MOV A,R1 MOVC A,@A+DPTR MOV KEYVAL,A RET NOKEY: MOV KEYVAL,#0FFH ; 返回无键标志 RET DELAY: MOV R0,#0H ; 延时子程序 DELAY1: MOV R1,#0H DJNZ R1,$ DJNZ R0,DELAY1 RET DL_DAT: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;0,1,2,3,4,5,6,7 DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;8,9,A,B,C,D,E,F END 实验十 8279 显示实验 一. 实验要求 编制程序, 利用 8279 及键盘显示接口电路, 编程实现按键的读取, 并将按键值显示在 数码管上 二. 实验目的 1. 掌握在 8031 系统中扩展 8279 键盘显示接口的方法 2. 掌握 8279 工作原理和编程方法 三. 实验电路及连线

CS8279 接 8700H 模块中的十个短路套都套在 8279 侧 四. 实验说明 利用 8279 可实现对键盘 / 显示器的自动扫描, 以减轻 CPU 负担, 并具有显示稳定 程序简单 不会出现误动作等特点 本实验系统中 8279 的状态 / 命令口地址位 8701H; 数据口地址位 8700H 示例程序运行将显示 "8279 --", 并等待按键输入, 将键值显示在数码管上 ( 只响应 0-F 按键 ) 五. 实验程序框图

六. 实验程序 : Z8279 EQU 08701H ;8279 状态 / 命令口地址 D8279 EQU 08700H ;8279 数据口地址 LEDMOD EQU 10H ; 右端输入八位字符显示 ; 外部译码键扫描方式, 双键互锁 LEDFEQ EQU 38H ; 扫描速率 LEDCLS EQU 0D1H ; 清除 LEDWR0 EQU 80H ; 设定的将要写入的显示 RAM 地址 ORG 0000H AJMP START ORG 0040H START: MOV SP,#60H LCALL INIT8279 ; 初始化 8279 WAIT: MOV DPTR,#Z8279 MOVX A,@DPTR ANL A,#0FH JZ WAIT MOV A,#40H MOV DPTR,#D8279 MOVX A,@DPTR ANL A,#3FH

MOV R4,#00H MOV R5,A LCALL DISLED SJMP WAIT INIT8279: ;8279 初始化子程序 PUSH DPH ; 保存现场 PUSH DPL PUSH ACC LCALL DELAY ; 延时 MOV DPTR,#Z8279 MOV A,#LEDMOD ; 置 8279 工作方式 MOV A,#LEDFEQ ; 置键盘扫描速率 MOV A,#LEDCLS ; 清除 LED 显示 LCALL DELAY ; 延时 MOV DPTR,#Z8279 MOV A,#90H MOV DPTR,#D8279 MOV A,#40H MOV A,#40H MOV A,#0H MOV A,#0H MOV A,#0EFH MOV A,#27H MOV A,#5BH MOV A,#7FH POP ACC ; 恢复现场 POP DPL POP DPH RET ; 显示字符子程序 ; 输入 : R4, 位置 R5, 值 DISLED: PUSH DPH ; 保存现场 PUSH DPL

PUSH ACC MOV A,#LEDWR0 ; 置显示起始地址 ADD A,R4 ; 加位置偏移量 MOV DPTR,#Z8279 ; 设定显示位置 MOV DPTR,#LEDSEG ; 置显示常数表起始位置 MOV A,R5 MOVC A,@A+DPTR ; 查表 MOV DPTR,#D8279 ; 显示数据 POP ACC ; 恢复现场 POP DPL POP DPH RET DELAY: ; 延时子程序 PUSH 0 ; 保存现场 PUSH 1 MOV 0,#0H DELAY1: MOV 1,#0H DJNZ 1,$ DJNZ 0,DELAY1 POP 1 ; 恢复现场 POP 0 RET LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7' DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F' DB 6DH,02H,08H,00H,59H,0FH,76H ;'U,-,_,,I,O,P, ' END 实验十一 8279 显示电子钟实验 一. 实验要求 利用 8279 键盘显示接口电路, 做成一个电子钟 该钟使用 T1 作 50ms 的定时中断 利用 8279 可实现对键盘 / 显示器的自动扫描, 以减轻 CPU 负担, 其有显示稳定 程序 简单 不会出现误动作等特点 本实验利用 8279 实现显示扫描自动化 8279 操作命令字较多, 根据需要来灵活使用, 通过本实验可初步熟悉使用方法 电子钟做成如下格式 : XX XX XX 由左向右分别为 : 时 分 秒 二. 实验目的

1. 掌握在 8031 系统中扩展 8279 键盘显示接口的方法 2. 掌握 8279 工作原理和编程方法 3. 进一步掌握中断处理程序的编程方法 三. 实验电路及连线 CS8279 接 8700H 模块中的十个短路套都套在 8279 侧 四. 实验说明 8279 通用接口芯片, 根据应用需要可以在多种模式下工作, 详见有关手册 五. 实验程序框图

ISLED 子程序框图 DISPLAY 子程序框图 六. 实验程序见 : Z8279 EQU 08701H ;8279 状态 / 命令口地址 D8279 EQU 08700H ;8279 数据口地址 LEDMOD EQU 00H ; 左边输入八位字符显示 ; 外部译码键扫描方式, 双键互锁 LEDFEQ EQU 2FH ; 扫描速率 LEDCLS EQU 0C1H ; 清除显示 RAM LEDWR0 EQU 80H ; 设定的将要写入的显示 RAM 地址 ORG 0000H AJMP START ORG 001BH ;INT T1 入口地址 AJMP INT_T1 ORG 0040H START: MOV SP,#60H

LCALL INIT8279 ; 初始化 8279 MOV R3,#0H ; 时 MOV R2,#0H ; 分 MOV R1,#0H ; 秒 MOV R6,#0H ; 标志 MOV TMOD,#10H MOV TL1,#00H ;50 ms 的时间常数 MOV TH1,#04CH MOV R0,#20 SETB TR1 SETB ET1 SETB EA ; 允许中断 WAIT: CJNE R6,#0FFH,WAIT LCALL DISPLAY MOV R6,#0 SJMP WAIT INIT8279: ;8279 初始化子程序 PUSH DPH ; 保存现场 PUSH DPL PUSH ACC LCALL DELAY ; 延时 MOV DPTR,#Z8279 MOV A,#LEDMOD ; 置 8279 工作方式 MOV A,#LEDFEQ ; 置键盘扫描速率 MOV A,#LEDCLS ; 清除 LED 显示 LCALL DELAY ; 延时 POP ACC ; 恢复现场 POP DPL POP DPH RET ; 显示字符子程序 ; 输入 : R4, 位置 R5, 值 DISLED: PUSH DPH ; 保存现场 PUSH DPL PUSH ACC MOV A,#LEDWR0 ; 置显示起始地址 ADD A,R4 ; 加位置偏移量 MOV DPTR,#Z8279 ; 设定显示位置 MOV DPTR,#LEDSEG ; 置显示常数表起始位置

MOV A,R5 MOVC A,@A+DPTR ; 查表 MOV DPTR,#D8279 ; 显示数据 POP ACC ; 恢复现场 POP DPL POP DPH RET DELAY: ; 延时子程序 PUSH 0 ; 保存现场 PUSH 1 MOV 0,#0H DELAY1: MOV 1,#0H DJNZ 1,$ DJNZ 0,DELAY1 POP 1 ; 恢复现场 POP 0 RET INT_T1: ;INT_T1 中断服务子程序 PUSH DPH ; 保护现场 PUSH DPL PUSH ACC PUSH PSW CLR TR1 MOV TL1,#00H ;50mS 定时常数 MOV TH1,#4CH SETB TR1 DJNZ R0,EXIT ; 判断毫秒 =0 MOV R0,#20 ;DELAY 1 SECOND MOV R6,#0FFH ; 置秒标志 CJNE R1,#59H,SECOND ; 判断秒 =59 MOV R1,#99H CJNE R2,#59H,MINUTE ; 判断分 =59 MOV R2,#99H CJNE R3,#23H,HOUR ; 判断时 =23 MOV R3,#99H HOUR: MOV A,R3 ADD A,#1 ; 时加 1 DA A MOV R3,A MINUTE: MOV A,R2

ADD A,#1 ; 分加 1 DA A MOV R2,A SECOND: MOV A,R1 ADD A,#1 ; 秒加 1 DA A MOV R1,A EXIT: POP PSW ; 恢复现场 POP ACC POP DPL POP DPH RETI ; 中断返回 DISPLAY: MOV A,R3 ANL A,#0FH MOV R5,A MOV R4,#6 LCALL DISLED ; 显示小时低位 MOV A,R3 SWAP A ANL A,#0FH MOV R5,A MOV R4,#7 LCALL DISLED ; 显示小时高位 MOV A,R2 ANL A,#0FH MOV R5,A MOV R4,#3 LCALL DISLED ; 显示分钟低位 MOV A,R2 SWAP A ANL A,#0FH MOV R5,A MOV R4,#4 LCALL DISLED ; 显示分钟高位 MOV A,R1 ANL A,#0FH MOV R5,A MOV R4,#0 LCALL DISLED ; 显示秒低位 MOV A,R1 SWAP A

ANL A,#0FH MOV R5,A MOV R4,#1 LCALL DISLED ; 显示秒高位 RET LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7' DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F' DB 6DH,02H,08H,00H,59H,0FH,76H ;'U,-,_,,I,O,P, ' END 实验十二 8279 键盘显示实验 ( 电子秒表 ) 一. 实验要求 利用实验机上提供的 8279 键盘电路, 数码显示电路, 设计一个电子钟, 用小键盘控制 电子钟的启停及初始值的预值 电子钟做成如下格式 : XX XX XX XX 由左向右分别为 : 时 分 秒 百分之一秒 1.C 键 : 清除, 显示 00.00.00.00 2.A 键 : 启动, 电子钟计时 3.D 键 : 停止, 电子钟停止计时 4.B 键 : 设置初值 : 由左向右依次输入预置的时 分 秒 百分之一秒值, 同时应具有判断输入错误的能力, 若输入有错, 则显示 :00.00.00.00 按 B 键即可重新输入预置值 : 5.E 键 : 程序退出 二. 实验目的 1. 进一步掌握 8279 键盘显示电路的编程方法 2. 进一步掌握定时器的使用和编程方法 3. 进一步掌握中断处理程序的编程方法 三. 实验电路及连线

CS8279 接 8700H 模块中的十个短路套都套在 8279 侧 四. 实验说明 8279 通用接口芯片, 根据应用需要可以在多种模式下工作, 详见有关手册 五. 实验程序框图

主程序框图

SET_T 子程序框图 GETWORD 子程序框图 六. 实验程序见 : Z8279 EQU 08701H ;8279 状态 / 命令口地址

D8279 EQU 08700H ;8279 数据口地址 LEDMOD EQU 00H ; 左边输入八位字符显示 ; 外部译码键扫描方式, 双键互锁 LEDFEQ EQU 2FH ; 扫描速率 LEDCLS EQU 0C1H ; 清除显示 RAM LEDWR0 EQU 80H ; 设定的将要写入的显示 RAM 地址 READKB EQU 40H ; 读 FIFO RAM 地址 0 的命令字 ORG 0000H AJMP START ORG 001BH ;INT T1 入口地址 AJMP INT_T1 ORG 0040H START: MOV SP,#60H LCALL INIT8279 ; 初始化 8279 MOV R3,#0H ; 时 MOV R2,#0H ; 分 MOV R1,#0H ; 秒 MOV R0,#0H ;10 毫秒 MOV R6,#0FFH ; 标志 MOV TMOD,#10H MOV TL1,#00H ;10 毫秒的时间常数 MOV TH1,#0DCH LCALL DIS_mS SETB ET1 SETB EA ; 允许中断 WAIT: LCALL GETKEY ; 读键盘 CJNE A,#0FFH,CONT ; 判断是否有键输入 MOV A,B CJNE A,#3CH,KEY_G ; 输入键是 'C', 转 CLEAR_T LCALL CLEAR_T KEY_G: CJNE A,#3AH,KEY_D ; 输入键是 'G', 转 START_T LCALL START_T KEY_D: CJNE A,#3DH,KEY_P ; 输入键是 'D', 转 STOP_T LCALL STOP_T KEY_P: CJNE A,#3BH,KEY_E ; 输入键是 'P', 转 SET_T LCALL SET_T KEY_E: CJNE A,#3EH,CONT ; 输入键是 'E', 转 MONITOR AJMP MONITOR CONT: CJNE R6,#0FFH,WAIT ; 若无秒标志则循环 LCALL DISPLAY ; 显示时间 MOV R6,#0 ; 清标志

SJMP WAIT ; 循环 MONITOR:NOP SJMP $ ; 等待回到监控 CLEAR_T: ; 时间清零子程序 CLR TR1 ; 关计数器 MOV R3,#0H ; 小时清零 MOV R2,#0H ; 分钟清零 MOV R1,#0H ; 秒清零 MOV R0,#0H ;10 毫秒清零 MOV R6,#0FFH ; 置秒标志 LCALL DIS_mS ; 显示毫秒 RET START_T: ; 电子钟计时子程序 SETB TR1 RET STOP_T: ; 电子钟停止计时子程序 CLR TR1 RET SET_T: ; 设置初值子程序 CLR TR1 ; 关计数器 MOV R4,#7 LCALL GETWORD ; 读小时数 CJNE A,#0FFH,INVALID ; 判断输入合法性 MOV A,B ADD A,#232 JC INVALID ; 判断输入小时值 < 24 MOV A,B MOV B,#10 DIV AB SWAP A ADD A,B MOV R3,A ; 保存输入的值 MOV R4,#5 LCALL GETWORD ; 读分钟数 CJNE A,#0FFH,INVALID ; 判断输入合法性 MOV A,B ADD A,#196 JC INVALID ; 判断输入分钟数 < 60 MOV A,B MOV B,#10 DIV AB

SWAP A ADD A,B MOV R2,A ; 保存输入的值 MOV R4,#3 LCALL GETWORD ; 读分钟数 CJNE A,#0FFH,INVALID ; 判断输入合法性 MOV A,B ADD A,#196 JC INVALID ; 判断输入分钟值 < 60 MOV A,B MOV B,#10 DIV AB SWAP A ADD A,B MOV R1,A ; 保存输入的值 MOV R4,#1 LCALL GETWORD ; 读 10 毫秒数 CJNE A,#0FFH,INVALID ; 判断输入合法性 MOV A,B MOV B,#10 DIV AB SWAP A ADD A,B MOV R0,A ; 保存输入的值 AJMP SET_TOK INVALID: LCALL CLEAR_T ; 时间清零 SET_TOK:LCALL DIS_mS ; 显示 10 毫秒 LCALL DISPLAY ; 显示时间 RET GETWORD: ; 读数子程序 WKEY1: LCALL GETKEY ; 读键盘 CJNE A,#0FFH,WKEY1 ; 无键输入, 则再读 MOV A,B ADD A,#0C6H JC ERROR1 ; 判断输入是否大于 9 MOV A,B SUBB A,#30H JC ERROR1 ; 判断输入是否小于 0 MOV R5,A LCALL DISLED ; 显示输入的字符

MOV B,#10 MUL AB PUSH ACC ; 保存输入的值 WKEY2: LCALL GETKEY ; 读键盘 CJNE A,#0FFH,WKEY2 ; 无键输入则再读 MOV A,B ADD A,#0C6H ; 判断输入是否大于 9 JC ERROR2 MOV A,B SUBB A,#30H ; 判断输入是否小于 0 JC ERROR2 DEC R4 MOV R5,A LCALL DISLED ; 显示输入的字符 MOV B,A POP ACC ADD A,B MOV B,A ; 把得到的值存在 B MOV A,#0FFH ; 置合法输入标志 AJMP KEYOK ERROR2: POP ACC ERROR1: MOV A,#0 ; 置非法输入标志 KEYOK: RET INIT8279: ;8279 初始化子程序 PUSH DPH ; 保存现场 PUSH DPL PUSH ACC LCALL DELAY ; 延时 MOV DPTR,#Z8279 MOV A,#LEDMOD ; 置 8279 工作方式 MOV A,#LEDFEQ ; 置键盘扫描速率 MOV A,#LEDCLS ; 清除 LED 显示 POP ACC ; 恢复现场 POP DPL POP DPH RET ; 读取键盘子程序 ; 输入 : 无 ; 输出 : B: 读到的键码 A: 按键的标志 GETKEY: PUSH DPH ; 保存现场 PUSH DPL

PUSH PSW MOV DPTR,#Z8279 MOVX A,@DPTR ; 读 8279 状态 ANL A,#07H ; 屏蔽 D7-D3 JNZ GETVAL ; 判断是否有键输入 MOV A,#0H ; 置标志 ( 无键输入 ) SJMP NKBHIT GETVAL: MOV A,#READKB ; 读 FIFO RAM 命令 MOV DPTR,#D8279 MOVX A,@DPTR ; 读键 ANL A,#3FH ; 屏蔽 SHIFT 和 CTRL 键 MOV DPTR,#KEYCODE ; 键码表起始地址 MOVC A,@A+DPTR ; 查表 MOV B,A ; 置返回键值 MOV A,#0FFH ; 置标志 ( 有键输入 ) NKBHIT: POP PSW ; 恢复现场 POP DPL POP DPH RET ; 显示字符子程序 ; 输入 : R4, 位置 R5, 值 DISLED: PUSH DPH ; 保存现场 PUSH DPL PUSH ACC MOV A,#LEDWR0 ; 置显示起始地址 ADD A,R4 ; 加位置偏移量 MOV DPTR,#Z8279 ; 设定显示位置 MOV DPTR,#LEDSEG ; 置显示常数表起始位置 MOV A,R5 MOVC A,@A+DPTR ; 查表 MOV DPTR,#D8279 ; 显示数据 POP ACC ; 恢复现场 POP DPL POP DPH RET DELAY: ; 延时子程序 PUSH 0 ; 保存现场 PUSH 1 MOV 0,#0H DELAY1: MOV 1,#0H

DJNZ 1,$ DJNZ 0,DELAY1 POP 1 ; 恢复现场 POP 0 RET DIS_mS: MOV A,R0 ANL A,#0FH MOV R5,A MOV R4,#0 LCALL DISLED ; 显示 10 毫秒低位 MOV A,R0 SWAP A ; 高低半字节交换 ANL A,#0FH MOV R5,A MOV R4,#1 LCALL DISLED ; 显示 10 毫秒高位 RET INT_T1: ;INT_T1 中断服务子程序 PUSH DPH ; 保护现场 PUSH DPL PUSH ACC PUSH PSW CLR TR1 MOV TL1,#00H ;10 毫秒定时常数 MOV TH1,#0DCH SETB TR1 MOV A,R0 ADD A,#1 ;10 毫秒数加 1 DA A MOV R0,A LCALL DIS_mS ; 显示 10 毫秒 CJNE R0,#0,EXIT ; 判断 10 毫秒 =0 MOV R6,#0FFH ; 置秒标志 CJNE R1,#59H,SECOND ; 判断秒 =59 MOV R1,#99H CJNE R2,#59H,MINUTE ; 判断分 =59 MOV R2,#99H CJNE R3,#23H,HOUR ; 判断时 =23 MOV R3,#99H

HOUR: MOV A,R3 ADD A,#1 ; 时加 1 DA A MOV R3,A MINUTE: MOV A,R2 ADD A,#1 ; 分加 1 DA A MOV R2,A SECOND: MOV A,R1 ADD A,#1 ; 秒加 1 DA A MOV R1,A EXIT: POP PSW ; 恢复现场 POP ACC POP DPL POP DPH RETI ; 中断返回 DISPLAY: MOV A,R3 ANL A,#0FH ADD A,#10H MOV R5,A MOV R4,#6 LCALL DISLED ; 显示小时低位 MOV A,R3 SWAP A ANL A,#0FH MOV R5,A MOV R4,#7 LCALL DISLED ; 显示小时高位 MOV A,R2 ANL A,#0FH ADD A,#10H MOV R5,A MOV R4,#4 LCALL DISLED ; 显示分钟低位 MOV A,R2 SWAP A ANL A,#0FH MOV R5,A

MOV R4,#5 LCALL DISLED ; 显示分钟高位 MOV A,R1 ANL A,#0FH ADD A,#10H MOV R5,A MOV R4,#2 LCALL DISLED ; 显示秒低位 MOV A,R1 SWAP A ANL A,#0FH MOV R5,A MOV R4,#3 LCALL DISLED ; 显示秒高位 RET ;LED 显示常数表 LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7' DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F' DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,087H ;'0.,1.,2.,3.,4.,5.,6.,7.' DB 0FFH,0EFH,0F7H,0FCH,0B9H,0DEH,0F9H,0F1H ;'8.,9.,A.,B.,C.,D.,E.,F.' DB 6DH,02H,08H,00H,59H,0FH,76H ;'U,-,_,,I,O,P, ' ; 键盘键码表 KEYCODE:DB 30H,31H,32H,33H,34H,35H,36H,37H ;'1,2,Q,W,A,S,+,Z' DB 38H,39H,3AH,3BH,3CH,3DH,3EH,3FH ;'3,4,E,R,D,F,X,C' ENDF

实验十三串并转换实验 一. 实验要求 利用 8031 串行口, 和并行输出串行移位寄存器 74LS164, 扩展一位数码显示在数码显 示器上循环显示 0-9 这 10 个数字 二. 实验目的 1. 掌握 8031 串行口方式 0 工作方式及编程方法 2. 掌握利用串行口扩展 I/O 通道的方法 三. 实验电路及连线 RXD 接 DATAIN,TXD 接 DCLK 四. 实验说明 串行口工作在方式 0 时, 可通过外接移位寄存器实现串并行转换 在这种方式下, 数据为 8 位, 只能从 RXD 端输入输出,TXD 端总是输出移位同步时钟信号, 其波特率固定为晶振频率 1/12 由软件置位串行控制寄存器(SCON) 的 REN 后才能启动串行接收, 在 CPU 将数据写入 SBUF 寄存器后, 立即启动发送 待 8 位数据输完后, 硬件将 SCON 寄存器的 TI 位置 1,TI 必须由软件清零 五. 实验程序框图

六. 实验程序 TIMER EQU 01H ORG 0000H AJMP START ORG 000BH ;T0 中断程序入口地址 AJMP INT_T0 ORG 0040H START: MOV SP,#60H MOV TMOD,#01H ;T0 方式 1 MOV TL0,#00H ; 延时 50mS 的常数 MOV TH0,#4BH MOV R0,#0H MOV TIMER,#20 MOV SCON,#00H ; 置串口工作方式 0 CLR TI CLR RI SETB TR0 ; 开中断 SETB ET0 SETB EA SJMP $ INT_T0: ;T0 中断子程序 PUSH ACC ; 保护现场 PUSH PSW

CLR EA ; 关中断 CLR TR0 MOV TL0,#00H ; 延时 50mS 的常数 MOV TH0,#4BH SETB TR0 DJNZ TIMER,EXIT MOV TIMER,#20 ; 延时一秒的常数 MOV DPTR,#DATA ; 置表格基址 MOV A,R0 ; 置表格偏移量 MOVC A,@A+DPTR ; 读表格数据 CLR TI MOV SBUF,A ; 串行发送数据 INC R0 CJNE R0,#0AH,EXIT ; 判断是否到表尾 MOV R0,#00H ; 调整表格偏移量 EXIT: SETB EA ; 开中断 POP PSW POP ACC ; 恢复现场 RETI ; 数码管显示常数表 DATA: DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09H ;0 1 2 3 4 5 6 7 8 9 END 实验十五 8251 可编程串行口与 PC 机通讯实验 一. 实验要求 利用实验机内的 8251 芯片, 实现与 PC 机通讯 本实验实现以下功能, 将从 PC 机键盘上键入的数字 字母显示到 PC 机显示器上, 实现 PC 机自发自收 二. 实验目的 1. 掌握 8251 芯片结构和编程, 掌握单片机通讯的编制 2. 了解实现串行通讯的硬环境, 数据格式的协议, 数据交换的协议 3. 了解 PC 机通讯的基本要求 三. 实验电路及连线

CS8251 接 8500HH 四. 实验说明 程序执行时, 应先进入调试菜单下的对话窗口中, 然后执行 G0, 就可实现实验 要求 五. 实验程序框图

六. 实验程序 系统晶振是 11.0592 MHz Z8251 EQU 8502H ;8251 状态 / 命令口地址 D8251 EQU 8500H ;8251 数据口地址 COM_MOD EQU 04EH ; 字符 8 位, 1 位起始位, 1 位停止位 ; 异步 * 16 COM_COM EQU 25H ; 请求发送, 发送允许, 接收允许 ORG 0000H AJMP START ORG 0040H START: MOV SP,#60H LCALL INIT8251 ; 初始化 8251 WAIT1: MOV DPTR,#Z8251 ;8251 状态寄存器 ( 读 ) MOVX A,@DPTR ANL A,#02H JZ WAIT1 ; 判断是否有串行输入 MOV DPTR,#D8251 MOVX A,@DPTR ; 读接收到的字符 MOV B,A

MOV DPTR,#Z8251 WAIT3: MOVX A,@DPTR ANL A,#01H JZ WAIT3 ; 判断发送允许 MOV A,B MOV DPTR,#D8251 ; 发送数据 NOP MOV DPTR,#Z8251 WAIT2: MOVX A,@DPTR ANL A,#01H JZ WAIT2 ; 判断发送允许 SJMP WAIT1 INIT8251: ;8251 初始化子程序 PUSH DPH ; 保存现场 PUSH DPL PUSH ACC MOV DPTR,#Z8251 MOV A,#00H ; 使 8251 回到方式指令格式 MOV A,#00H ; 使 8251 回到方式指令格式 MOV A,#00H ; 使 8251 回到方式指令格式 MOV A,#40H ; 使 8251 回到方式指令格式 MOV A,#COM_MOD ; 置 8251 工作方式 MOV A,#COM_COM ; 请求发送, 发送允许, 接收允许 POP ACC ; 恢复现场 POP DPL POP DPH RET END 实验十四单片机串行口与 PC 机通讯实验 一. 实验要求 利用 8031 单片机串行口, 实现与 PC 机通讯 本实验实现以下功能, 将从实验机键盘上键入的数字, 字母显示到 PC 机显示器上, 将 PC 机键盘输入的字符 (0-F) 显示到实验机的数码管上

二. 实验目的 1. 掌握串行口工作方式的程序设计, 掌握单片机通讯的编制 2. 了解实现串行通讯的硬环境, 数据格式的协议, 数据交换的协议 3. 了解 PC 机通讯的基本要求 三. 实验电路及连线 实验电路已在实验机监控电路上构成 CS8279 接 8700H 模块中的十个短路套都套在 8279 侧 8279 状态口地址为 8701H;8279 数据口地址为 8700H; 四. 实验说明 1. 当用 GR 命令执行程序时, 实验机内部会将 8031 串行口电路切换与 PC 机通讯, 无须 连线 2. 程序执行前, 进入 LCA51, 加载程序后, 才进入调试菜单工具中的对话窗口, 然后执 行 GR0, 就可实行单片机串行口与 PC 机通信实验 五. 实验程序框图

实验十六 8253 定时 / 计数器实验 一. 实验要求 编程将 8253 的定时器 0 设置为方式 3( 方波 ), 定时器 1 设置为方式 2( 分频 ), 定时器 2 设置为方式 2( 分频 ) 定时器 0 输出的脉冲作为定时器 1 的时钟输入 定时器 1 的时钟输入作为定时器 2 的输入, 定时器 2 的输出接在一个 LED 上, 运行后可观察到该 LED 在不停闪烁 也可用示波器观察各对应引脚之间的波形关系 二. 实验目的 了解 8253 定时器的硬件连接方法及时序关系 掌握 8253 的各种模式的编程及其 原 理, 用示波器观察各信号之间的时序关系 三. 实验电路及连线 8253 中 GATE0 GATE1 GATE2 接 +5V CLK0 接模块的频率插孔 (149.06KHZ),CLK1 接 OUT0,CLK2 接 OUT1 OUT2 接 L1 灯 CS8251 接 8000 孔 四. 实验说明 8253 的工作频率是 0~2MHz, 所以输入的 CLK 频率必须在 2MHz 以下 实验板 上的晶振是 14.7456MHz, 因此须经过 8284 和 393 分频后再作为 8253 的 CLK 输 入

运行本程序后, 用示波器观察 8253 的 OUT0 OUT1 OUT2 脚上的输出波形 同时可看到 L1 灯在不停闪烁 五. 实验程序框图 六. 实验程序 ;--------------------------------------------------------- TIM_CTL EQU 8003H ;8253 状态 / 命令口地址 TIMER0 EQU 8000H TIMER1 EQU 8001H TIMER2 EQU 8002H MODE03 EQU 00110110B MODE12 EQU 01110100B MODE22 EQU 10110100B ;--------------------------------------------------------- ORG 0000H LJMP START ORG 0030H

START: MOV DPTR,#TIM_CTL; 定时器 0 工作在方式 3 MOV A,#MODE03 MOV DPTR,#TIMER0 MOV A,#00H MOV A,#01H ; 计数初值为 0100H,100 分频 MOV DPTR,#TIM_CTL ; 定时器 1 工作在方式 2 MOV A,#MODE12 MOV DPTR,#TIMER1 MOV A,#18H MOV A,#00H ; 计数初值为 0018H,24 分频 MOV DPTR,#TIM_CTL ; 定时器 2 工作在方式 2 MOV A,#MODE22 MOV DPTR,#TIMER2 MOV A,#0AH MOV A,#00H ; 计数初值为 000AH,10 分频 ; SJMP START SJMP $ END

实验十七 D/A 转换实验 一. 实验要求 编写程序, 使 D/A 转换模块循环输出锯齿波和三角波 二. 实验目的 1. 了解 D/A 转换的基本原理 2. 了解 D/A 转换芯片 0832 的性能及编程方法 3. 了解单片机系统中扩展 D/A 转换的基本方法 三. 实验电路及连线 CS0832 接 8300H 四. 实验说明 D/A 转换是把数字量转化成模拟量的过程, 本实验输出为模拟电压信号, 本次实验生成的波形较为简单, 有兴趣者可试编程序生成各种波形, 如方波, 正弦波等, 也可与键盘显示模块结合起来, 构成一个简单的波形发生器, 通过键盘输入各种参数, 如频率, 振幅 ( 小于 +5V), 方波的占空比等 五. 实验程序框图

六. 实验程序 D_APORT EQU 8300H ;0832 口地址 ORG 0000H AJMP START ORG 0040H START: MOV SP,#60H ; 产生锯齿波 mov r0,#0ffh MOV A,#00H mov dptr,#d_aport bb: movx @dptr,a inc a cjne a,#0ffh,bb djnz r0,bb mov r0,#0ffh ; 产生三角波 MOV A,#00H mov dptr,#d_aport cc: movx @dptr,a inc a cjne a,#0ffh,cc dd: movx @dptr,a dec a cjne a,#0ffh,dd djnz r0,cc sjmp start end 实验十八 A/D 转换实验 一. 实验要求 利用实验板上的 ADC0809 做 A/D 转换器, 利用实验板上的电位器 W1 提供模拟量

输入 编制程序, 将模拟量转换成二进制数字量, 用发光二极管显示 二. 实验目的 1. 掌握 A/D 转换与单片机的接口方法 2. 了解 A/D 芯片 ADC0809 转换性能及编程 3. 通过实验了解单片机如何进行数据采集 三. 实验电路及连线 CS0809 接 8000H 模块电位器 V-OUT 点 ( 即中心抽头 ) 接至 ADC0809 的 IN0( 通 道 0) EOC 连 P3.2(INT0) 将单片机的 P1.0~P1.7 接至八位发光二极管 L1 -- L8 四. 实验说明 ADC0809 是八位逐次逼近法 A/D 转换器, 每采集一次一般需 100us 中断方式下, A/D 转换结束后会自动产生 EOC 信号, 经一级 74LS14 反向后与 8031 的 INT0 相接 本示例程序采取了中断处理来正确读取 A/D 转换的结果 用户也可以用延时来保证 A/D 转换完成 读取结果由 P1 口送至八位发光二极管显示 五. 实验程序框图

六. 实验程序 A_DPORT EQU 8000H ;0809 通道 0 地址 ORG 0000H LJMP START ORG 0003H LJMP INT_0 ORG 0040H START: MOV SP,#60H MOV R7,#0FFH ; 初始化 SETB IT0 SETB EA SETB EX0 ;INT0 允许 A_D: MOV DPTR,#A_DPORT ; 启动 A_D CJNE R7,#00H,$ ; 等待 A_D 转换结束 CPL A MOV P1,A ; 数据输出 MOV R7,#0FFH ; 清读数标志 SJMP A_D INT_0:

MOVX A,@DPTR ; 读 A_D 数据 MOV R7,#00H ; 置读数标志 RETI END 实验十九并行打印机实验 一. 实验要求 利用 74LS273 并行口和打印机插座 J7, 驱动并行打印机 先用 273 往 DATA1-8 送上打印数据 (ASCII 码 ), 再用 P1.0 在 STROBE/ 上产生一负脉冲, 然后用 P1.1 采样 BUSY,BUSY 为 "0", 即打印该字符结束, 可再送下一数据 二. 实验目的 掌握并行打印机的驱动和编程 三. 实验电路及连线 PO0-PO7 接 DATA1-DATA8 P1.0 接 STROBE/,P1.1 接 BUSY CS273 接 8300H 四. 实验说明 实验采用的并行接口由八位数据线, 两根控制线和一根地线组成 其中两根控制 线定义为 STROBE/ 和 BUSY 程序采用查询方式, 可驱动微型打印机 五. 实验程序框图

六. 实验程序 PRT_DATA EQU 8300H ; 打印口的数据口地址 PRT_STRO EQU P1.0 ; 打印口 STRO 线 PRT_BUSY EQU P1.1 ; 打印口 BUSY 线 ORG 0000H LJMP START ORG 0040H START: MOV SP,#60H SETB PRT_STRO ; 初始化打印口 SETB PRT_BUSY MOV DPTR,#PRT_TAB ; 置表头地址 MOV R0,#0 ; 置计数器 PR_STR: MOV A,R0 MOVC A,@A+DPTR ; 读表格数据

CJNE A,#0FFH,PRINT ; 判断字符串结束标志 SJMP $ PRINT: LCALL PRT_CHAR ; 打印字符 INC R0 ; 计数器加 1 AJMP PR_STR PRT_CHAR: ; 打印字符子程序 PUSH PSW ; 保存现场 PUSH DPH PUSH DPL SETB PRT_BUSY NOP JB PRT_BUSY,$ ; 判断 BUSY/ 状态 MOV DPTR,#PRT_DATA ; 置数据口地址 ; 发送数据 SETB PRT_STRO CLR PRT_STRO NOP NOP SETB PRT_STRO ; 发 STRO 负脉冲 POP DPL ; 恢复现场 POP DPH POP PSW RET PRT_TAB DB 31H,32H,33H,34H,35H,36H,0DH,0AH,37H,38H,39H,0FFH ;1 2 3 4 5 6 ENTER 标志 END 实验二十电子音调实验 一. 实验要求 编制程序, 利用 P1.0 输出不同频率的脉冲通过扬声器发出不同频率音调 利用 74LS244 和开关量, 决定输出音调 二. 实验目的 1. 了解计算机发声原理 2. 学习使计算机发出不同音调声音的编程方法 三. 实验电路及连线

PI0-PI7 接 K1-K8,P10 接 SD CS244 接 8200H 模块中的短路套套在 1,2 两端 ( 上端 ) 四. 实验说明 1. 音阶由不同频率的方波产生, 音阶与频率的关系如表一所示 : 2. 方波的频率由定时器控制 定时器计数溢出后, 产生中断, 将 P1.0 口取反即得周期方波 每个音阶相应的定时器初值 X 可按下法计算 : (1/2)*(1/f)=(12/fosc)*(216-X) 即 X=216-(fosc/24f) 当晶振 fosc=11.0592nhz 时, 音阶 "1" 相应的定时器初值为 X, 则可得 X=63777D=F921H, 其它的可同样求得 ( 见表一 ) 表一 :( 单位 :Hz,X 为十六进制 ) 音调频率 (Hz) X(Hex#) 1 262 F921 2 294 F9E1 3 330 FA8C 4 349 FAD8 5 392 FB68 6 440 FBE9 7 494 FC5B i 523 FC8F 3. 音的节拍由延时子程序来实现 延时子程序实现基本延时时间, 节拍值只能是它的整数倍

4. 做此实验时, 八位开关 K1~K8 均拨在下端, 运行时, 从左至右依次拨动 K1~K8 至上端, 扬声器会发出 1234567i 五. 实验程序框图

六. 实验程序 : PI EQU 8200H ; 开关输入口地址 ORG 0000H

LJMP START ORG 000BH ;T0 中断程序入口地址 LJMP INT_T0 ORG 0040H START: MOV SP,#60H MOV TMOD,#01H ;T0 方式 1 CLR TR0 ; 关 T0 SETB ET0 SETB EA ; 开中断 READ: MOV DPTR,#PI MOVX A,@DPTR ; 读开关值 MOV R1,A MOV R0,#08H ; 置计数器初值 MOV A,#01H ; 置比较初值 KEY: ANL A,R1 JZ SOUND ; 比较开关值 RL A ; 改变比较值 DJNZ R0,KEY CLR TR0 ; 开关未拨, 不发声 SJMP READ SOUND: DEC R0 MOV A,R0 ADD A,R0 ; 产生表格偏移量 MOV R0,A MOV DPTR,#FREQUENCY ; 置表格起始值 MOVC A,@A+DPTR MOV R7,A ; 查表, 将结果存入公用寄存器 R6,R7 MOV A,R0 INC A MOVC A,@A+DPTR MOV R6,A SETB TR0 ;T0 允许 SJMP READ INT_T0: CLR TR0 ;T0 关闭 CPL P1.0 ; 产生波形 MOV TH0,R7 ; 重载定时器 MOV TL0,R6 SETB TR0 ;T0 允许 RETI ; 音阶频率表

FREQUENCY: DB 0FCH,8FH,0FCH,5BH,0FBH,0E9H,0FBH,68H ;i,7,6,5 DB 0FAH,0D8H,0FAH,8CH,0F9H,0E1H,0F9H,21H ;4,3,2,1 END