800 likes | 926 Views
闽南理工学院. 单片机原理及应用 主讲教师:郭贤斌 电工电子实验中心. 实验目录. 实验一 P1 口流水灯实验 实验 二 十六进制数显示 实验三 数据区传送子程序和数据排序实验 实验四 码型转换实验 实验五 P1 口使用实验 实验六 中断控制实验 实验七 8255 控制交通灯实验. 实验一. P1 口流水灯实验. 一、实验目的 1 、 熟悉汇编语言编程。 2 、 学习使用单片机 I/O 口. 二、实验内容. P1 作为输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。. 三、实验电路.
E N D
闽南理工学院 单片机原理及应用 主讲教师:郭贤斌 电工电子实验中心
实验目录 实验一P1口流水灯实验 实验二 十六进制数显示 实验三 数据区传送子程序和数据排序实验 实验四码型转换实验 实验五 P1口使用实验 实验六中断控制实验 实验七 8255控制交通灯实验
实验一 P1口流水灯实验
一、实验目的 1、熟悉汇编语言编程。 2、学习使用单片机I/O口
二、实验内容 • P1作为输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
三、实验电路 • 1、P1口亮灯实验
四、实验程序 • org 0 • ******************************************* • 在此处将程序补充完整,并添加注释 • ******************************************* • 延时子程序 • delay: mov r6,#0a0h • dlp: mov r7,#0 • djnz r7,$ • djnz r6,dlp • ret • end
五、实验步骤 • 1、P1.0~P1.7用插针连至L1~L8 • 2、在PC联机状态下,点击“”,输入程序,并保存。 • 3、编译、连接、装载,用连续或单步运行程序。 • 4、运行结果检查: • 1)单步运行时,每走一步,可观察其运行结果,此程序单步运行时会出现问题,发现并解决它。 • 2)连续运行状态下,应按“”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后在用相应的命令键观察与检查90H的内容。
五、思考题 • 1、使用Keil编译及调试此程序。
实验二 十六进制数显示
一、实验目的 • 掌握汇编语言设计和调试方法。
二、实验内容 • 1、将片内RAM的20H内容拆开,高位送60H,低位送61H,用于数码管显示。
三、实验程序 • cs8255 equ 0ffffh ;8255命令控制口 • outseg equ 0fffch ;字形控制口 • outbit equ 0fffdh ;字位/键扫控制口 • LEDBuf equ 60h ;显示缓冲 • Num equ 70h ;显示的数据 • DelayT equ 75h ;延迟参数 • org 0 • Start: • mov sp,#40h • mov Num,#0 • mov dptr,#CS8255 • mov a,#88h ;命令字:A,B口输出 • movx @dptr,a ;8255初始化 • ;********************************************************* • ;将程序补充完整 • ;将片内RAM的20H内容拆开,高位送60H,低位送61H • ;********************************************************* • Dis: CALL DisplayLED • sjmp Dis
Delay: ;延时子程序 • mov r7,#0 • DelayLoop: • djnz r7,DelayLoop • djnz r6,DelayLoop • ret • DisplayLED: • mov r0,#LEDBuf • mov r1,#2 ;共2个LED八段管 • mov r2,#10000000b;从左边开始显示 • Loop: • mov dptr,#OUTBIT • clr a • movx @dptr,a ;关所有八段管 • mov a,@r0 • anl a,#0fh • mov dptr,#LEDMap • movc a,@a+dptr ;数字转换成显示码 • mov dptr,#OUTSEG • movx @dptr,a • mov dptr,#OUTBIT • mov a,r2
movx @dptr,a ;显示一位八段管 • mov r6,#01 • call Delay • mov a,r2 ;显示下一位 • rr a • mov r2,a • inc r0 • djnz r1,Loop • mov dptr,#OUTBIT • clr a • movx @dptr,a ;关所有八段管 • ret • LedMap: ;八段管显示码 • db 0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8h • db 080h,090h,088h,083h,0c6h,0a1h,086h,08eh • end
四、实验步骤 • 1、在PC联机状态下,点击“”,输入程序,并保存。 • 2、编译、连接、装载,用连续或单步运行程序。 • 3、运行结果检查:
五、思考题 • 1、如何用断点方式调试本程序 • 2、使用Keil编译及调试此程序。
实验三 • 数据区传送子程序和数据排序实验
一、实验目的 • 熟悉MCS-51指令系统,掌握RAM中的数据操作。
二、实验内容 • 1、将片内RAM的20H起始的16个单元传送到30H地址空间。 • 2、编写并调试一个排序子程序,其功能为用起泡法将内容RAM中几个单字节无符号的正整数,按从小到大的次序重新排列。
三、程序流程图 • 1、数据区传送流程图
四、实验程序 • 1、数据区传送子程序 • 0300h • mov r0, • mov r1, • mov r7, • Loop: mov a,@r0 • mov ,a • ———— • ———— • djnz r7,Loop • sjmp $ • end
2、数据排序实验 • 0300h • start: mov r0, ______ • mov r1, ______ • mov r7, ______ • clr 00h • ql2: mov a,@r0 • mov 22h, ______ • clr c • mov 22h,@r1 • ________ • setb c
ql3: jc ql1 • 00h • ________ • ________ • ql1: ________ • ________ • djnz r7,ql2 • jb 00h,start • sjmp $ • end
五、实验步骤 • (一)数据区传送子程序 • 1、在PC联机状态下,点击“”,输入程序,并保存。 • 2、编译、连接、装载,用连续或单步运行程序。 • 3、运行结果检查: • 1)单步运行时,每走一步,可观察其运行结果。 • 2)连续运行状态下,应按“”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后在用相应的命令键观察与检查30H开始的16个单元的内容与20H开始的16个单元的内容是否完全相同。 • (二)数据排序程序 • 1、2步同上,在MCS-51的RAM 50~5AH中放入不等的数据,运行本实验程序后检查50~5AH中内容是否按从小到大排列。
六、思考题 • 1、修改程序把50~5AH中内容按从大到小 排列。
实验四 码型转换实验
一、实验目的 • 1、掌握简单的数值转换算法,基本了解数值的各种表达方法。 • 2、了解BCD值和ASCII值的区别;了解如何将BCD值转换成ASCII值;了解如何查表进行数值转换及快速计算
二、实验内容 • 1、将给定的一个二进制数,转换成二进制编码的十进制(BCD)码。将A的内容拆为三个BCD码,并存入CPU内部存储区60H开始的三个单元,并显示。 • 2、将ACC的内容拆为二个ASCII码,并存入20H开始的二个单元
三、程序流程图 • 1、二进制码转换到BCD码
四、实验程序 • 1、二进制码转换到BCD码 • 将ACC拆为三个BCD码,并存入cup内部存储区60H开始的三个单元 • cs8255 equ 0ffffh ;8255命令控制口 • outseg equ 0fffch ;字形控制口 • outbit equ 0fffdh ;字位/键扫控制口 • Result equ 60h • LEDBuf equ 60h ;显示缓冲 • Num equ 70h ;显示的数据 • DelayT equ 75h ;延迟参数
org 0 • Start: • ;mov sp,#40h • mov Num,#0 • mov dptr,#CS8255 • mov a,#88h ;命令字:A,B口输出 • movx @dptr,a ;8255初始化 • ;******************************************************** • mov a,#123 ;置初值 • call BinToBCD • Dis: CALL DisplayLED • sjmp Dis
BinToBCD: • __________ • __________ • mov Result,a ;除以100,得百位数 • __________ • __________ • __________ • mov Result+1,a ;余数除以10,得十位数 • mov Result+2,b ;余数为个位数 • ret
Delay: ;延时子程序 • mov r7,#0 • DelayLoop: • djnz r7,DelayLoop • djnz r6,DelayLoop • ret • DisplayLED: • mov r0,#LEDBuf • mov r1,#3 ;共3个LED八段管 • mov r2,#10000000b;从左边开始显示
Loop: • mov dptr,#OUTBIT • clr a • movx @dptr,a ;关所有八段管 • mov a,@r0 • anl a,#0fh • mov dptr,#LEDMap • movc a,@a+dptr ;数字转换成显示码 • mov dptr,#OUTSEG • movx @dptr,a • mov dptr,#OUTBIT • mov a,r2 • movx @dptr,a ;显示一位八段管 • mov r6,#01
call Delay • mov a,r2 ;显示下一位 • rr a • mov r2,a • inc r0 • djnz r1,Loop • mov dptr,#OUTBIT • clr a • movx @dptr,a ;关所有八段管 • ret • LedMap: ;八段管显示码 • db 0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8h • db 080h,090h,088h,083h,0c6h,0a1h,086h,08eh • end
2、二进制转换成ASCII码 • Result equ 20h • org 0 • Start: mov a,#1ah • call BinToHex • sjmp $ • BinToHex: • mov dptr, _______ • ___________ • swap a • anl a, _______ • ___________ • mov Result,a
mov a,b • anl a,#0fh • _________ • mov Result+1, _______ • ret • ASCIITab: ;定义数字对应的ASCII表 • db '0123456789ABCDEF' • end
五、实验步骤 • (一)二进制转换成BCD码 • 1、在PC联机状态下,点击“”,输入程序,并保存。 • 2、编译、连接、装载,用连续或单步运行程序。 • 3、运行结果检查:
(二)二进制转换成ASCII码 • 1、在PC联机状态下,点击“”,输入程序,并保存。 • 2、编译、连接、装载,用连续或单步运行程序。 • 3、运行结果检查: • 1)单步运行时,每走一步,可观察其运行结果。 • 2)连续运行状态下,应按“”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后在用相应的命令键观察与检查20H开始的二个片内RAM单元的内容。
六、思考题 • 1、如何将BCD转换成二进制码?
实验五 P1口使用实验
一、实验目的 • 1)学习P1口的使用方法; • 2)学习汇编语言编程方法与调试技巧。
二、实验内容 • 1)P1.0置高电平时、P1.1置低电平时,右转弯灯闪亮;P1.1置高电平、P1.0置低电平时左转弯灯闪亮;P1.0、P1.1同时置高置低时,转弯灯均不闪亮。
三、程序流程图 • 1、P1口转弯灯实验
四、实验电路 • 1、P1口转弯灯实验
五、实验程序 • 2、P1口转弯灯实验 • org 0 • px00: mov p1,#0ffh ;初始化 • px03: mov a,p1 • mov b,a • anl a,#03h • cjne a,#01h,px01 • jb 00h,px04 • clr p1.4 • p1.5 • setb p1.6 • p1.7 • mov r2,#20h • lcall delay ;延时 • setb 00h • ljmp px03 ;继续查状态
px04: setb p1.4 • setb p1.5 • p1.6 • p1.7 • mov r2,#20h • lcall delay ;延时 • clr 00h • ajmp px03 ;继续查状态 • px01: cjne a,#02h,px02 • jb 01h,px05 • p1.4 • setb p1.5 • p1.6 • clr p1.7 • mov r2,#20h ;延时 • lcall delay • setb 01h • ljmp px03 ;继续查状态
px05: p1.4 • p1.5 • p1.6 • p1.7 • mov r2,#20h • lcall delay ;延时 • clr 01h • ljmp px03 ;继续查状态 • px02: p1.4 • p1.5 • setb p1.6 • setb p1.7 • ljmp px03 ;继续