新概念单片机实验程序.docVIP

  • 29
  • 0
  • 约5.19万字
  • 约 42页
  • 2017-09-17 发布于江苏
  • 举报
实验0-1:通过一个简单的程序实例来说明一个程序的调试过程。 ORG 8000H ; 实验板开始执行的第一条指令所处的地址 LJMP MAIN ; 跳转到主程序 ORG 8030H ; 主程序开始的地址;避开中断入口地址 MAIN: CLR P3.4 ; 使口线P3.4为低电平,从而驱动蜂鸣器发声 LCALL DELAY1S ; 调用延时1S左右的延时程序,蜂鸣器发声1S左右时间 SETB P3.4 ; 使口线P3.4为高电平,从而关闭驱动蜂鸣器 LCALL DELAY1S ; 调用延时1S左右的延时程序,蜂鸣器停止发声1S左右时间 LJMP MAIN ; 跳转到主程序入口 ;-------以下是延时程序,延时约1S---------- ; 用以分隔程序,使程序清晰易懂 DELAY1S: MOV R0, #00H ; 给R0、R1和R2赋初值,在12Hz晶振时延时时间为 MOV R1, #00H ; 256(R0循环次数)×256(R1循环次数)×8(R2循 MOV R2, #08H ; 环次数)×2×10-6(DJNZ指令耗时)=1.048576 S DELAY1S1: DJNZ R0, $ ; R0单元减1,非0继续执行当前指令,“$”指当前指令地址 DJNZ R1, DELAY1S1 ; R1减1,非0跳转到标号DELAY1S1处执行 DJNZ R2, DELAY1S1 ; R2减1,非0跳转到标号DELAY1S1处执行 RET ; 延时子程序完成,返回调用处,子程序必须以“RET”指令结束 ;+++++++++++++++++++++++++++++ ; 用以分隔程序,使程序清晰易懂 END ; 程序结束,编译程序不理会END以后的内容 实验3-1:外部数据块搬移(≤256字节) 把处于程序存储器(XCODE)中从Data_TAB开始的256个字节数据传送到外部数据存储器从B000H开始的256个单元中去。 ORG 8000H ; 实验板开始执行的第一条指令所处的地址 LJMP MAIN ; 跳转到主程序 ORG 8030H ; 主程序开始的地址;避开中断入口地址 MAIN: MOV DPTR, # Data_TAB ; 使DPTR指向XCODE中的Data_TAB开始的256个字节数据 MOV P2, #0B0H ; 使P2口指向XDATA中的目的地址高8位 MOV R0, #00H ; 使R0口指向XDATA中的目的地址低8位起始地址 MOVEDATA: MOV A, #00H ; 清除累加器,以便下一条指令能准确指向XCODE中的数据 MOVC A, @A+DPTR ; 从XCODE中读取数据,请注意指令形式 MOVX @R0, A ; 把数据写到XDATA中 INC DPTR ; 修改源数据指针 INC R0 ; 修改目的数据指针 CJNE R0, #00H, MOVEDATA ; 没有送完256个数据,跳转到MOVEDATA继续送数 HALT: LJMP HALT ; 送完256个数据,在此死循环,实际程序中应为后续操作 ;++++++++以下为XCODE中的数据表++++++++ ; 用以分隔程序,使程序清晰易懂 Data_TAB: ; 常数或数据表格前用标号表示其起始地址 DB 0, 1, 2, 3, 4, 5, 6, 7 ; 立即数可以用十进制数表示,也可以用十六进制数表示, 后者有后缀“H” DB 8, 9, 0AH, 0BH, 0CH, 0DH, 0EH, 0FH ; 十六进制数中最高位数为A~F时,前面要补数字“0” DB 10H, 11H, 12H, 13H, 14H, 15H, 16H, 17H ; 十六进制数中最高位数为A~F时,前面要补数字“0” DB 18H, 19H, 1AH, 1BH, 1CH, 1DH, 1EH, 1FH ; 每行起始用伪指令“DB”定义数据,“DB”表示数据字节 DB 20H, 21H, 22H, 23H, 24H, 25H, 26H, 27H DB 28H, 29H, 2AH, 2BH, 2CH, 2DH, 2EH, 2FH DB 30H, 31H, 32H, 33H, 34H, 35H, 36H, 37H DB 38H, 39H, 3AH, 3BH, 3CH, 3DH, 3EH, 3FH DB 40H, 41H,

文档评论(0)

1亿VIP精品文档

相关文档