ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:20KB ,
资源ID:8423380      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8423380.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机实验程序.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机实验程序.docx

1、单片机实验程序一 1修改例程一的源程序(1)将A寄存器的初值改为80H(正逻辑,数据位为1表示发光二极管点亮),再对源程序进行简单修改,使程序运行后发光二极管情况与修改前相同。(2)将LED向左循环移位点亮改为向右循环移位点亮(3)加快LED循环移位点亮的速度$include (C8051F020.inc) ;C8051F02x系列单片机信息头文件包含伪指令 INIT: LCALL Init_Device 调用初始设置子程序 (1)MOV A,#080H ;赋初始值并在发光二极管上显示该数值 CPL A MOV P3,ALOOP: CALL DELAY CALL DELAY CALL DELA

2、Y CALL DELAY CALL DELAY CALL DELAY CALL DELAY (2) RL A ;A寄存器内容右移1位并送1发光二极管显示 MOV P3,A AJMP LOOP ;无限循环 DELAY: MOV R5,#0H ;延时子程序D1: MOV R6,#00H DJNZ R6,$ DJNZ R5,D1 RET$include (Init_Device.inc);初始设置子程序文件包含伪指令 END(3)可删除几个 CALL DELAY语句即可加快循环速度2将例程二0F的循环显示改为09的循环显示$include (C8051F020.inc) ;C8051F02x系列单片

3、机信息头文件包含伪指令 ORG 0000H LJMP INITTAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H ;字符段码表0-7 DB 080H,090H ;字符段码表8-F INIT: lcall Init_Device ;调用初始设置子程序INIT1: MOV R1,#00H ;操作数据初始值 MOV A,R1 MAIN: MOV DPTR,#TAB ;读取与A中数值对应的显示段码 MOVC A,A+DPTR MOV P5,A ;段码送并行口1显示 CALL DELAY CALL DELAY CALL DELAY CALL DELAY CAL

4、L DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY INC R1 ;操作数据(R1)增1 MOV A,R1 CJNE A,#0AH,MAIN;检查操作数据是否大于显示范围(F) SJMP INIT1 ;无限循环 DELAY: MOV R5,#0H ;延时子程序D1: MOV R6,#0H DJNZ R6,$ DJNZ R5,D1 RET$include (Init_Device.inc) ;初始设置子程序文件包含伪指令 END二1.

5、例程5程序修改(1) 将KEY2、KEY4的功能对调(2) 每次停下再启动以后,更改发光二极管点亮的循环方向$include (C8051F020.inc) ;C8051F02x系列单片机信息头文件包含伪指令 ORG 0000H LJMP INITIAL ;主程序入口 ORG 0003H LJMP STOP ;外中断0服务程序入口,开始键(STAR) ORG 0013H LJMP STAR ;外中断1服务程序入口 停止键(STOP) ORG 0100HINITIAL: LCALL Init_Device ;调用初始设置子程序 MOV P3,#0FFH ;熄灭全部发光二极管 MOV A,#0FF

6、H MOV DPTR,#7F80H MOVX DPTR,A ;清除数码管2(NUM2)显示 MOV A,#0FEH ;点亮发光二极管的初始数据 MOV R1,#1H ;发光二极管点亮位置初值 MOV R4,#0FH MOV IP,#04H ;设置INT0(开始键STAR)为高优先级 MOV TCON,#05H ;外中断采用边沿触发 SETB EX0 ;INT1(停止键STOP)开中断 SETB EA ;开放中断 LOOP: CLR EA ;关闭中断 CJNE R4, #0FH, LP RL A CJNE R4,#0FH,LP MOV P3,A CJNE R4,#0FH,LP INC R1 CJ

7、NE R4,#0FH,LP SETB EA LCALL DELAY1 LCALL DELAY1 LCALL DELAY1 LCALL DELAY1 CJNE R1,#8H,LOOP MOV R1,#0H SJMP LOOPLP: CLR EA CJNE R4,#0F0H,LOOP RR A CJNE R4,#0F0H,LOOP MOV P3,A CJNE R4,#0F0H,LOOP DEC R1 CJNE R4,#0F0H,LOOP SETB EA LCALL DELAY1 LCALL DELAY1 LCALL DELAY1 LCALL DELAY1 CJNE R1,#0H,LP MOV R1

8、,#8H SJMP LP ;停止键的中断服务程序STOP: PUSH ACC ;保护A寄存器内容 MOV A,R1 ;读取发光二极管点亮位置计数值 MOV DPTR,#TAB MOVC A,A+DPTR ;获取发光二极管点亮位置计数值的显示段码 MOV DPTR,#7F80H MOVX DPTR,A ;发光二极管点亮位置计数值的显示数据送显示 SETB EX1 ;INT0(启动键STAR)开中断 JNZ $ ;等待重新启动条件-A=0 MOV A,#0FFH MOVX DPTR,A ;清除数码管2(NUM2)显示 CLR EX1 ;禁止INT0中断(避免程序误动作) POP ACC ;恢复A寄

9、存器内容 CLR IE1;清除INT1(停止键STOP)中断标志(避免程序误动作) RETI ;中断返回 ;启动键的中断服务程序STAR: MOV A,#00H ;设置启动条件-A=0 CLR IE0 ;清除INT0(启动键STOP)中断标志(避免程序误动作) PUSH ACC MOV A,R4 CPL A MOV R4,A POP ACC RETI ;中断返回TAB: DB 0C0H,0F9H,0A4H,0B0H,099H ;0-4段码 DB 092H,082H,0F8H,080H ;5-8段码 DELAY1: MOV R6,#0 ;延时子程序D1: MOV R7,#0 DJNZ R7,$

10、DJNZ R6,D1 RET$include (Init_Device.inc) ;初始设置子程序文件包含伪指令 END2. 修改例程6,将计数范围由0-F扩展至00-FF(使用定时器/计时器0),并在2位数码管上用10进制数显示计数结果(00-99)$include (C8051F020.inc) ;C8051F02x系列单片机信息头文件包含伪指令DP2 EQU 07F80H DP_L EQU 30H ;低位数值暂存器DP_H EQU 31H ;高位数值暂存器 MAIN: LCALL Init_Device ;调用初始设置子程序 MOV TMOD,#00000101B ;C/T0工作于方式2

11、 MOV A,#0 ;显示初值为0 MOV DP_L,A MOV DP_H,A CALL DISPLAY ;调用显示子程序显示初值0 MOV TL0,#0 ;C/T0置初值0 SETB TR0 ;启动计数器0 LOOP: MOV A,TL0 ;读计数器0的计数值 CJNE A,#0AH,L1 MOV TL0,#0 MOV A,#0 INC DP_H MOV A,DP_H CJNE A,#0AH,MM MOV DP_H,#0 MM: MOV A,#0L1: MOV DP_L,A ;在NUM2显示计数器0的计数值 CALL DISPLAY ;调用显示子程序显示计数值 SJMP LOOP ;无限次循

12、环 ;显示子程序DISPLAY: MOV A,DP_L ;读低位显示值 CALL DECODE ;调用换码子程序 MOV DPTR,#DP2 ;显示段码送NUM2 MOVX DPTR,A MOV A,DP_H ;读高位显示值 CALL DECODE ;调用换码子程序 MOV P5,A RET ;换码子程序 DECODE: MOV DPTR,#TAB MOVC A,A+DPTR RETTAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H ;显示段码0-7 DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH ;显示段码8-

13、F$include (Init_Device.inc) ;初始设置子程序文件包含伪指令 END 三通过对例程8的程序进行修改和上机调试,改变源程序的 功能(1) 将发送1、2、3、4的ASCII码改为发送A、B、C、D的ASCII码(2) 将接收的第2、第3字节数据的显示位置交换$include (C8051F020.inc) ;C8051F02x系列单片机信息头文件包含伪指令NUM2 EQU 07F80H ;NUM2地址NUM3 EQU 07F90H ;NUM3地址NUM4 EQU 07FA0H ;NUM4地址NUM5 EQU 07FB0H ;NUM5地址TIM_L EQU 0FDH ;T/

14、C1低字节计数值TIM_H EQU 0FDH ;T/C1高字节计数值 REC_BUF0 EQU 32H ;数据接收缓冲器0REC_BUF1 EQU 34H ;数据接收缓冲器1REC_BUF2 EQU 33H ;数据接收缓冲器2FLAG BIT 01H ;数据发送完成标志 ORG 0000H LJMP MAIN ;转主程序 ORG 0023H LJMP RECE ;转串行通信中断程序 ;主程序MAIN: lcall Init_Device ;C8051F02x系列单片机信息头文件包含伪指令 MOV A,#0FFH MOV P5,A MOV DPTR,#NUM2 MOVX DPTR,A ;清除数码

15、管NUM1的显示 MOV DPTR,#NUM3 MOVX DPTR,A ;清除数码管NUM2的显示 MOV DPTR,#NUM4 MOVX DPTR,A ;清除数码管NUM3的显示 MOV DPTR,#NUM5 MOVX DPTR,A ;清除数码管NUM4的显示 MOV R6,#0 ;通信操作状态寄存器清除 MOV SP,#40H ;堆栈栈底设置 MOV TMOD,#00100000B ;T/C1方式2 MOV TH1,#TIM_H ;T/C1重装填值 MOV TL1,#TIM_L ;T/C1计数值 SETB TR1 ;启动T/C1 MOV SCON0,#01010000B ;串口方式1 SE

16、TB ES ;串口中断允许 SETB EA ;开中断 ;主循环LOOP: CALL KEYBOARD ;调用案件状态分析子程序 CJNE A,#0FFH,L0 ;按键状态发生变化转L0 CLR FLAG ;按键状态无变化,清除发送完成标志 SJMP LOOP L0: JB FLAG,LOOP ;数据发送完成,返回主循环 MOV R7,A ;否则,键值暂存R7 MOV A,#043H ;C MOV SBUF0,A ;发送字符C的ASCII码值 CALL DELAY MOV A,#04FH ;O MOV SBUF0,A ;发送字符O的ASCII码值 CALL DELAY MOV A,#04DH ;

17、M MOV SBUF0,A ;发送字符M的ASCII码值 CALL DELAY MOV A,#04BH ;K MOV SBUF0,A ;发送字符K的ASCII码值 CALL DELAY MOV A,#40H ;发送数字0的ASCII码值 MOV SBUF0,A CALL DELAY MOV A,R7 ADD A,#40H ;生成键值的ASCII码值 MOV SBUF0,A ;发送键值的ASCII码值 SETB FLAG ;置位发送完成标志 SJMP LOOP ;中断服务程序RECE: JNB TI,REC1 ;非发送转接收处理 CLR TI ;否则,清除发送中断标志 RETI ;中断返回 RE

18、C1: PUSH ACC ;保护累加器A MOV A,SBUF0 ;读接收缓冲器 CJNE R6,#0,REC2 CJNE A,#43H,REC6 ;接收状态为0,进行字符C的过滤处理 MOV R6,#1 ;接收状态改为1 SJMP REC6REC2: CJNE R6,#1,REC3 CJNE A,#4FH,REC5 ;接收状态为1,进行字符O的过滤处理 MOV R6,#2 ;接收状态改为2 SJMP REC6REC3: CJNE R6,#2,REC4 CJNE A,#4DH,REC5 ;接收状态为2,进行字符M的过滤处理 MOV R6,#3 ;接收状态改为3 MOV R5,#3 ;数据接收计

19、数器设置为3 SJMP REC6REC4: CJNE R6,#3,REC6 PUSH ACC ;接收状态为3,暂存接收的内容 MOV A,#REC_BUF0 ADD A,R5 MOV R0,A ;生成接收数据存放缓冲器地址 POP ACC ;恢复接收数据至A寄存器 MOV R0,A ;保存接收的数据 DEC R5 ;接收数据计数器减1 CJNE R5,#0,REC6 CALL DISPLAY ;接收数据计数器减为0,进行接收结果的显示REC5: MOV R6,#0 ;接收状态恢复为0(就绪状态)REC6: POP ACC ;恢复累加器A CLR RI ;清除接收中断标志 RETI ;中断返回

20、KEYBOARD: MOV A,P2 ;读按键状态输入端口 RR A RR A RRC A ;KEY1有效键值移入位累加器C JC K1 ;键值无效转KEY2键值的分析 MOV A,#1 ;否则,KEY1代码送A寄存器 SJMP K5 K1: RRC A ;KEY2有效键值移入位累加器C JC K2 ;键值无效转KEY3键值的分析 MOV A,#2 ;否则,KEY2代码送A寄存器 SJMP K5K2: RRC A ;KEY3有效键值移入位累加器C JC K3 ;键值无效转KEY4键值的分析 MOV A,#3 ;否则,KEY3代码送A寄存器 SJMP K5 K3: RRC A ;KEY4有效键值

21、移入位累加器C JC K4 ;键值无效转按键无效处理 MOV A,#4 ;否则,KEY4代码送A寄存器 SJMP K5K4: MOV A,#0FFH ;按键无效代码送A寄存器K5: RET DISPLAY: MOV A,REC_BUF2 ;读取接收的第2字节数据 SWAP A ;高、低4位交换 ANL A,#0FH ;分离高4位有效数值 CALL DECODE ;换码 MOV DPTR,#NUM2 MOVX DPTR,A ;在数码管NUM2显示第2字节数据高4位数值 MOV A,REC_BUF2 ;读取接收的第2字节数据 ANL A,#0FH ;提取低4位有效数值 CALL DECODE ;换

22、码 MOV DPTR,#NUM3 MOVX DPTR,A ;在数码管NUM3显示第2字节数据低4位数值 MOV A,REC_BUF1 ;读取接收的第3字节数据 SWAP A ;高、低4位交换 ANL A,#0FH ;分离高4位有效数值 CALL DECODE ;换码 MOV DPTR,#NUM4 MOVX DPTR,A ;在数码管NUM4显示第3字节数据高4位数值 MOV A,REC_BUF1 ;读取接收的第3字节数据 ANL A,#0FH ;提取低4位有效数值 CALL DECODE ;换码 MOV DPTR,#NUM5 MOVX DPTR,A ;在数码管NUM5显示第3字节数据低4位数值 RET ;- DECODE PROGRAM - DECODE: MOV DPTR,#TAB MOVC A,A+DPTR RET ;- DELAY PROGRAM -DELAY: MOV R5,#80HD1: MOV R6,#0H DJNZ R6,$ DJNZ R5,D1 RETTAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH$include (Init_Device.inc) ;初始设置子程序文件包含伪指令 END

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1