版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机原理及应用 实验指导书 目 录 目目 录录.2 实验一实验一 仿真环境使用仿真环境使用.3 实验二实验二 数据区传送、数据排序程序实验数据区传送、数据排序程序实验 .9 实验三实验三 键盘扫描显示实验键盘扫描显示实验.12 实验四实验四 脉冲计数(定时脉冲计数(定时/计数器的记数功能实验)计数器的记数功能实验).19 实验五实验五 a/d 转换实验转换实验.24 实验六实验六 d/a0832 转换实验转换实验.28 实验七实验七 步进电机控制实验步进电机控制实验.32 实验八实验八 ram 扩展实验扩展实验 .39 实验九实验九 力测量实验力测量实验.42 实验十实验十 温度测量实验温度
2、测量实验.47 实验十一实验十一 点阵点阵 lcd 液晶显示屏实验液晶显示屏实验.51 实验一实验一 仿真环境使用仿真环境使用 一、实验目的 1、熟悉仿真环境。 2、学习简单程序调试的方法。 二、实验内容: 1、keil 软件的安装 将带有 keil 安装软件的光盘放入光驱里,打开光驱中带有 keil 安装软件的文件 夹,双击 setup 文件夹中“setup”即开始安装。如果您的微机上已经安装了 keil 的软件, 会提示您是否要先把您以前的软件先卸载,此时您最好是先卸载掉,然后再安装本软件 (如图所示) 。 如果您需要把软件安装在 c 盘以外的其它盘,需要运行一个补丁文件,直接打开 kei
3、l 软件已安装目录中的keiluv2,双击“crackdir”图标,点击确定即完成补丁的安 装(如图所示) 。 实验中所用实验例程在盘符keiluv2 中,文件名为“3000tb51 配套实验程序”都是 工程文件,直接打开就可以进入调试界面;本书中所讲软件实验在“51asm”文件夹中, 都以 asm 的格式存放文件夹中。 2、硬件安装 连接 51cpu 板,在实验箱右下角有三个插座:j1、j2、j3,用来连接 51cpu 板, 在 51cpu 板上有一个小拨码开关:j18,是单片机的 ea 脚,是用来选择读片内还是片外 rom 的,拨向左边为读片内 rom;拨向右边为读片外 rom。 keil
4、 仿真器与实验箱的连接:将 keil 仿真器 40 芯的排线连到 51cpu 板的 40 芯 插座上,仿真器的 usb 连接线连到微机的 usb 口。 八段数码管右上角的两个拨码小开关是用来设置工作模式的,将两个拨码小开关同 时拨向右边是选择 51 单片机工作模式,此时应拨向右边。 3、keil c 软件的操作说明 新建一个项目文件。 首先点击 keil uvision2 ,进入 uvision2 界面。点击工具栏 project 选项中的 new project,准备开始建立自己的项目。 输入工程文件名称,并选择保存工程文件的目录。 为项目文件选择一个目标器件(如 atmel89c51) ,
5、如图所示。 用鼠标对项目工作区的目标 1,点击右键在弹出的菜单中选择“为目标目标 1设置 选项”如下图所示。 在“为目标目标 1设置选项”中,点击“调试”菜单,在此菜单中可选择是使用 硬件仿真,还是软件仿真,连接实验箱做实验时选择硬件仿真,点击硬件仿真选项后面的 设置选项,在此对对话框中选择串口和波特率,串口根据所连电脑来决定。波特率为 38400。 点击“文件/新建”创建源程序文件并输入程序代码。 在文本框中输入原程序,如下图所示 点击“文件/保存“对程序进行保存 软件仿真 硬件仿真 选择串口 选择波特率 用鼠标对项目工作区的目标 1,点击右键在弹出的菜单中选择添加文件到原代码组, 如下图所
6、示 在弹出的添加文件框中,选择需要添加到项目中的文件 点击编译连接的图标,对项目文件进行编译 点击“调试/启动/停止调试”进入调试界面 在调试界面中可以对程序进行单步或者全速运行的调试 若要查看内存中的数据,点击“视图/存储器窗口” 连机/停止 全速运行 单步 在此地址框中,输入不同的指令查看内部数据 如果需要查看一些内部数据,在菜单栏点击视图/存储窗口。 c:0x 地址显示程序存储区数据 x:0x 地址显示数据存储区中数据 d:0x 地址显示 cpu 内部存储区中数据 注意:仿真器使用者使用时应注意: keil c 仿真器用户程序在全速运行时,如果需暂停运行,请按实验仪键盘“rst” ,此
7、时仿真器存储器数据清零。如果您要再次运行您所编写的程序,就必须重新装载运行。 4、拆字程序:把 8000h 地址上的内容拆开,高位送 8001h 地址的低位,低位送 8002h 地址的低位,8001h、8002h 地址的高位清零 ;参考程序 org 0000h mov dptr,#8000h;指定的字节 movx a,dptr mov b,a;暂存 swap a ;交换 anl a,#0fh ;屏敝高位 inc dptr movx dptr,a inc dptr mov a,b anl a,#0fh ;指定字节的内容屏敝高位 movx dptr,a loop:sjmp loop end 实验二
8、实验二 数据区传送、数据排序程序实验数据区传送、数据排序程序实验 一、实验目的 1、学习 windows 平台下的编辑、编译、排错调试方法。 2、学习修改和观察变量的方法;综合使用单步、断点调试的方法。 二、实验内容: 1、数据传送 把内部 ram 中起始地址为 data 的数据传送到内部 ram 以 buffer 为首地址的区域,直 到发现“$”字符的 ascii 码为止,数据串的最大长度为 32 个字节。 2、多字节 bcd 码加法 3、编写并调试一个排序子程序,其功能为用冒泡法将内部 ram 中几个单字节无符号 正整数,按从小到大的次序重新排列。 三、实验器材: 计算机 1 台 四、实验
9、步骤 1、参阅硬件安装把综合实验仪、仿真器与 pc 机串行口连起来,打开电源。 2、在 pc 机上用鼠标点击“keil uvision 2”图标,进入 keil 调试环境,选择串行口, 点击“确认” 。 3、打开“项目/新建项目” ,输入项目名,选择目标 mcu,如:intel 89c52。 4、编辑文件:用鼠标点击文件|新文件,在文本编辑器中编辑程序: 5、文件保存:用鼠标点击文件|保存,在对话框中输入文件名。 6、为项目添加文件:单击左边的项目工作区/源代码组 1右键在出现菜单中选择添加 文件到组“源代码组 1”,在弹出的对话框中选中您刚保存的文件,点击确认完成项目文 件的添加。 7、为项
10、目设置通讯口:单击左边的项目工作区/目标 1右键在出现的菜单中选择为目 标“目标 1”设置选项,在弹出的菜单中选择调试。在新窗口中选择使用 keil monitor-51 driver。单击设置在出现的窗口中设置串口和波特率(注:波特率必须为 38400) 。 8、文件编译、连接、装载:用鼠标点击项目/重建所有目标文件,系统自动进行编译, 并出现信息窗口。若有语法错误,则需重新修正,需再次执行重建所有目标文件;若无语 法错误,点击调试/启动/停止调试后,进入调试状态。 9、设置观察窗口:用鼠标点击视图/存储口窗口,在地址口输入 cpu 内部存贮区地 址,回车之后出现地址为 50h 的数据显示于
11、窗口中。 10、单步执行程序:按 f11 键一条一条地执行下去,注意观察左边寄存器区中相应的 寄存器或者 cpu 内部存贮区中相应的数据寄存器单元的数据变化。 11、连续运行:用鼠标点击外围设备/复位 cpu,使 pc 指向 0000h,点击调试/运行后, 程序开始连续运行。如需暂停,用鼠标点击调试/停止运行。 12、断点运行:要使程序执行到某条指令处暂停,如希望程序执行到 loop1 处暂停, 可按如下操作:将光标移到 loop1 处双击鼠标左键,即可设置断点,用鼠标点击调试/运 行,程序将在 loop 行停止运行。 13、复位:用鼠标点击外围设备/复位 cpu,强迫 pc 指向 0000h
12、。 数据传送子程序 1、数据传送 把内部 ram 中起始地址为 data 的数据传送到内部 ram 以 buffer 为首地址的区域,直 到发现“$”字符的 ascii 码为止,数据串的最大长度为 32 个字节。 org 0000h mov r0,#data mov r1,#buffer mov r2,#20h loop: mov a, r0 subb a, #24h jz exit inc r1 1nc r0 mov r1, a djnz r2,loop l00p: ajmp $ ret 开 始 源地址内容送 a a 送目的地址 源地址加 1 目地址加 1 字节数到吗? 结 束 y y n
13、n 图 1 数据传送子程序流程图 开 始 清标志位 根据(r0)取数 a (r0)+1 送 r0 (a) (r0) )? 置标志位,交换 内容 长度减 1=0? 标志位 =0? 结 束 y n n y 图 2 数据排序程序流程图 2、多字节 bcd 码加法 入口条件:字节数在 r7 中,被加数在r0中,加数在r1中。 出口条件:和在r0中,最高位进位在 cy 中。 影响资源:psw、a、p2 堆栈需求:2 字节 org 0000h bcda:mov a,r7 mov r2,a add a,r0 mov r0,a mov a,r2 add a,r1 mov r1,a clr c bcdl: de
14、c r0 dec r1 mov a,r0 addc a, r1 da a mov r0,a djnz r2, bcdl ret 3;用冒泡法进行数据排序 org 0000h mov r3,#50h loop0: mov a,r3 mov r0,a;指针送 r0 mov r7,#0ah;长度送 r7 clr 00h ;标志位为 0 mov a,r0 loop1: inc r0 mov r2,a clr c mov 22h,r0 cjne a,22h,loop2;相等吗? setb c loop2: mov a,r2 jc loop3;小于或等于不交换 setb 00h xch a,r0 dec
15、r0 xch a,r0 inc r0;大于交换位置 loop3: mov a,r0 djnz r7,loop1 jb 00h,loop0;一次循环中有交换继续 loop:sjmp loop;无交换退出 end 实验三实验三 键盘扫描显示实验键盘扫描显示实验 一、实验目的: 1、掌握键盘和显示器的接口方法和编程方法。 2、掌握键盘扫描和 led 八段数码管显示器的工作原理。 二、实验要求: 在上一个实验的基础上,利用实验仪提供的键盘扫描电路和显示电路,做一个扫描键盘和 数码显示实验,把按键输入的键码在六位数码管上显示出来。 实验程序可分成三个模块。 1、键输入模块:扫描键盘、读取一次键盘并将键值
16、存入键值缓冲单元。 2、显示模块:将显示单元的内容在显示器上动态显示。 3、主程序:调用键输入模块和显示模块。 三、实验器材: 1、单片机综合实验仪 1 台 2、keil 仿真器 1 台 3、计算机 1 台 四、实验电路: 这里只是键盘示意图,详细原理参见“8155 键显模块”。 五、实验说明: 本实验仪提供了一个 64 的小键盘,向列扫描码地址(0e101h)逐列输出低电平,然后 列码 (0e101h) 行码 (0e103h) 图 3 键盘示意图 从行码地址(0e103h)读回,如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的 作用,行码为高.这样就可以通过输出的列码和读取的行码来
17、判断按下的是什么键。在判断有 键按下后,要有一定的延时,防止键盘抖动。列扫描码还可以分时用作 led 的位选通信号。 六、实验流程图: 否 是 否 开始 输出列扫描信号 列扫描信号移位 该列有键输入? 读入行信号 6 列扫描完? 初始化地址参数 按照行列计算键值 查表得键码 等待键盘释放 返回 显示缓冲区初始化 led 显示 读取键值 键值转换为显示数据 有键输入? 否 是 图 4 实验主程序框图 图 5 读键输入子程序框图 显示程序框图见上个实验显示程序框图见上个实验 七、实验程序: ;键盘扫描实验 outbit equ 0e101h ; 位控制口 clk164 equ 0e102h ; 段
18、控制口(接 164 时钟位) dat164 equ 0e102h ; 段控制口(接 164 数据位) in equ 0e103h ; 键盘读入口 org 0000h ljmp star ;= key1: mov 13h,#06h mov 12h,#20h key2: mov a,12h cpl a mov r7,a mov dptr,#0e101h mov a,r7 movx dptr,a mov a,12h clr c rrc a mov 12h,a mov dptr,#0e103h movx a,dptr mov r7,a mov a,r7 cpl a mov r7,a mov a,r7
19、anl a,#0fh mov 14h,a dec 13h mov r7,13h mov a,r7 jz keydis mov a,14h jz key2 keydis: mov a,14h jz testkey5 mov a,13h add a,acc add a,acc mov 13h,a mov a,14h jnb acc.1,testkey inc 13h sjmp testkey2 ;= ;键盘扫描 testkey: mov a,14h jnb acc.2,testkey1 inc 13h inc 13h sjmp testkey2 testkey1: mov a,14h jnb ac
20、c.3,testkey2 mov a,#03h add a,13h mov 13h,a testkey2: mov dptr,#0e101h clr a movx dptr,a testkey3: mov r7,#0ah lcall mloop lcall mloop4 mov a,r7 jnz testkey3 mov r7,13h mov a,r7 mov dptr,#0134h movc a,a+dptr mov r7,a ret ;= testkey4: db 22h ; ;= testkey5: mov r7,#0ffh ret ;= getkey: mov 10h,#20h mov
21、 0eh,#00h getkey1: mov a,0eh clr c subb a,#06h jnc goon2 mov dptr,#0e101h clr a movx dptr,a mov r7,0eh mov a,#08h add a,r7 mov r0,a mov a,r0 mov r7,a mov 11h,r7 mov 0fh,#00h getkey2: mov a,0fh clr c subb a,#08h jnc goon1 mov a,11h jnb acc.7,kloop mov dptr,#0e102h mov a,#01h movx dptr,a sjmp kloop1 ;
22、= kloop: mov dptr,#0e102h clr a movx dptr,a kloop1: mov dptr,#0e102h movx a,dptr mov r7,a mov a,r7 orl a,#02h mov r7,a mov a,r7 movx dptr,a mov dptr,#0e102h movx a,dptr mov r7,a mov a,r7 anl a,#0fdh mov r7,a mov a,r7 movx dptr,a mov a,11h add a,acc mov 11h,a inc 0fh sjmp getkey2 goon1: mov dptr,#0e1
23、01h mov a,10h movx dptr,a mov r7,#01h lcall mloop mov a,10h clr c rrc a mov 10h,a inc 0eh sjmp getkey1 goon2: ret ;= wait: mov dptr,#0e100h mov a,#03h movx dptr,a mov 08h,#0ffh mov 09h,#0ffh mov 0ah,#0ffh mov 0bh,#0ffh mov 0ch,#00h mov 0dh,#00h wait1: lcall getkey lcall mloop4 mov a,r7 jz wait1 lcal
24、l key1 mov r6,#00h mov r6,#00h mov a,r7 anl a,#0fh mov r7,a mov a,#24h add a,r7 mov dpl,a mov a,#01h addc a,r6 mov dph,a clr a movc a,a+dptr mov r7,a mov 0dh,r7 sjmp wait1 ret ;= tab: q0124: db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h;?.ofm. q012c: db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h;ow|9yq q013
25、4: db 00h, 01h, 04h, 07h, 0fh, 02h, 05h, 08h;. q013c: db 0eh, 03h, 06h, 09h, 0dh, 0ch, 0bh, 0ah;. q0144: db 10h, 11h, 12h, 13h, 14h, 15h, 16h ;. ;= mloop: mov 15h,r7 mloop1: mov r7,15h dec 15h mov a,r7 jz mloop3 mov 16h,#64h mloop2: mov a,16h jz mloop1 dec 16h sjmp mloop2 sjmp mloop1 mloop3: ret ;=
26、mloop4: mov dptr,#0e101h clr a movx dptr,a mov dptr,#0e103h movx a,dptr mov r7,a mov a,r7 cpl a mov r7,a mov a,r7 anl a,#0fh mov r7,a ret ;= star: mov r0,#7fh clr a star1: mov r0,a djnz r0,star1 mov sp,#16h ljmp wait end 实验四实验四 脉冲计数(定时脉冲计数(定时/ /计数器的记数功能实验)计数器的记数功能实验) 一、实验目的: 1、熟悉 8031 定时/计数器的记数功能; 2
27、、掌握初始化编程方法; 3、掌握中断程序的调试方法。 二、实验内容: 定时/记数器 0 对外部输入的脉冲进行计数,并送显示器显示。 三、实验器材: 1、单片机综合实验仪 1 台 2、keil 仿真器 1 台 3、连线若干根 4、计算机 1 台 四、实验原理: mcs-51 有两个 16 位的定时/计数器:t0 和 t1。计数和定时实质上都是对脉冲信号进 行计数,只不过脉冲源不同而已。当工作在定时方式时,计数脉冲来自单片机的内部,每 个机器周期使计数器加 1,由于计数脉冲的频率是固定的(即每个脉冲为 1 个机器周期的 时间) ,故可通过设定计数值来实现定时功能。当工作在计数方式时,计数脉冲来自单
28、片机 的引脚,每当引脚上出现一个由 1 到 0 的电平变化时,计数器的值加 1,从而实现计数功 能。可以通过编程来指定时计数器的功能,以及它的工作方式。读取计数器的当前值时, 应读 3 次。这样可以避免在第一次读完后,第二次读之前,由于低位溢出向高位进位时的 错误。 五、接线方案: 接线方案接线方案 1: 接线方案接线方案 2: 图 6 实验接线图 六、程序框图: 七、实验步骤: 用连线把“总线插孔”的 p3.4 孔连“脉冲源”的“down”孔 ,执行程序,按动 an 锁按钮,观察数码管上计数脉冲的个数。 八、思考问题: 把 p3.4 孔分别与“脉冲源”的 2mhz、1mhz、0.5mhz 孔
29、相连时,显示值反而比连 0.25mhz 孔更慢,为什么?当 fosc=6mhz 时,能够计数的脉冲信号最高频率为多少? 九、实验程序: ;对定时器 0 外部输入的脉冲信号进行计数且显示 outbit equ 0e101h clk164 equ 0e102h ; 段控制口(接 164 时钟位) dat164 equ 0e102h ; 段控制口(接 164 数据位) ledbuf equ 40h in equ 0e103h org 0000h mov sp,#60h mov dptr,#0e100h ;8155 初始化 mov a,#03h movx dptr,a mov tmod,#05h ;定
30、时器初始化 mov th0,#00h mov tl0,#00h 开 始 堆栈、定时/计数初始化 开定时器 取出 tl0/th0 内容转换 显 示 图 7 主程序流程图 0 送 r4r5r6,10hr7 0 送 cy r2r3 右移一位 2*(r4r5r6)+cy 送 r4r5r6 (r7-1)=0 结 束 图 8 二转十进制程序流程图 setb tr0 loop0: mov r2,th0 mov r3,tl0 lcall loop1 mov r0,#40h mov a,r6 lcall ptds mov a,r5 lcall ptds mov a,r4 lcall ptds lcall dis
31、play sjmp loop0 loop1: clr a ;二转十子程序 mov r4,a mov r5,a mov r6,a mov r7,#10h loop2: clr c mov a,r3 rlc a mov r3,a mov a,r2 rlc a mov r2,a mov a,r6 addc a,r6 da 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 djnz r7,loop2 ret ptds:mov r1,a ;拆字子程序 acall ptds1 mov a,r1 swap
32、 a ptds1: anl a,#0fh mov r0,a inc r0 ret delay: mov r7, #0 ; 延时子程序 delayloop: djnz r7, delayloop djnz r6, delayloop ret display:setb 0d3h mov r0, #ledbuf mov r1, #6 ; 共 6 个八段管 mov r2, #00000001b ; 从左边开始显示 loop: mov dptr, #outbit mov a, #00h movx dptr, a ; 关所有八段管 mov a, r0 mov dptr,#ledmap movc a,a+d
33、ptr mov b, #8 ; 送 164 dlp: rlc a mov r3, a mov acc.0, c anl a,#0fdh mov dptr, #dat164 movx dptr, a mov dptr, #clk164 orl a,#02h movx dptr, a anl a,#0fdh movx dptr, a mov a, r3 djnz b, dlp mov dptr, #outbit mov a, r2 movx dptr, a ; 显示一位八段管 mov r6, #1 call delay mov a, r2 ; 显示下一位 rl a mov r2, a inc r0
34、 djnz r1, loop mov dptr, #outbit mov a, #0 movx dptr, a ; 关所有八段管 clr 0d3h ret ledmap: ; 八段管显示码 db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h end 实验五实验五 a/da/d 转换实验转换实验 一、实验目的: 掌握 a/d 转换与单片机接口的方法;了解 a/d 芯片 0809 转换性能及编程方法。 二、实验内容: 利用综合实验仪上的 0809 做 a/d 转换器,综合实验仪上的电
35、位器提供模拟量输入, 编制程序,将模拟量转换成数字量,通过 8155 键显区数码管显示出来。 三、实验器材: 1、单片机综合实验仪 1 台 2、keil 仿真器 1 台 3、连线 若干根 4、计算机 1 台 四、实验原理: a/d 转换器的功能主要是将输入的模拟信号转换成数字信号,如电压、电流、温度测 量等都属于这种转换。本实验中采用的转换器为 adc0809,它是一个 8 位逐次逼近型 a/d 转换器,可以对 8 个模拟量进行转换,转换时间为 100s。其工作过程如下:首先由地址 锁存信号 ale 的上升沿将引脚 adda、addb 和 addc 上的信号锁存到地址寄存器内,用 以选择模拟量
36、输入通道;start 信号的下降沿启动 a/d 转换器开始工作;当转换结束时, ad0809 使 eoc 引脚由低电平变成高电平,程序可以通过查询的方式读取转换结果,也可 以通过中断方式读取结果。clock 为转换时钟输入端,频率为 100khz-1.2mhz,推荐值 为 640khz。 五、程序流程图: 六、实验步骤: 1、设定仿真模式为程序空间在仿真器上,数据空间在用户板上,即点击设置下的仿 真模式,在 ram 区选中用户 ram,rom 区选中系统 rom(注:本书中的实验除另行 说明外,均与此相同) 。把 ad0809 的零通道 09in0 孔用连线接至模拟信号发生器的 vin 孔,a
37、d0809 的片选信号 cs09 孔接“译码器”yc2(0a000-0afffh)孔, “脉冲源”中的 0.5mhz 孔连 ad0809 的 clock 孔。 2、编写程序,并编译通过。本程序使用查询的方式读取转换结果。在读取转换结果的 指令后设置断点,运行程序,在断点处检查并读出 a/d 转换结果,数据是否与 vin 相对应。 修改程序中错误,使显示值随 vin 变化而变化。 七、接线图案: 开 始0809 初始化 显示08090 通道采样 图 9 程序流程图 八、思考问题: 1、试编写循环采集 8 路模拟量输入 a/d 转换程序; 2、以十进制方式显示。 九、实验程序: outbit eq
38、u 0e101h ; 位控制口 clk164 equ 0e102h ; 段控制口(接 164 时钟位) dat164 equ 0e102h ; 段控制口(接 164 数据位) in equ 0e103h ; 键盘读入口 ledbuf equ 40h ; 显示缓冲 org 0000h mov sp,#60h mov dptr,#0e100h ;8155 初始化 mov a,#03h movx dptr,a mov 40h,#00h ;显示缓冲器初始化 mov 41h,#08h 图 10 实验接线图 mov 42h,#00h mov 43h,#09h mov 44h,#00h mov 45h,#0
39、0h loop1: mov r7,#40 vi: lcall display djnz r7,vi mov a,#00h mov dptr,#0a000h ;0809ad 的通道开始转换吗? movx dptr,a mov r7,#0fh loop2:djnz r7,loop2 movx a,dptr mov r0,#45h ;拆字 lcall ptds sjmp loop1 ptds: mov r1,a lcall ptds1 mov a,r1 swap a ptds1: anl a,#0fh mov r0,a dec r0 ret delay: mov r7, #0 ; 延时子程序 del
40、ayloop: djnz r7, delayloop djnz r6, delayloop ret display: setb 0d3h mov r0, #ledbuf mov r1, #6 ; 共 6 个八段管 mov r2, #00100000b ; 从左边开始显示 loop: mov dptr, #outbit mov a, #00h movx dptr, a ; 关所有八段管 mov a, r0 mov dptr,#ledmap movc a,a+dptr mov b, #8 ; 送 164 dlp: rlc a mov r3, a mov acc.0, c anl a,#0fdh m
41、ov dptr, #dat164 movx dptr, a mov dptr, #clk164 orl a,#02h movx dptr, a anl a,#0fdh movx dptr, a mov a, r3 djnz b, dlp mov dptr, #outbit mov a, r2 movx dptr, a ; 显示一位八段管 mov r6, #1 call delay mov a, r2 ; 显示下一位 rr a mov r2, a inc r0 djnz r1, loop mov dptr, #outbit mov a, #0 movx dptr, a clr 0d3h ; 关所
42、有八段管 ret ledmap: ; 八段管显示码 db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h end 实验六实验六 d/a0832d/a0832 转换实验转换实验 一、实验目的: 了解 d/a 转换与单片机的接口方法;了解 d/a 转换芯片 da0832 的性能及编程方法。 二、实验内容: 利用 0832 输出一个从 0v 开始逐渐升至 5v 再降至 0v 的三角波电压,数码管显示数 字量值。 三、实验器材: 1、单片机综合实验仪 1 台 2、keil 仿真器 1 台
43、3、连线 若干 根 4、计算机 1 台 四、接线图案: 五、程序框图: 图 11 实验接线图 六、实验原理: d/a 转换器的功能主要是将输入的数字量转换成模拟量输出,在语音合成等方面得到 了广泛的应用。本实验中采用的转换器为 dac0832,该芯片为电流输出型 8 位 d/a 转换 器,输入设有两级缓冲锁存器,因此可同时输出多路模拟量。本实验中采用单级缓冲连接 方式,用 0832 来产生三角波,具体线路如上图所示。vref 引脚的电压极性和大小决定了 输出电压的极性与幅度,单片机综合实验仪上的 da0832 的第 8 引脚(vref)的电压已接 为-5v,所以输出电压值的幅度为 0-5v。
44、七、实验步骤: 1、设定仿真模式为程序空间在仿真器上,数据空间在用户板上。把 da0832 的片选 cs32 孔接至 yc3(0b000h-0bfffh)孔。 2、编写程序、编译程序:用单步、断点、连续方式调试程序,排除软件错误。运行程 序,8155 键显区数码管上显示不断加大或减小的数字量,用万用表测量 d/a 输出孔 aout,应能测出不断加大或减小的电压值。 八、思考问题: 修改程序,使能产生锯齿波。 九、实验程序: outbit equ 0e101h ; 位控制口 clk164 equ 0e102h ; 段控制口(接 164 时钟位) dat164 equ 0e102h ; 段控制口(
45、接 164 数据位) in equ 0e103h ; 键盘读入口 ledbuf equ 40h ; 显示缓冲 n 0832 初始化 显 示 转换显示加 1 n 输入是否到 ff? 输入显示减 1 输入是否到 00? 图 12 实验接线图 org 0000h mov sp,#60h mov dptr,#0e100h ;8155 初始化 mov a,#03h movx dptr,a mov 40h,#00h ;显示缓冲区置值 mov 41h,#08h mov 42h,#03h mov 43h,#02h loop1:mov r5,#00h loop2:mov dptr,#0b000h ;0832da
46、 从小到大转换 mov a,r5 movx dptr,a mov r0,#45h mov 45h,a ;拆字后送显示缓冲区 acall ptds mov r6,#15h dir10: acall display ;调用显示子程序 djnz r6,dir10 inc r5 cjne r5,#00h,loop2 loop3: mov dptr,#0b000h ;0832da 从大到小转换 dec r5 mov a,r5 movx dptr,a mov r0,#45h acall ptds mov r6,#15h dir11: acall display djnz r6,dir11 cjne r5,
47、#00h,loop3 sjmp loop1 delay: mov r7, #00 mov r3,#00 ; 延时子程序 delayloop: djnz r3, delayloop djnz r7, delayloop djnz r6, delayloop ret display: setb 0d3h mov r0, #ledbuf mov r1, #6 ; 共 6 个八段管 mov r2, #00100000b ; 从左边开始显示 loop: mov dptr, #outbit mov a, #00h movx dptr, a ; 关所有八段管 mov a, r0 mov dptr,#ledm
48、ap movc a,a+dptr mov b, #8 ; 送 164 dlp: rlc a mov r3, a mov acc.0, c anl a,#0fdh mov dptr, #dat164 movx dptr, a mov dptr, #clk164 orl a,#03h movx dptr, a anl a,#0fdh movx dptr, a mov a, r3 djnz b, dlp mov dptr, #outbit mov a, r2 movx dptr, a ; 显示一位八段管 mov r6, #01 call delay mov a, r2 ; 显示下一位 rr a mo
49、v r2, a inc r0 djnz r1, loop mov dptr, #outbit mov a, #0 movx dptr, a ; 关所有八段管 clr 0d3h ret ledmap: ; 八段管显示码 db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h ptds:mov r1,a acall ptds1 mov a,r1 swap a ptds1:anl a,#0fh mov r0,a dec r0 ret delay1: mov r7,#03h sjmp del
50、ayloop end 实验七实验七 步进电机控制实验步进电机控制实验 一、实验目的: 了解步进电机工作原理,掌握用单片机的步进电机控制系统的硬件设计方法,熟悉步 进电机驱动程序的设计与调试,提高单片机应用系统设计和调试水平。 二、实验内容: 编写并调试出一个实验程序按下图所示控制步进电机旋转: 三、工作原理: 步进电机是工业过程控制及仪表中常用的控制元件之一,例如在机械装置中可以用丝 杠把角度变为直线位移,也可以用步进电机带螺旋电位器,调节电压或电流,从而实现对 执行机构的控制。步进电机可以直接接收数字信号,不必进行数模转换,用起来非常方便。 步进电机还具有快速启停、精确步进和定位等特点,因而
51、在数控机床、绘图仪、打印机以 及光学仪器中得到广泛的应用。 步进电机实际上是一个数字/角度转换器,三相步进电机的结构原理如图所示。从图中 可以看出,电机的定子上有六个等分磁极,a、a、b、b、c、c ,相邻的两个磁极 之间夹角为 60o,相对的两个磁极组成一相(a-a,b-b,c-c) ,当某一绕组有电流 通过时,该绕组相应的两个磁极形成 n 极和 s 极,每个磁极上各有五个均匀分布矩形小齿, 电机的转子上有 40 个矩形小齿均匀地分布的圆周上,相邻两个齿之间夹角为 9。 当某一相绕组通电时,对应的磁极就产生磁场,并与转子形成磁路,如果这时定子的 小齿和转子的小齿没有对齐,则在磁场的作用下,转
52、子将转动一定的角度,使转子和定子 的齿相互对齐。由此可见,错齿是促使步进电机旋转的原因。 例如在三相三拍控制方式中,若 a 相通电,b、c 相都不通电,在磁场作用下使转子 齿和 a 相的定子齿对齐,我们以此作为初始状态。设与 a 相磁极中心线对齐的转子的齿为 图 13 电机控制图 图 14 三相步进电机结构示意图 0 号齿,由于 b 相磁极与 a 相磁极相差 120,不是 9的整数倍(1209=40/3) ,所以此 时转子齿没有与 b 相定子的齿对应,只是第 13 号小齿靠近 b 相磁极的中心线,与中心线 相差 3,如果此时突然变为 b 相通电,a、c 相不通电,则 b 相磁极迫使 13 号转
53、子齿与 之对齐,转子就转动 3,这样使电机转了一步。如果按照 abc 的顺序轮流通电一周, 则转子将动 9。 步进电机的运转是由脉冲信号控制的,传统方法是采用数字逻辑电路环形脉冲分 配器控制步进电机的步进。 下图为环形脉搏冲分配器的简化框图。 1、运转方向控制。如图所示,步进电机以三相六拍方式工作,若按 aabbbcccaa 次序通电为正转,则当按 aacccbbbaa 次序 通电为反转。 2、运转速度的控制。图中可以看出,当改变 cp 脉冲的周期时,abc 三相绕组高低电 平的宽度将发生变化,这就导致通电和断电时速率发生了变化,使电机转速改变,所以调 节 cp 脉冲的周期就可以控制步进电机的
54、运转速度。 3、旋转的角度控制。因为每输入一个 cp 脉冲使步进电机三相绕组状态变化一次,并 相应地旋转一个角度,所以步进电机旋转的角度由输入的 cp 脉冲数确定。 单片机实验仪选用的是 20by-0 型 4 相步进电机,其工作电压为 4.5v,在双四拍运行方 式时,其步距角为 18o ,相直流电阻为 55,最大静电流为 80ma。采用 8031 单片机控制步进 电机的运转,按四相四拍方式在 p1 口输出控制代码,令其正转或反转。因此 p1 口输出代 码的变化周期 t 控制了电机的运转速度:n=60/t.n 式中:n 步进电机的转速(转/分) ; n 步进电机旋转一周需输出的字节数; t 代码
55、字节的输出变化周期。 设 n=360/ 18=20,t=1.43ms,则步进电机的转速为 2100 转/分。 控制 p1 口输出的代码字节个数即控制了步进电机的旋转角度。 正方向: a b c d 反方向: a d c b 四、接线图案: 图 15 三相六拍环形脉搏冲分配器示意图 根据步进电机工作原理,使用 8031 的 p1.0-p1.3 分别驱动步进电机 a、b、c、d 相, 用软件控制 p1 口输出一脉冲序列,控制步进电机转速、方向、步距。同时为能观察步进 电机旋转状态,在 a、b、c、d 相输出到状态指示灯。 五、实验步骤: 1、 “总线插孔”区的 p1.0-p1.3 孔接步进电机的
56、ba-bd 孔, “发光二极管组”的 l0-l3 孔 接步进电机 a、b、c、d 孔 。p1.7 孔连 l7。 2、编写程序、编译程序。用单步、全速断点、连续方式调试程序,观察数码管上数字 变化,检查程序运行结果,观察步进电机的转动状态,连续运行时用示波器测试 p1 口的 输出波形,排除软件错误,直至达到本实验的设计要求。 六、程序框图: 图 16 实验接线图 y (r7)- 1=0? n y (42) r6 (r6)- 1=0? n 调用延时 1ms 子程序 调用步进电机子程序 开 始 清状态寄存器 置正转 a 相通电 (r7)- 1=0? 步计数器 r7 置 100 步 延时计数器 42h
57、 置 200 n y (42) r6 (32h)-132h (r6)- 1=0? n y 调用延时 1ms 子程序 调用步进电机子程序 步计数器 r7 置 100 步 (r7)- 1=0? 步计数器 r7 置 100 步 n y (42) r6 (r6)- 1=0? n y 调用延时 1ms 子程序 调用步进电机子程序 (42h)+1 42h 步步 图 17 进电机控制主程序框图 七、思考问题: 若将步进电机 a、b、c、d 相分别接到 p1.4 - p1.7,软件功能与本实验要求一致,需 要修改那几处程序? 八、实验程序: org 0000h strt: mov sp,#6fh ;初始化 m
58、ov 20h,#0 ;状态寄存器清零 mov p1,#0f1h ;正转 a 相通电 mlp: mov r7,#64h ;r7 为步计数器,正转 100 步 mov 42h,#0c8h ;42h 为延时计数器 mlp0: mov r6,42h ;调用延时 200ms 子程序 mlp9: lcall del djnz r6,mlp9 dec 42h lcall steps ;调用步进子程序 n y 开 始 040h (40h)+140h (20h)p1 口 (a)03 (20h)03 根据(40h)查 ctaba根据(40h)查 ftab a (40h) 3 正转? 返回 图 18 正反转步进子程
59、序框图 djnz r7,mlp0 ;以上为加速程序 mov r7,#64h ;以下为恒速程序 mlp1: mov r6,42h mlpx: lcall del djnz r6,mlpx lcall steps djnz r7,mlp1 mov r7,#64h ;以下为减速程序 mlp2: mov r6,42h mlpy: lcall del djnz r6,mlpy lcall steps inc 42h djnz r7,mlp2 cpl 7 ljmp mlp steps:inc 20h ;正反转步进子程序 anl 20h,#83h mov a,20h anl a,#3 jb 7,stpsc
60、mov dptr,#ftab sjmp stpw stpsc:mov dptr,#ctab stpw: movc a,a+dptr mov p1,a ret ftab: db 0f3h,0f6h,0fch,0f9h ctab: db 79h,7ch,76h,73h del: mov r5,#0 ;延时子程序 del0: djnz r5,del0 ret end ; “验证式” 实验七* * 步进电控制机 org 0000h strt: mov sp,#6fh ;初始化 mov 20h,#0 ;状态寄存器清零 mov p1,#0f1h ;正转 a 相通电 mlp: mov r7,#64h ;r7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年大理申请客运从业资格证版试题
- 2025届新疆昌吉回族自治州九中高三语文第一学期期末质量检测模拟试题含解析
- 2025届陕西省西安市618中学高一上数学期末教学质量检测试题含解析
- 2025届浙江省武义三中高三数学第一学期期末检测模拟试题含解析
- 2025届四川省广元天立学校生物高一第一学期期末达标测试试题含解析
- 2025届陕西省宝鸡市金台区生物高一上期末学业质量监测模拟试题含解析
- 2025届江苏省苏州市高二生物第一学期期末达标检测试题含解析
- 贵州省长顺县民族高级中学2025届生物高一上期末综合测试模拟试题含解析
- 江西省玉山县樟村中学2025届高三语文第一学期期末联考试题含解析
- 福建省师范大学附中2025届数学高二上期末检测模拟试题含解析
- GB/T 12325-2008电能质量供电电压偏差
- GB/T 12220-1989通用阀门标志
- 初级插花理论知识考核试题及答案
- 河南省洛阳市《综合能力测试》事业单位国考真题
- 法医物证学第十二章血痕检验1
- 智慧消防整体解决方案消防大数据一体化管理平台解课件
- 国家自然科学基金申请经验汇总课件
- 社会实践鉴定表
- 2022版义务教育(化学)课程标准(含2022年修订部分)
- 公司吸烟管理规定范文
- 消毒记录表(简单模板)
评论
0/150
提交评论