9-21 新概念单片机程序练习.doc_第1页
9-21 新概念单片机程序练习.doc_第2页
9-21 新概念单片机程序练习.doc_第3页
9-21 新概念单片机程序练习.doc_第4页
9-21 新概念单片机程序练习.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

新概念单片机程序练习:按键的抖动与防抖实验A-0:显示按键的次数(在P1.0用短路线替代按键,没有防抖) ORG 8000H ; 实验板开始执行的第一条指令所处的地址LJMP MAIN ; 跳转到主程序ORG 800BH ; 定时器0中断入口地址LJMP TINT0 ; 跳转到定时器0中断服务子程序 ORG 8100H ; 主程序开始的地址;避开中断入口地址MAIN:MOV SP, #0D0H ; 设置堆栈起始地址 LCALL INI_8288 ; 初始化CPU,注意用不同的子程序完成一定的功 ; 能,这是模块化 LCALL CLR_IN_RAM ; 清除内部RAMLCALL INI_CPU ; 编程技术之一,方便程序的开发、管理和维护;=L1: JNB F0, L2 ; F0为PSW中用户标志,在中断中置1表示中 ; 断过。在此用于显示与中断同步 CLR F0 ; 一次中断显示一位 LCALL LED ; 调LED子程序 LJMP L1;- L2: JB P1.0, L1 ; 无键按下则跳转L1 INC 70H ; 有键按下,70H加1计数 MOV A, 70H ; 将16进制数转换成BCD码 MOV B, #100 DIV AB MOV 52H, A MOV A, B MOV B, #10 DIV AB MOV 51H, A MOV 50H, B MOV 53H, #19 MOV 54H, #19 MOV 55H, #19 MOV 56H, #19 MOV 57H, #19 LJMP L2;- INI_8288: MOV P2, #58H ; 使89C52P2指向8255PA的控制寄存器接口结 ; 构,89C52P0口地址应与低8位无关 MOV A, #82H ; 8255A的控制字(82H),8255PC口输出PB口输 ; 入,PA口输出 MOVX R0, A ; 送8255A控制字 RET ;=INI_CPU: MOV R7, #0FEH ; 显示位指针,从第一位开始显示 MOV 50H, #16 ; 50H开始为显示缓冲区 MOV 51H, #16 MOV 52H, #16 MOV 53H, #0 MOV 54H, #17 MOV 55H, #17 MOV 56H, #0EH MOV 57H, #18;- MOV R0, #50H ; 显示缓冲区指针 MOV 70H, #0;- SETB ET0 ; T0开中断SETB EA ; CPU开中断 ORL TMOD, #01H ; 设置定时器0工作在模式1 MOV TH0, #0FCH ; 设定定时器初值,定时时间为4ms。赋TH0初MOV TL0, #67H ; 值为#0FCH,赋TL0初值为#67H SETB TR0 ; 启动T0 RET;=CLR_IN_RAM: MOV R0, #0CFHCLR_IN_RAM1: MOV R0, #0 DJNZ R0, CLR_IN_RAM1 RET;=TINT0: MOV TL0, #67H ; 重赋定时器初值,先赋低位字节更精确 MOV TH0, #0FEH PUSH PSW ; 保护现场 PUSH ACC ; 可以加入其他需要定时操作的程序RETURN: POP ACC ; 恢复现场 POP PSW ; SETB F0 ; 设置用户标志以表示中断过一次,不能在POP RETI ; PSW指令前设置 ;=LED: MOV P2, #50H ; 送位选码入PC口 MOV A, R7 MOVX R0, A RL A ; 指向下一显示位 MOV R7, A ; 保存显示位指针; MOV A, R0 ; 读出待显示值LED1: MOV DPTR, #TAB ; 指向显示码查表区 MOVC A, A+DPTR ; 得到显示码 MOV P2, #40H ; 指向PA口输出七段显示码 MOVX R0, A INC R0 ; 修改显示缓冲区指针 ANL 00H, #57H ; 比较指针 ; 保证显示缓冲区指针在50H57H的范围内; RET ;=七段显示码的表格 TAB: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H ;0F的显示码 DB 80H, 90H, 88H, 83H, 0C6H, 0A1H, 86H, 8EH DB 0BFH, 0C7H, 89H, 0FFH ; ,L,HEND实验A-1:显示按键的次数(在P1.0用短路线替代按键,具有延时防抖) ORG 8000H ; 实验板开始执行的第一条指令所处的地址 LJMP MAIN ; 跳转到主程序 ORG 800BH ; 定时器0中断入口地址 LJMP TINT0 ; 跳转到定时器0中断服务子程序 ORG 8100H ; 主程序开始的地址;避开中断入口地址MAIN: MOV SP, #0D0H ; 设置堆栈起始地址 LCALL INI_8288 ; 初始化CPU,注意用不同的子程序完成一定的功 ; 能,这是模块化 LCALL CLR_IN_RAM ; 清除内部RAM LCALL INI_CPU ; 编程技术之一,方便程序的开发、管理和维护;=L1: JNB F0, L2 ; F0为PSW中用户标志,在中断中置1表示中 ; 断过。在此用于显示与中断同步 CLR F0 ; 一次中断显示一位 LCALL LED ; 调LED子程序 LJMP L1;- L2: JB P1.0, L1 ; 无键按下则跳转L1;- MOV 6EH, #100L3: DJNZ 6FH, $ DJNZ 6EH, L3 JNB P1.0, L3 ;- INC 70H ; 有键按下,70H加1计数 MOV A, 70H ; 将16进制数转换成BCD码 MOV B, #100 DIV AB MOV 52H, A MOV A, B MOV B, #10 DIV AB MOV 51H, A MOV 50H, B MOV 53H, #19 MOV 54H, #19 MOV 55H, #19 MOV 56H, #19 MOV 57H, #19 LJMP L2;- INI_8288: MOV P2, #58H ; 使89C52P2指向8255PA的控制寄存器接口结 ; 构,89C52P0口地址应与低8位无关 MOV A, #82H ; 8255A的控制字(82H),8255PC口输出PB口输 ; 入,PA口输出 MOVX R0, A ; 送8255A控制字 RET ;=INI_CPU: MOV R7, #0FEH ; 显示位指针,从第一位开始显示 MOV 50H, #16 ; 50H开始为显示缓冲区 MOV 51H, #16 MOV 52H, #16 MOV 53H, #0 MOV 54H, #17 MOV 55H, #17 MOV 56H, #0EH MOV 57H, #18;- MOV R0, #50H ; 显示缓冲区指针 MOV 70H, #0;- SETB ET0 ; T0开中断 SETB EA ; CPU开中断 ORL TMOD, #01H ; 设置定时器0工作在模式1 MOV TH0, #0FCH ; 设定定时器初值,定时时间为4ms。赋TH0初 MOV TL0, #67H ; 值为#0FCH,赋TL0初值为#67H SETB TR0 ; 启动T0 RET;=CLR_IN_RAM: MOV R0, #0CFHCLR_IN_RAM1: MOV R0, #0 DJNZ R0, CLR_IN_RAM1 RET;=TINT0: MOV TL0, #67H ; 重赋定时器初值,先赋低位字节更精确 MOV TH0, #0FEH PUSH PSW ; 保护现场 PUSH ACC ; 可以加入其他需要定时操作的程序RETURN: POP ACC ; 恢复现场 POP PSW ; SETB F0 ; 设置用户标志以表示中断过一次,不能在POP RETI ; PSW指令前设置 ;=LED: MOV P2, #50H ; 送位选码入PC口 MOV A, R7 MOVX R0, A RL A ; 指向下一显示位 MOV R7, A ; 保存显示位指针; MOV A, R0 ; 读出待显示值LED1: MOV DPTR, #TAB ; 指向显示码查表区 MOVC A, A+DPTR ; 得到显示码 MOV P2, #40H ; 指向PA口输出七段显示码 MOVX R0, A INC R0 ; 修改显示缓冲区指针 ANL 00H, #57H ; 比较指针 ; 保证显示缓冲区指针在50H57H的范围内; RET ;=七段显示码的表格 TAB: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H ;0F的显示码 DB 80H, 90H, 88H, 83H, 0C6H, 0A1H, 86H, 8EH DB 0BFH, 0C7H, 89H, 0FFH ; ,L,HEND实验A-2:显示按键的次数(在P1.0用短路线替代按键,利用定时中断延时防抖) ORG 8000H ; 实验板开始执行的第一条指令所处的地址 LJMP MAIN ; 跳转到主程序 ORG 800BH ; 定时器0中断入口地址 LJMP TINT0 ; 跳转到定时器0中断服务子程序 ORG 8100H ; 主程序开始的地址;避开中断入口地址MAIN: MOV SP, #0D0H ; 设置堆栈起始地址 LCALL INI_8288 ; 初始化CPU,注意用不同的子程序完成一定的功 ; 能,这是模块化 LCALL CLR_IN_RAM ; 清除内部RAM LCALL INI_CPU ; 编程技术之一,方便程序的开发、管理和维护;=L1: JNB F0, L2 ; F0为PSW中用户标志,在中断中置1表示中 ; 断过。在此用于显示与中断同步 CLR F0 ; 一次中断显示一位 LCALL LED ; 调LED子程序 LJMP L1;- L2: JB P1.0, L1 ; 无键按下则跳转L1;-L3: MOV R4, #0 CJNE R4, #10, $ JNB P1.0, L3 ;- INC 70H ; 有键按下,70H加1计数 MOV A, 70H ; 将16进制数转换成BCD码 MOV B, #100 DIV AB MOV 52H, A MOV A, B MOV B, #10 DIV AB MOV 51H, A MOV 50H, B MOV 53H, #19 MOV 54H, #19 MOV 55H, #19 MOV 56H, #19 MOV 57H, #19 LJMP L2;- INI_8288: MOV P2, #58H ; 使89C52P2指向8255PA的控制寄存器接口结 ; 构,89C52P0口地址应与低8位无关 MOV A, #82H ; 8255A的控制字(82H),8255PC口输出PB口输 ; 入,PA口输出 MOVX R0, A ; 送8255A控制字 RET ;=INI_CPU: MOV R7, #0FEH ; 显示位指针,从第一位开始显示 MOV 50H, #16 ; 50H开始为显示缓冲区 MOV 51H, #16 MOV 52H, #16 MOV 53H, #0 MOV 54H, #17 MOV 55H, #17 MOV 56H, #0EH MOV 57H, #18;- MOV R0, #50H ; 显示缓冲区指针 MOV 70H, #0;- SETB ET0 ; T0开中断 SETB EA ; CPU开中断 ORL TMOD, #01H ; 设置定时器0工作在模式1 MOV TH0, #0FCH ; 设定定时器初值,定时时间为4ms。赋TH0初 MOV TL0, #67H ; 值为#0FCH,赋TL0初值为#67H SETB TR0 ; 启动T0 RET;=CLR_IN_RAM: MOV R0, #0CFHCLR_IN_RAM1: MOV R0, #0 DJNZ R0, CLR_IN_RAM1 RET;=TINT0: MOV TL0, #67H ; 重赋定时器初值,先赋低位字节更精确 MOV TH0, #0FEH PUSH PSW ; 保护现场 PUSH ACC INC R4 ; 可以加入其他需要定时操作的程序RETURN: POP ACC ; 恢复现场 POP PSW ; SETB F0 ; 设置用户标志以表示中断过一次,不能在POP RETI ; PSW指令前设置 ;=LED: MOV P2, #50H ; 送位选码入PC口 MOV A, R7 MOVX R0, A RL A ; 指向下一显示位 MOV R7, A ; 保存显示位指针; MOV A, R0 ; 读出待显示值LED1: MOV DPTR, #TAB ; 指向显示码查表

温馨提示

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

最新文档

评论

0/150

提交评论