编辑: 霜天盈月祭 | 2018-11-26 |
CIC1047) 八位单片机 第4页共73 页 深圳市富满电子有限公司 SHENZHEN FUMAN ELECTRONICS CO., LTD. TC2711B(文件编号:S&
CIC1047) 八位单片机 第5页共73 页2中央处理器(CPU) 2.1 存储器 2.1.1 程序存储器(ROM) ? ROM:1K 2.1.1.1 复位向量(0000H) 具有一个字长的系统复位向量(0000H) . ? 上电复位(NT0=1,NPD=0) ;
? 看门狗复位(NT0=0,NPD=0) ;
? 外部复位(NT0=1,NPD=1) . 发生上述任一种复位后,程序将从 0000H 处重新开始执行,系统寄存器也都将恢复为默认值.根据 PFLAG 寄存器中的 NT0 和NPD 标志位的内容可以判断系统复位方式.下面一段程序演示了如何定义 ROM 中的复位向 量. ? 例:定义复位向量. ORG
0 ;
JMP START ;
跳至用户程序. … ORG 10H START ;
用户程序起始地址. … ;
用户程序. … ENDP ;
程序结束. 深圳市富满电子有限公司 SHENZHEN FUMAN ELECTRONICS CO., LTD. TC2711B(文件编号:S&
CIC1047) 八位单片机 第6页共73 页2.1.1.2 中断向量(0008H) 中断向量地址为 0008H.一旦有中断响应,程序计数器 PC 的当前值就会存入堆栈缓存器并跳转到 0008H 开 始执行中断服务程序.0008H 处的第一条指令必须是 JMP 或 NOP .下面的示例程序说明了如何编写中断服 务程序. * 注: PUSH , POP 指令用于存储和恢复 ACC/PFLAG,NT
0、NTD 不受影响.PUSH/POP 缓存器是唯一 的,且仅有一层. ? 例:定义中断向量,中断服务程序紧随 ORG 8H 之后. ? 例:定义中断向量,中断程序在用户程序之后. * 注:从上面的程序中容易得出 SONiX 的编程规则,有以下几点: 1.地址 0000H 的 JMP 指令使程序从头开始执行;
2.地址 0008H 是中断向量;
3.用户的程序应该是一个循环. 深圳市富满电子有限公司 SHENZHEN FUMAN ELECTRONICS CO., LTD. TC2711B(文件编号:S&
CIC1047) 八位单片机 第7页共73 页2.1.1.3 查表 在单片机中,对ROM 区中的数据进行查找,寄存器 Y 指向所找数据地址的中间字节(bit8~bit15), 寄存器 Z 指向所找数据地址的低字节(bit0~bit7) .执行完 MOVC 指令后,所查找数据字节内容被存入 ACC 中, 而数据高字节内容被存入 R 寄存器. ? 例:查找 ROM 地址为 TABLE1 的值. B0MOV Y,#TABLE1$M ;
设置 TABLE1 地址高字节. B0MOV Z,#TABLE1$L ;
设置 TABLE1 地址低字节. MOVC ;
查表,R=00H,ACC=35H. ;
查找下一地址. INCMS Z JMP @F ;
Z 没有溢出. INCMS Y ;
Z 溢出(FFH→00),→Y=Y+1 NOP ;
;
@@: MOVC ;
查表,R=51H,ACC=05H. … ;
TABLE1: DW 0035H ;
定义数据表(16 位)数据. DW 5105H DW 2012H … * 注:当寄存器 Z 溢出(从0FFH 变为 00H)时,寄存器 Y 并不会自动加 1.因此,Z 溢出时,Y 必须由程序加 1,下面的宏 INC_YZ 能够对 Y 和Z寄存器自动处理. ? 例:宏INC_YZ. INC_YZ MACRO INCMS Z JMP @F ;
没有溢出. INCMS Y NOP ;
没有溢出. @@: ENDM ? 例:通过 INC_YZ 对上例进行优化. B0MOV Y,#TABLE1$M ;
设置 TABLE1 地址中间字节. B0MOV Z,#TABLE1$L ;
设置 TABLE1 地址低字节. MOVC ;
查表,R=00H,ACC=35H. INC_YZ ;
查找下一地址数据. ;
@@: MOVC ;
查表,R=51H,ACC=05H. … ;
深圳市富满电子有限公司 SHENZHEN FUMAN ELECTRONICS CO., LTD. TC2711B(文件编号:S&
CIC1047) 八位单片机 第8页共73 页TABLE1: DW 0035H ;
定义数据表(16 位)数据. DW 5105H DW 2012H … 下面的程序通过累加器对 Y,Z 寄存器进行处理来实现查表功能,但需要特别注意进位时的处理. ? 例 :由指令 B0ADD/ADD 对Y和Z寄存器加 1. B0MOV Y,#TABLE1$M ;