1 / 80

闽南理工学院

闽南理工学院. 单片机原理及应用 主讲教师:郭贤斌 电工电子实验中心. 实验目录. 实验一 P1 口流水灯实验 实验 二 十六进制数显示 实验三 数据区传送子程序和数据排序实验 实验四 码型转换实验 实验五 P1 口使用实验 实验六 中断控制实验 实验七 8255 控制交通灯实验. 实验一. P1 口流水灯实验. 一、实验目的 1 、 熟悉汇编语言编程。 2 、 学习使用单片机 I/O 口. 二、实验内容. P1 作为输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。. 三、实验电路.

Download Presentation

闽南理工学院

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 闽南理工学院 单片机原理及应用 主讲教师:郭贤斌 电工电子实验中心

  2. 实验目录 实验一P1口流水灯实验 实验二 十六进制数显示 实验三 数据区传送子程序和数据排序实验 实验四码型转换实验 实验五 P1口使用实验 实验六中断控制实验 实验七 8255控制交通灯实验

  3. 实验一 P1口流水灯实验

  4. 一、实验目的 1、熟悉汇编语言编程。 2、学习使用单片机I/O口

  5. 二、实验内容 • P1作为输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。

  6. 三、实验电路 • 1、P1口亮灯实验

  7. 四、实验程序 • org 0 • ******************************************* • 在此处将程序补充完整,并添加注释 • ******************************************* • 延时子程序 • delay: mov r6,#0a0h • dlp: mov r7,#0 • djnz r7,$ • djnz r6,dlp • ret • end

  8. 五、实验步骤 • 1、P1.0~P1.7用插针连至L1~L8 • 2、在PC联机状态下,点击“”,输入程序,并保存。 • 3、编译、连接、装载,用连续或单步运行程序。 • 4、运行结果检查: • 1)单步运行时,每走一步,可观察其运行结果,此程序单步运行时会出现问题,发现并解决它。 • 2)连续运行状态下,应按“”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后在用相应的命令键观察与检查90H的内容。

  9. 五、思考题 • 1、使用Keil编译及调试此程序。

  10. 实验二 十六进制数显示

  11. 一、实验目的 • 掌握汇编语言设计和调试方法。

  12. 二、实验内容 • 1、将片内RAM的20H内容拆开,高位送60H,低位送61H,用于数码管显示。

  13. 三、实验程序 • 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

  14. 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

  15. 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

  16. 四、实验步骤 • 1、在PC联机状态下,点击“”,输入程序,并保存。 • 2、编译、连接、装载,用连续或单步运行程序。 • 3、运行结果检查:

  17. 五、思考题 • 1、如何用断点方式调试本程序 • 2、使用Keil编译及调试此程序。

  18. 实验三 • 数据区传送子程序和数据排序实验

  19. 一、实验目的 • 熟悉MCS-51指令系统,掌握RAM中的数据操作。

  20. 二、实验内容 • 1、将片内RAM的20H起始的16个单元传送到30H地址空间。 • 2、编写并调试一个排序子程序,其功能为用起泡法将内容RAM中几个单字节无符号的正整数,按从小到大的次序重新排列。

  21. 三、程序流程图 • 1、数据区传送流程图

  22. 2、数据排序流程图

  23. 四、实验程序 • 1、数据区传送子程序 • 0300h • mov r0, • mov r1, • mov r7, • Loop: mov a,@r0 • mov ,a • ———— • ———— • djnz r7,Loop • sjmp $ • end

  24. 2、数据排序实验 • 0300h • start: mov r0, ______ • mov r1, ______ • mov r7, ______ • clr 00h • ql2: mov a,@r0 • mov 22h, ______ • clr c • mov 22h,@r1 • ________ • setb c

  25. ql3: jc ql1 • 00h • ________ • ________ • ql1: ________ • ________ • djnz r7,ql2 • jb 00h,start • sjmp $ • end

  26. 五、实验步骤 • (一)数据区传送子程序 • 1、在PC联机状态下,点击“”,输入程序,并保存。 • 2、编译、连接、装载,用连续或单步运行程序。 • 3、运行结果检查: • 1)单步运行时,每走一步,可观察其运行结果。 • 2)连续运行状态下,应按“”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后在用相应的命令键观察与检查30H开始的16个单元的内容与20H开始的16个单元的内容是否完全相同。 • (二)数据排序程序 • 1、2步同上,在MCS-51的RAM 50~5AH中放入不等的数据,运行本实验程序后检查50~5AH中内容是否按从小到大排列。

  27. 六、思考题 • 1、修改程序把50~5AH中内容按从大到小 排列。

  28. 实验四 码型转换实验

  29. 一、实验目的 • 1、掌握简单的数值转换算法,基本了解数值的各种表达方法。 • 2、了解BCD值和ASCII值的区别;了解如何将BCD值转换成ASCII值;了解如何查表进行数值转换及快速计算

  30. 二、实验内容 • 1、将给定的一个二进制数,转换成二进制编码的十进制(BCD)码。将A的内容拆为三个BCD码,并存入CPU内部存储区60H开始的三个单元,并显示。 • 2、将ACC的内容拆为二个ASCII码,并存入20H开始的二个单元

  31. 三、程序流程图 • 1、二进制码转换到BCD码

  32. 四、实验程序 • 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 ;延迟参数

  33. 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

  34. BinToBCD: • __________ • __________ • mov Result,a ;除以100,得百位数 • __________ • __________ • __________ • mov Result+1,a ;余数除以10,得十位数 • mov Result+2,b ;余数为个位数 • ret

  35. Delay: ;延时子程序 • mov r7,#0 • DelayLoop: • djnz r7,DelayLoop • djnz r6,DelayLoop • ret • DisplayLED: • mov r0,#LEDBuf • mov r1,#3 ;共3个LED八段管 • mov r2,#10000000b;从左边开始显示

  36. 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

  37. 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

  38. 2、二进制转换成ASCII码 • Result equ 20h • org 0 • Start: mov a,#1ah • call BinToHex • sjmp $ • BinToHex: • mov dptr, _______ • ___________ • swap a • anl a, _______ • ___________ • mov Result,a

  39. mov a,b • anl a,#0fh • _________ • mov Result+1, _______ • ret • ASCIITab: ;定义数字对应的ASCII表 • db '0123456789ABCDEF' • end

  40. 五、实验步骤 • (一)二进制转换成BCD码 • 1、在PC联机状态下,点击“”,输入程序,并保存。 • 2、编译、连接、装载,用连续或单步运行程序。 • 3、运行结果检查:

  41. (二)二进制转换成ASCII码 • 1、在PC联机状态下,点击“”,输入程序,并保存。 • 2、编译、连接、装载,用连续或单步运行程序。 • 3、运行结果检查: • 1)单步运行时,每走一步,可观察其运行结果。 • 2)连续运行状态下,应按“”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后在用相应的命令键观察与检查20H开始的二个片内RAM单元的内容。

  42. 六、思考题 • 1、如何将BCD转换成二进制码?

  43. 实验五 P1口使用实验

  44. 一、实验目的 • 1)学习P1口的使用方法; • 2)学习汇编语言编程方法与调试技巧。

  45. 二、实验内容 • 1)P1.0置高电平时、P1.1置低电平时,右转弯灯闪亮;P1.1置高电平、P1.0置低电平时左转弯灯闪亮;P1.0、P1.1同时置高置低时,转弯灯均不闪亮。

  46. 三、程序流程图 • 1、P1口转弯灯实验

  47. 四、实验电路 • 1、P1口转弯灯实验

  48. 五、实验程序 • 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 ;继续查状态

  49. 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 ;继续查状态

  50. 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 ;继续

More Related