单片机实验程序_第1页
单片机实验程序_第2页
单片机实验程序_第3页
单片机实验程序_第4页
单片机实验程序_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一 1修改例程一的源程序(1)将A寄存器的初值改为80H(正逻辑,数据位为1表示发光二极管点亮),再对源程序进行简单修改,使程序运行后发光二极管情况与修改前相同。(2)将LED向左循环移位点亮改为向右循环移位点亮(3)加快LED循环移位点亮的速度$include (C8051F020.inc);C8051F02x系列单片机信息头文件包含伪指令INIT:LCALL Init_Device调用初始设置子程序 (1)MOV A,#080H ;赋初始值并在发光二极管上显示该数值CPL AMOV P3,ALOOP:CALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAY(2)RL A;A寄存器内容右移1位并送1发光二极管显示MOV P3,AAJMP LOOP;无限循环DELAY: MOVR5,#0H;延时子程序D1:MOVR6,#00HDJNZR6,$DJNZR5,D1RET$include (Init_Device.inc);初始设置子程序文件包含伪指令 END(3)可删除几个 CALL DELAY语句即可加快循环速度2将例程二0F的循环显示改为09的循环显示$include (C8051F020.inc);C8051F02x系列单片机信息头文件包含伪指令 ORG 0000H LJMP INITTAB:DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H;字符段码表0-7DB080H,090H;字符段码表8-FINIT:lcall Init_Device;调用初始设置子程序INIT1: MOV R1,#00H;操作数据初始值 MOV A,R1MAIN: MOV DPTR,#TAB;读取与A中数值对应的显示段码MOVC A,A+DPTRMOV P5,A;段码送并行口1显示CALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYCALL DELAYINC R1 ;操作数据(R1)增1MOV A,R1CJNE A,#0AH,MAIN;检查操作数据是否大于显示范围(F)SJMP INIT1;无限循环DELAY: MOVR5,#0H ;延时子程序D1:MOVR6,#0HDJNZR6,$DJNZR5,D1RET$include (Init_Device.inc);初始设置子程序文件包含伪指令END二1. 例程5程序修改(1) 将KEY2、KEY4的功能对调(2) 每次停下再启动以后,更改发光二极管点亮的循环方向$include (C8051F020.inc) ;C8051F02x系列单片机信息头文件包含伪指令 ORG0000H LJMPINITIAL ;主程序入口 ORG0003H LJMPSTOP ;外中断0服务程序入口,开始键(STAR) ORG0013H LJMP STAR ;外中断1服务程序入口 停止键(STOP) ORG0100HINITIAL:LCALL Init_Device ;调用初始设置子程序MOV P3,#0FFH ;熄灭全部发光二极管MOV A,#0FFHMOV DPTR,#7F80HMOVX DPTR,A ;清除数码管2(NUM2)显示MOV A,#0FEH ;点亮发光二极管的初始数据MOV R1,#1H ;发光二极管点亮位置初值MOV R4,#0FHMOVIP,#04H ;设置INT0(开始键STAR)为高优先级MOVTCON,#05H ;外中断采用边沿触发SETB EX0 ;INT1(停止键STOP)开中断SETB EA ;开放中断LOOP: CLR EA;关闭中断CJNE R4, #0FH, LPRL A CJNE R4,#0FH,LPMOV P3,A CJNE R4,#0FH,LPINC R1 CJNE R4,#0FH,LP SETB EALCALL DELAY1LCALL DELAY1LCALL DELAY1LCALL DELAY1CJNE R1,#8H,LOOPMOV R1,#0HSJMP LOOPLP: CLR EA CJNE R4,#0F0H,LOOPRR A CJNE R4,#0F0H,LOOP MOV P3,ACJNE R4,#0F0H,LOOPDEC R1CJNE R4,#0F0H,LOOPSETB EALCALL DELAY1LCALL DELAY1LCALL DELAY1LCALL DELAY1CJNE R1,#0H,LPMOV R1,#8HSJMP LP;停止键的中断服务程序STOP:PUSH ACC ;保护A寄存器内容 MOV A,R1 ;读取发光二极管点亮位置计数值MOV DPTR,#TABMOVC A,A+DPTR ;获取发光二极管点亮位置计数值的显示段码 MOV DPTR,#7F80HMOVX DPTR,A ;发光二极管点亮位置计数值的显示数据送显示SETB EX1 ;INT0(启动键STAR)开中断JNZ $ ;等待重新启动条件-A=0MOV A,#0FFHMOVX DPTR,A ;清除数码管2(NUM2)显示 CLR EX1 ;禁止INT0中断(避免程序误动作) POP ACC ;恢复A寄存器内容 CLR IE1;清除INT1(停止键STOP)中断标志(避免程序误动作) RETI ;中断返回 ;启动键的中断服务程序STAR: MOV A,#00H;设置启动条件-A=0 CLRIE0;清除INT0(启动键STOP)中断标志(避免程序误动作) PUSH ACC MOV A,R4 CPL A MOV R4,A POP ACC RETI;中断返回TAB: DB0C0H,0F9H,0A4H,0B0H,099H ;0-4段码 DB092H,082H,0F8H,080H ;5-8段码DELAY1: MOVR6,#0;延时子程序D1: MOV R7,#0 DJNZ R7,$ 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,#B ;C/T0工作于方式2 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,#0MOV A,#0 INC DP_HMOV A,DP_HCJNE A,#0AH,MM MOV DP_H,#0MM: MOV A,#0L1: MOV DP_L,A ;在NUM2显示计数器0的计数值 CALL DISPLAY ;调用显示子程序显示计数值 SJMP LOOP ;无限次循环 ;显示子程序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-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系列单片机信息头文件包含伪指令NUM2EQU07F80H;NUM2地址NUM3EQU07F90H;NUM3地址NUM4EQU07FA0H;NUM4地址NUM5EQU07FB0H;NUM5地址TIM_LEQU 0FDH;T/C1低字节计数值TIM_HEQU 0FDH ;T/C1高字节计数值REC_BUF0EQU32H;数据接收缓冲器0REC_BUF1EQU34H;数据接收缓冲器1REC_BUF2EQU33H;数据接收缓冲器2FLAGBIT 01H;数据发送完成标志ORG 0000HLJMP MAIN ;转主程序ORG 0023HLJMP RECE ;转串行通信中断程序;主程序MAIN: lcall Init_Device;C8051F02x系列单片机信息头文件包含伪指令MOVA,#0FFHMOVP5,AMOVDPTR,#NUM2MOVXDPTR,A;清除数码管NUM1的显示MOVDPTR,#NUM3MOVXDPTR,A;清除数码管NUM2的显示MOVDPTR,#NUM4MOVXDPTR,A;清除数码管NUM3的显示MOVDPTR,#NUM5MOVXDPTR,A;清除数码管NUM4的显示MOVR6,#0;通信操作状态寄存器清除MOVSP,#40H ;堆栈栈底设置MOV TMOD,#B ;T/C1方式2 MOV TH1,#TIM_H ;T/C1重装填值 MOV TL1,#TIM_L ;T/C1计数值 SETB TR1 ;启动T/C1 MOV SCON0,#B ;串口方式1 SETB ES ;串口中断允许 SETB EA ;开中断;主循环LOOP:CALLKEYBOARD ;调用案件状态分析子程序CJNEA,#0FFH,L0;按键状态发生变化转L0CLRFLAG;按键状态无变化,清除发送完成标志SJMPLOOP L0:JBFLAG,LOOP;数据发送完成,返回主循环MOVR7,A;否则,键值暂存R7MOVA,#043H;CMOVSBUF0,A;发送字符C的ASCII码值CALLDELAYMOVA,#04FH;OMOVSBUF0,A;发送字符O的ASCII码值CALLDELAYMOVA,#04DH;MMOVSBUF0,A;发送字符M的ASCII码值CALLDELAYMOVA,#04BH;KMOVSBUF0,A;发送字符K的ASCII码值CALLDELAYMOVA,#40H;发送数字0的ASCII码值MOVSBUF0,ACALLDELAYMOVA,R7ADDA,#40H;生成键值的ASCII码值MOVSBUF0,A;发送键值的ASCII码值SETBFLAG;置位发送完成标志SJMPLOOP ;中断服务程序RECE: JNBTI,REC1;非发送转接收处理CLRTI ;否则,清除发送中断标志RETI ;中断返回REC1: PUSH ACC ;保护累加器AMOVA,SBUF0 ;读接收缓冲器 CJNER6,#0,REC2CJNEA,#43H,REC6;接收状态为0,进行字符C的过滤处理MOVR6,#1;接收状态改为1SJMPREC6REC2:CJNER6,#1,REC3CJNEA,#4FH,REC5;接收状态为1,进行字符O的过滤处理MOVR6,#2;接收状态改为2SJMPREC6REC3:CJNER6,#2,REC4CJNEA,#4DH,REC5;接收状态为2,进行字符M的过滤处理MOVR6,#3;接收状态改为3MOVR5,#3;数据接收计数器设置为3SJMPREC6REC4:CJNER6,#3,REC6PUSHACC;接收状态为3,暂存接收的内容MOVA,#REC_BUF0ADDA,R5MOVR0,A;生成接收数据存放缓冲器地址POPACC;恢复接收数据至A寄存器MOVR0,A;保存接收的数据DECR5;接收数据计数器减1CJNER5,#0,REC6CALLDISPLAY;接收数据计数器减为0,进行接收结果的显示REC5:MOVR6,#0;接收状态恢复为0(就绪状态)REC6:POP ACC ;恢复累加器A CLRRI;清除接收中断标志RETI ;中断返回 KEYBOARD:MOVA,P2;读按键状态输入端口RRARRARRCA;KEY1有效键值移入位累加器CJCK1;键值无效转KEY2键值的分析MOVA,#1;否则,KEY1代码送A寄存器SJMPK5K1:RRCA;KEY2有效键值移入位累加器CJCK2;键值无效转KEY3键值的分析MOVA,#2;否则,KEY2代码送A寄存器SJMPK5K2:RRCA;KEY3有效键值移入位累加器CJCK3;键值无效转KEY4键值的分析MOVA,#3;否则,KEY3代码送A寄存器SJMP K5K3:RRCA;KEY4有效键值移入位累加器CJCK4;键值无效转按键无效处理MOVA,#4 ;否则,KEY4代码送A寄存器SJMPK5K4:MOVA,#0FFH;按键无效代码送A寄存器K5:RETDISPLAY:MOVA,REC_BUF2;读取接收的第2字节数据SWAPA;高、低4位交换ANLA,#0FH;分离高4位有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论