SONIX单片机指令表
- 格式:doc
- 大小:92.00 KB
- 文档页数:2
松翰单片机SONIXSN8P2511程序模板#define MAIN_GLOBAL#include "..\inc\config.h"#include "..\inc\SN8P2501B.h"//************************************************************* ***//// 主函数 //// 功能: 调用各个主函数 ////************************************************************* ***//void main(void){InitCPU();Ram_init();while(1){if(TimeFlag){TEST = !TEST;TimeFlag=0;Time_Fun();}_clrwdt();}}//************************************************************* ***//// 继电器输出 //// 功能: 工作输出 ////************************************************************* ***//void Work_Fun(void){;}//************************************************************* ***//// 硬件初始化 //// 功能: 硬件初始化输入输出定时器开关 AD初始化 ////************************************************************* ***//void InitCPU(void) //单片机初始化{FGIE=0; //关总中断//------------------------------I/O口输出--------------------------//---------------P0---------------FP00M=0;//// FP01M=1;//// FP02M = 0;// FP03M = 0;// FP04M=0;//P0UR = _0000_0001b;//---------------P1---------------FP10M=0;//// FP11M=0;//FP12M=1;// 输出FP13M=0;// 按键// FP14M=1;//// FP16M=1;//// FP15M=1;//// FP17M=1;//P1UR = _0000_1001b;//---------------P2---------------FP20M=0;//FP21M=0;//FP22M=0;//FP23M=0;//FP24M=0;//FP25M=0;//// FP26M=0;//// FP27M=1;//P2UR = _0011_1111b;//---------------P5---------------// FP50M=1;//// FP51M=1;//// FP52M=1;//// FP53M=0;//FP54M=1;//// P5UR = _0000_0000b;//------------------------------T0--------------------------------FT0ENB = 0;FT0IEN = 0;FT0IRQ = 0;T0M = 0X60;//时钟为FCPU/4T0C=7; //T0 间隔250uSFT0ENB = 1;FT0IEN = 1;FGIE=1; //开总中断}//************************************************************* ***//// 变量初始化函数 //// 功能: 对程序中的变量进行赋初值 ////************************************************************* ***//void Ram_init(void){_nop();_nop();Move_Key = 0x70;// Open_FLAG = 1;}//************************************************************* ***//// 走时函数 //// 功能: 对程序中计时功能进行计数和赋值 ////************************************************************* ***//void Time_Fun(void){static uchar Time_5ms_Cnt = 0,Time_10ms_Cnt =0,Time_200ms_Cnt = 0,Time_1S_Cnt = 0;static uchar Leave_Out_ID = 0,Leave_Out_Time_Cnt = 0,YiWei_ID = 0,Leave_Out_Cnt = 5;static uchar Move_IN_Cnt = 0;uchar tmp1;if(Leave_Data_Out_Flag){if(!Leave_Out_ID){Leave_Out_Time_Cnt ++;LEAVE_DATA_OUT_ON();if(Leave_Out_Time_Cnt > 8){Leave_Out_Time_Cnt = 0;Leave_Out_ID = 1;}}else if(Leave_Out_ID == 1){Leave_Out_Time_Cnt ++;LEAVE_DATA_OUT_OFF();if(Leave_Out_Time_Cnt > 5){Leave_Out_Time_Cnt = 0;Leave_Out_ID = 2;}}else if(Leave_Out_ID == 2){if(!Leave_Out_Time_Cnt){tmp1 = Leave_ID;tmp1 |= Move_Key;tmp1 >>= YiWei_ID;tmp1 &= 1;if(tmp1)Leave_Out_Time_Cnt = 0;elseLeave_Out_Time_Cnt = 2; YiWei_ID ++;if(YiWei_ID >= 9){Leave_Out_ID = 0;YiWei_ID = 0;Leave_Out_Time_Cnt = 0; Leave_Data_Out_Flag = 0;}}if(Leave_Data_Out_Flag){Leave_Out_Time_Cnt ++;if(Leave_Out_Time_Cnt <= 4) LEAVE_DATA_OUT_ON();else if(Leave_Out_Time_Cnt < 6) LEAVE_DATA_OUT_OFF();elseLeave_Out_Time_Cnt = 0;}}}Time_5ms_Cnt ++;if(Time_5ms_Cnt >= 5) //接收5ms去扫描{Time_5ms_Cnt = 0;if(MOVE_IN) //倾倒了{Move_IN_Cnt ++;if(Move_IN_Cnt >= 10){Move_IN_Cnt = 15;Move_Key = 0x80;Leave_ID = 0;}}else{if(!K8_IN)Leave_ID = 8;else if(!K7_IN)Leave_ID = 7;else if(!K6_IN)Leave_ID = 6;else if(!K5_IN)Leave_ID = 5;else if(!K4_IN)Leave_ID = 4;else if(!K3_IN)Leave_ID = 3;else if(!K2_IN)Leave_ID = 2;else if(!K1_IN)Leave_ID = 1;Move_IN_Cnt = 0;Move_Key = 0x70;}}Time_10ms_Cnt ++;if(Time_10ms_Cnt >= 10) //发送10MS去扫描{Time_10ms_Cnt = 0;}Time_200ms_Cnt ++;if(Time_200ms_Cnt >= 200){Time_200ms_Cnt = 0;if(!Leave_Data_Out_Flag){Leave_Out_Cnt ++;if(Leave_Out_Cnt >= 10){Leave_Out_Cnt = 0;Leave_Data_Out_Flag = 1;}}}}__interrupt isr1(void) //TC0定时器中断入口{static uchar Time1MS = 0;if(FT0IRQ) //TC0 //定时0.125ms{T0C=6; //T0 间隔250uSTime1MS ++;if(Time1MS >= 4) //1MS中断函数{Time1MS = 0;TimeFlag = 1;}}FT0IRQ = 0;}。
单片机指令功能一览表MOV A,Rn E8~EF 寄存器AMOV A,direct E5 dircet 直接字节送AMOV A,@Ri ER~E7 间接RAM送AMOV A,#data 74 data 立即数送AMOV Rn,A F8~FF A送寄存器MOV Rn,dircet A8~AF dircet 直接字节送寄存器MOV Rn,#data 78~7F data 立即数送寄存器MOV dircet,A F5 dircet A送直接字芿MOV dircet,Rn 88~8F dircet 寄存器送直接字芿MOV dircet1,dircet2 85 dircet1 dircet2 直接字节送直接字芿MOV dircet,@Ro 86~87 间接RAM送直接字芿MOV dircet,#data 75 dircet data 立即数送直接字芿MOV @Ri,A F6~F7 A送间接RAMMOV @Ri,#data 76~77 data 直接字节送间接RAMMOV @Ri,#data 76~77 data 立即数送间接RAMMOV DPTR,#data16 90 data 15~8 16位常数送数据指钿data7~0MOVC A,@A+DPTR 93 甿(A)+(DPTR))寻址的程序存贿器字节选AMOVC A,@A+PC 83 甿(A)+(PC));寻址的程序存贮器字节送A MOVX A,@Ri E2~E3 送外部数据(8位地址)送AMOVX A,@DPTR E0 送外部数据(16位地址)送AMOVX @Ri,A F2~F3 A送外部数据(8位地址_MOVX @DPTR,A F0 A送外部数据(16位地址_PUSH dircet C0 dircet 直接字节进栈,SP势POP dircet D0 dircet 直接字节退栈,SP凿XCH A,Rn C8~CF 交换A和寄存器XCH A,dircet C5 dircet 交换A和直接字芿XCH A,@Ri C6~C7 交换A和间接RAMXCH A,@Ri D6~D7 交换A和间接RAM的低使SWAP A C4算术操作(A的二个半字节交换_ADD A,Rn 28~2F 寄存器加到AADD A,dircet 25 dircet 直接字节加到AADD A,@Ri 26~27 间接RAM加到AADD A,#data 24data 立即数加到AADD A,Rn 38~3F 寄存器和进位位加到AADD A,dircet 35dircet 直接字节和进位位加到AADD A,@Ri 36~37 间接字节和进位位加到AADD A,data 34 data 立即数和进位位加到AADD A,Rn 98~9F A减去寄存器和进位使ADD A,dircet 95 dircet A减去直接字节和进位位ADD A,@Ri 36~37 间接RAM和进位位加到AADD A,data 34 data 立即数和进位位加到ASUBB A,Rn 98~9F A减去寄存器和进位使SUBB A,dircet 95 dircet A减去直接字节和进位位SUBB A,@Ri 96~97 A减去间接RAM和进位位SUBB A,#data 94 data A减去立即数和进位使INC A 04 A势INC Rn 08~0F 寄存器加1INC dircet 05 dircet 直接字节势INC @Ri 06~07 间接RAM势DEC A 14 A凿DEC Rn 18~1F 寄存器减1DEC dircet 15 dircet 直接字节凿DEC @Ri 16~17 间接RAM凿INC DPTR A3 数据指针势MUL AB A4 A乘以BDIV AB 84 A除以BDA A D4 A的十进制加法调整逻辑操作ANL A,Rn 58~5F 寄存噿ldquo;丿rdquo;到AANL A,dircet 55 dircet 直接字节“丿rdquo;到AANL A,@Ri 56~57 间接RAm“丿rdquo;到AANL A,#data 54 data 立即敿ldquo;丿rdquo;到AANL dircet A 52 dircet A“丿rdquo;到直接字芿ANL dircet,#data 53 dircet data 立即敿ldquo;丿rdquo;到直接字芿ORL A,Rn 48~4F 寄存噿ldquo;房rdquo;到AORL A,dircet 45 dircet 直接字节“房rdquo;到AORL A,@Ri 46~47 间接RAM“房rdquo;到AORL A,#data 44 data 立即敿ldquo;房rdquo;到AORL dircet,A 42 dircet A“房rdquo;到直接字芿ORL dircet,#data 43 dircet data 立即敿ldquo;房rdquo;到直接字芿XRL A,Rn 68~6F 寄存噿ldquo;异或”到AXRL A,dircet 65 dircet 直接字节“异或”到AXRL A,@Ri 66~67 间接RAM“异或”到AXRL A,#data 64 data 立即敿ldquo;异或”到AXRL dircet A 62 dircet A“异或”到直接字芿XRL dircet,#data 63 dircet data 立即敿ldquo;异或”到直接字芿CLR A E4 清零CPL A F4 A取反RL A 23 A左环秿RLC A 33 A通过进位左环秿RR A 03 A右环秿RRC A 13 A通过进位右环秿控制程序转移ACALL addr 11 *1 addr(a7~a0) 绝对子程序调甿LCALL addr 16 12 addr(15~8) 长子程序调用addr(7~0)RET 22 子程序调用返囿RETI addr 11 32 中断调用返回AJMP addr 11 ? addr(a7~a6) 绝对转移LJMP addr 16 02addr(15~8) 长转秿addr(7~0)SJMP rel 80 rel 短转移,相对转移JMP @A+DPTR 73 相对于DPTR间接转移JZ rel 60 rel A为零转移JNZ rel 70 rel A为零转移CJNE A,dircet,rel B5 dircet rel 直接字节与A比较,不等则转移CJNE A,#data,rel B4 data rel 立即数与A比较,不等则转移CJNE A,Rn,#data,rel B8~BF data rel 立即数与寄存器比较,不等则转秿CJNE @Ri,#data,rel B6~B7 data rel 立即数与间接RAM比较,不等则转移DJNZ Rn,rel D8~DF rel 寄存器减1,不为零则转秿DJNZ dircet,rel B5 dircet rel 直接字节凿,不为零则转秿NOP 00 空操使*=a10a9a8l?a10a9a80布尔变量操作CLR C C3 清零进位CLR bit C2 清零直接使SETB C D3 置位进位SETB bit D2 置位直接使CPL C B3 进位取反CPL bit B2 直接位取叿ANL C,bit 82 dit 直接敿ldquo;丿rdquo;到进使ANL C,/bit B0 直接位的叿ldquo;丿rdquo;到进使ORL C,bit 72 bit 直接使ldquo;房rdquo;到进使ORL C,/bit A0 bit 直接位的叿ldquo;房rdquo;到进使MOV C,bit A2 bit 直接位送进使MOV bit,C 92 bit 进位送直接位JC rel 40 rel 进位位为1转移JNC rel 50 rel 进位位为0转移JB bit,rel 20 bit rel 直接位为1相对转移JNB bit,rel 30 bit rel 直接位为0相对转移JBC bit,rel 10 bit rel 直接位为1相对转移,然后清零该使[1]. 循环移位指令_条)RL A 累加器A中的内容左移一使RR A 累加器A中的内容右移一使RLC A 累加器A中的内容连同进位位CY左移一使RRC A 累加器A中的内容连同进位位CY右移一使[2]. 累加器半字节交换指令_条)SWAP A 累加器中的内容高低半字节互换[3]. 求反指令_条)CPL A 累加器中的内容按位取叿[4]. 清零指令_条)CLR A 0→(A),累加器中的内容清0[5]. 逻辑与操作指令(6条)ANL A,data 累加器A中的内容和直接地址单元中的内容执行与逻辑操作。
一个单片机所需执行指令的集合即为单片机的指令系统。
单片机使用的机器语言、汇编语言及高级语言,但不管使用是何种语言,最终还是要“翻译”成为机器码,单片机才能执行之。
现在有很多半导体厂商都推出了自己的单片机,单片机种类繁多,品种数不胜数,值得注意的是不同的单片机它们的指令系统不一定相同,或不完全相同。
但不管是使用机器语言、汇编语言还是高级语言都是使用指令编写程序的。
所谓机器语言即指令的二进制编码,而汇编语言则是指令的表示符号。
在指令的表达式上也不会直接使用二进制机器码,最常用的是十六进制的形式。
但单片机并不能直接执行汇编语言和高级语言,都必须通过汇编器“翻译”成为二进制机器码方能执行,但如果直接使用二进制来编写程序,那将十分不便,也很难记忆和识别,不易编写、难于辨读,极易出错,同时出错了也相当难查找。
所以现在基本上都不会直接使用机器语言来编写单片机的程序。
最好的办法就是使用易于阅读和辨认的指令符号来代替机器码,我们常称这些符号为助记符,用助记符的形式表示的单片机指令就是汇编语言,为便于记忆和阅读,助记符号通常都使用易于理解的英文单词和拼音字母来表示。
每种单片机都有自己独特的指令系统,那么指令系统是开发和生产厂商定义的,如要使用其单片机,用户就必须理解和遵循这些指令标准,要掌握某种(类)单片机,指令系统的学习是必须的。
MCS-51共有111条指令,可分为5类:[1].数据传送类指令(共29条)[2].算数运算类指令(共24条)[3].逻辑运算及移位类指令(共24条)[4].控制转移类指令(共17条)[5].布尔变量操作类指令(共17条)一些特殊符号的意义在介绍指令系统前,我们先了解一些特殊符号的意义,这对今后程序的编写都是相当有用的。
Rn——当前选中的寄存器区的8个工作寄存器R0—R7(n=0-7)。
Ri——当前选中的寄存器区中可作为地址寄存器的两个寄存器R0和R1(i=0,1)direct—内部数据存储单元的8位地址。
SONIX单片机除法程序单片机移位除法原理描述:扩充一个字节,并清0作“余数”,列“余数”到“被除数”高位,把“被除数”及“高位余数”左移1位(带“C”标),此时C标为1则直接用“余数”减“除数”(结果返回余数)C标为0则比较“余数”和“除数”的大小“余数”小,则“商”带C左移1位,循环计数减1进入下一次循环移位。
“余数”大于等于“除数”则,“余数”减“除数”(结果返回余数)再商带C左移1位,循环计数减1进入下一次循环移位。
循环计数为0时,结束运算。
;Name ivisionSub by 540;Function :除法子程序DIVIDEND/ DIVISOR = QUOTIENT ..... REMAIN;QUOTIENT,商;DIVIDEND,被除数;DIVISOR,除数;REMAIN,余数;***********************************************DivisionSub: CLR REMAIN ;清余数CLR QUOTIENT_L;商清零CLR QUOTIENT_HMOV A,#16 ;设置为8位除法MOV SUB_TIMES,A ;LOOP_DIVI: RLCM DIVIDEND_L ;被除数左移RLCM DIVIDEND_H ;RLCM REMAIN ;B0BTS0 FC ;JMP DEC_SUB ;C为1则直接减MOV A,REMAIN ;SUB A,DIVISOR ;除数B0BTS0 FC ;B0MOV REMAIN,A ;JMP LOOP ;DEC_SUB: B0MOV A,REMAIN ;SUB A,DIVISOR ;B0MOV REMAIN,A ;B0BSET FC ;恢复C标为1LOOP: RLCM QUOTIENT_L ;RLCM QUOTIENT_H ;DECMS SUB_TIMES ;JMP LOOP_DIVI ;RET ;子程序名称:双字节除以单字节除法;被除数:R1,R2; 除数:R3; 商:R1,R2; 余数:R0; 另外占用:R;DIV: CLR R0B0MOV R,#10HLOP_SUB: BCLR FCRLCM R2RLCM R1RLCM R0BTS0 FCJMP SAMEMOV A,R0SUB A,R3BTS1 FCJMP N_SAME SAME: MOV A,R0SUB A,R3MOV R0,ABSET R2.0N_SAME: DECMS RJMP LOP_SUBRET。
单片机指令以A开头的指令有18条,分别为:1、ACALL addr11指令名称:绝对调用指令指令代码:A10 A9 A8 10001 A7 A6 A5 A4 A3 A2 A1 A0指令功能:构造目的地址,进展子程序调用。
其方法是以指令提供的11位地址(al0~a0),取代PC的低11位,PC的高5位不变。
操作容:PC←(PC)+2SP←(SP)+1(SP)←(PC)7~0SP←(SP)+1(SP)←(PC)15~8PC10~0←addrl0~0字节数:2机器周期:2使用说明:由于指令只给出子程序入口地址的低11位,因此调用围是2KB。
2、ADD A,Rn指令名称:存放器加法指令指令代码:28H~2FH指令功能:累加器容与存放器容相加操作容:A←(A)+(Rn),n=0~7字节数:1机器周期;1影响标志位:C,AC,OV3、ADD A,direct指令名称:直接寻址加法指令指令代码:25H指令功能:累加器容与部RAM单元或专用存放器容相加操作容:A←(A)+(direct)字节数:2机器周期:1影响标志位:C,AC,OV4、ADD A,@Ri ’指令名称:间接寻址加法指令指令代码:26H~27H指令功能:累加器容与部RAM低128单元容相加操作容:A←(A)+((Ri)),i=0,1字节数:1机器周期:1影响标志位:C,AC,OV5、ADD A,#data指令名称:立即数加法指令指令代码:24H指令功能:累加器容与立即数相加操作容:A←(A)+data字节数:2机器周期:1影响标志位:C,AC,OV6、ADDC A,Rn指令名称:存放器带进位加法指令指令代码:38H~3FH指令功能:累加器容、存放器容和进位位相加操作容:A←(A)+(Rn)+(C),n=0~7字节数: 1 机器周期:1影响标志位:C,AC,OV 7、ADDC A,direct指令名称:直接寻址带进位加法指令指令代码:35H指令功能:累加器容、部RAM低128单元或专用存放器容与进位位加操作容:A←(A)+(direct)+(C)字节数:2机器周期:1影响标志位:C,AC,OV8、ADDC A,@Ri指令名称:间接寻址带进位加法指令指令代码:36H~37H指令功能:累加器容, 部RAM低128单元容与进位位相加操作容:A←(A)+((Ri))+(C),i=0,1字节数:1机器周期:1影响标志位:C,AC,OV9、ADDC A,#data指令名称:立即数带进位加法指令指令代码:34H指令功能:累加器容、立即数与进位位相加操作容:A←(A)+data+(C)字节数:2机器周期:1影响标志位:C,AC,OV10、AJMP addr11指令名称:绝对转移指令指令代码:A10 A9 A8 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0指令功能:构造目的地址,实现程序转移。
引言概述:单片机指令是嵌入式系统设计中至关重要的一部分,它们定义了单片机的功能和操作。
本文是单片机指令大全系列的第二部分,旨在提供更多全面的单片机指令信息,帮助读者更好地理解和应用单片机指令。
正文内容:一、移位指令1.逻辑左移指令:将操作数的每一位向左移动一位,并且最低位填充0。
2.逻辑右移指令:将操作数的每一位向右移动一位,并且最高位填充0。
3.算术右移指令:将操作数的每一位向右移动一位,并且最高位保持不变。
4.循环左移指令:将操作数的每一位向左循环移动一位,即最高位移动到最低位。
5.循环右移指令:将操作数的每一位向右循环移动一位,即最低位移动到最高位。
二、逻辑运算指令1.逻辑与指令:对操作数进行逻辑与运算,将两个二进制数对应位上的值进行逻辑与操作。
2.逻辑或指令:对操作数进行逻辑或运算,将两个二进制数对应位上的值进行逻辑或操作。
3.逻辑非指令:对操作数进行逻辑非运算,将二进制数的每一位取反。
4.逻辑异或指令:对操作数进行逻辑异或运算,将两个二进制数对应位上的值进行逻辑异或操作。
5.逻辑移位指令:将操作数进行逻辑左移或右移。
三、算术运算指令1.加法指令:对操作数进行加法运算,并将运算结果保存到指定的寄存器或存储器中。
2.减法指令:对操作数进行减法运算,并将运算结果保存到指定的寄存器或存储器中。
3.乘法指令:对操作数进行乘法运算,并将运算结果保存到指定的寄存器或存储器中。
4.除法指令:对操作数进行除法运算,并将运算结果保存到指定的寄存器或存储器中。
5.移位指令:对操作数进行移位运算,包括算术左移、算术右移、循环左移和循环右移。
四、输入输出指令1.读取输入指令:从指定的输入设备读取数据,并将数据保存到指定的寄存器或存储器中。
2.输出显示指令:将指定的数据从寄存器或存储器中读取,并显示到指定的输出设备上。
3.端口输入指令:从指定的端口读取数据,并将数据保存到指定的寄存器或存储器中。
4.端口输出指令:将指定的数据从寄存器或存储器中读取,并输出到指定的端口上。
一个单片机所需执行指令的集合即为单片机的指令系统。
单片机使用的机器语言、汇编语言及高级语言,但不管使用是何种语言,最终还是要“翻译”成为机器码,单片机才能执行之。
现在有很多半导体厂商都推出了自己的单片机,单片机种类繁多,品种数不胜数,值得注意的是不同的单片机它们的指令系统不一定相同,或不完全相同。
但不管是使用机器语言、汇编语言还是高级语言都是使用指令编写程序的。
所谓机器语言即指令的二进制编码,而汇编语言则是指令的表示符号。
在指令的表达式上也不会直接使用二进制机器码,最常用的是十六进制的形式。
但单片机并不能直接执行汇编语言和高级语言,都必须通过汇编器“翻译”成为二进制机器码方能执行,但如果直接使用二进制来编写程序,那将十分不便,也很难记忆和识别,不易编写、难于辨读,极易出错,同时出错了也相当难查找。
所以现在基本上都不会直接使用机器语言来编写单片机的程序。
最好的办法就是使用易于阅读和辨认的指令符号来代替机器码,我们常称这些符号为助记符,用助记符的形式表示的单片机指令就是汇编语言,为便于记忆和阅读,助记符号通常都使用易于理解的英文单词和拼音字母来表示。
每种单片机都有自己独特的指令系统,那么指令系统是开发和生产厂商定义的,如要使用其单片机,用户就必须理解和遵循这些指令标准,要掌握某种(类)单片机,指令系统的学习是必须的。
MCS-51共有111条指令,可分为5类:[1].数据传送类指令(共29条)[2].算数运算类指令(共24条)[3].逻辑运算及移位类指令(共24条)[4].控制转移类指令(共17条)[5].布尔变量操作类指令(共17条)一些特殊符号的意义在介绍指令系统前,我们先了解一些特殊符号的意义,这对今后程序的编写都是相当有用的。
Rn——当前选中的寄存器区的8个工作寄存器R0—R7(n=0-7)。
Ri——当前选中的寄存器区中可作为地址寄存器的两个寄存器R0和R1(i=0,1)direct—内部数据存储单元的8位地址。
SONiX 公司保留对以下所有产品在可靠性,功能和设计方面的改进作进一步说明的权利。
SONiX 不承担由本手册所涉及的产品或电路的运用和使用所引起的任何责任,SONiX 的产品不是专门设计来应用于外科植入、生命维持和任何SONiX 产品的故障会对个体造成伤害甚至死亡的领域。
如果将SONiX 的产品应用于上述领域,即使这些是由SONiX 在产品设计和制造上的疏忽引起的,用户应赔偿所有费用、损失、合理的人身伤害或死亡所直接或间接产生的律师费用,并且用户保证SONiX 及其雇员、子公司、分支机构和销售商与上述事宜无关。
.修正记录版本日期内容2008年3月初版。
VER 1.02008年5月修改烧录信息章节内容。
目录11产品概述 (5)1.1功能特性 (5)1.2系统结构框图 (6)1.3引脚配置 (7)1.4引脚描述 (7)1.5引脚电路结构图 (8)22中央处理器(CPU) (9)2.1存储器 (9)2.1.1程序存储器 (9)2.1.2CHECKSUM 计算 (14)2.1.3编译选项 (15)2.1.4数据存储器 (RAM) (15)2.1.5系统寄存器 (16)2.2寻址模式 (23)2.2.1立即寻址 (23)2.2.2直接寻址 (23)2.2.3间接寻址 (23)2.3堆栈 (24)2.3.1概述 (24)2.3.2堆栈寄存器 (25)2.3.3堆栈操作举例 (26)33复位 (27)3.1概述 (27)3.2上电复位 (28)3.3看门狗复位 (28)3.4掉电复位 (29)3.4.1概述 (29)3.4.2系统工作电压 (29)3.4.3掉电复位性能改进 (30)3.5外部复位 (32)3.6外部复位电路 (33)3.6.1RC复位电路 (33)3.6.2二极管及RC复位电路 (33)3.6.3稳压二极管复位电路 (34)3.6.4电压偏置复位电路 (34)3.6.5外部IC复位 (35)44系统时钟 (36)4.1概述 (36)4.2时钟框图 (36)4.3OSCM寄存器 (37)4.4系统高速时钟 (38)4.4.1内部高速RC振荡器 (38)4.4.2外部高速时钟 (39)4.5系统低速时钟 (41)4.5.1系统时钟测试 (41)55系统工作模式 (42)5.1概述 (42)5.2系统模式切换举例 (43)5.3唤醒时间 (44)5.3.1概述 (44)5.3.2唤醒时间 (44)66中断 (45)6.1概述 (45)6.2中断使能寄存器INTEN (45)6.3中断请求寄存器INTRQ (46)6.4GIE全局中断 (46)6.5PUSH,POP处理 (47)6.6INT0(P0.0)中断 (48)6.7T0中断 (49)6.8TC0中断 (50)6.9ADC中断 (51)6.10多中断操作举例 (52)77I/O口 (53)7.1I/O口模式 (53)7.2I/O口上拉电阻 (54)7.3I/O口数据寄存器 (55)7.4P4与ADC共用引脚 (56)88定时器 (57)8.1看门狗定时器 (57)8.2定时器T0 (58)8.2.1概述 (58)8.2.2T0M模式寄存器 (58)8.2.3T0C计数寄存器 (59)8.2.4T0操作流程 (59)8.3定时/计数器TC0 (60)8.3.1概述 (60)8.3.2TC0M模式寄存器 (61)8.3.3TC0C计数寄存器 (62)8.3.4TC0R自动装载寄存器 (63)8.3.5TC0时钟频率输出(蜂鸣器输出) (64)8.3.6TC0操作举例 (65)8.4PWM0 (66)8.4.1概述 (66)8.4.2TC0IRQ和PWM输出占空比 (67)8.4.3PWM输出占空比与TC0R的变化 (68)8.4.4PWM编程举例 (69)995通道ADC (70)9.1概述 (70)9.2ADM寄存器 (70)9.3ADR寄存器 (71)9.4ADB寄存器 (71)9.5P4CON寄存器 (72)9.6ADC转换时间 (72)9.7ADC操作实例 (73)9.8ADC电路 (73)11002K/4K蜂鸣器(BUZZER)输出 (74)10.1概述 (74)10.2BZM模式寄存器 (74)1111指令表 (75)1122电气特性 (76)12.1极限参数 (76)12.2电气特性 (76)1133SN8P2722开发工具 (78)13.1SN8P2722EV-KIT (78)13.2在线仿真器(ICE)和EV-KIT应用注意事项 (79)1144OTP烧录信息 (80)14.1烧录转接板信息 (80)14.2烧录引脚信息 (82)1155芯片正印命名规则 (83)15.1概述 (83)15.2芯片型号说明 (83)15.3命名举例 (84)15.4日期码规则 (84)1166封装信息 (85)16.1P-DIP20PIN (85)16.2SOP20PIN (86)16.3SSOP20PIN (87)产品概述1.1 功能特性♦存储器♦2个8位定时器ROM:2K * 16位。
1.“I”为立即数;
2.“M”系统寄存器或用户自行定义的寄存器;
3. 指令周期为1 个周期,一个周期等于1/Fcpu。
C -----进位标志位
DC----辅助位位
Z------↑零标志位
CYCLE-----字节大小
序号指令类别助记符号描述 C DC Z CYCLE
1
数
据
传
输
指
令MOV A, M A←M --√ 1
2MOV M, A M←→A --- 1 3B0MOV A, M A←M(bank0)--√ 1 4B0MOV M, A M(bank0)←A --- 1 5MOV A, I A←I --- 1 6B0MOV M, I M←I,(M= R,X,Y,Z,H,L,RBANK,PFLAG)--- 1 7XCH A, M A←→M--- 1 8B0XCH A, M A←M(bank0) --- 1 9MOVC R,A←ROM[Y,Z]--- 2 10PUSH 将寄存器80h~87h压栈--- 1 11POP 将寄存器80h~87h压栈--- 1
12算
术
运
算
指
令ADC A, M A←M+A+C,如果发生进位,则C=1,否则C=0 √√√ 1
13ADC M, A M←M+A+C,如果发生进位,则C=1,否则C=0 √√√ 1 14ADD A, M A←M+A 如果发生进位,则C=1,否则C=0 √√√ 1 15ADD M, A M←M+A 如果发生进位,则C=1,否则C=0 √√√ 1 16B0ADD M, A M(bank0)←M(bank0)+A if进位C=0,else C=1 √√√ 1 17ADD A , I A←A+I, 如果发生进位,则C=0,否则C=1 √√√ 1 18SBC A , M A←A-M-/C,如果发生进位,则C=0,否则C=1 √√√ 1 19SBC M , A M←A-M-/C,如果发生进位,则C=0,否则C=1 √√√ 1 20SUB A , M A←A-M,如果发生进位,则C=0,否则C=1 √√√ 1 21SUB M ,A M←A-M,如果发生进位,则C=0,否则C=1 √√√ 1 22SUB A ,I A←A-I,如果发生进位,则C=0,否则C=1 √√√ 1 23MUL A , M R,A←A*M,乘积的高字节放在系统寄存器,低字节放在A--√ 2
24逻
辑
运
算
指
令AND A ,M A←A & M --√ 1
25AND M , A M←A & M --√ 1 26AND A , I A←A & I --√ 1 27OR A ,M A←A | M --√ 1 28OR M , A M←A | M --√ 1 29OR A , I A←A | I --√ 1 30XOR A ,M A←A⊕M --√ 1 31XOR M , A M←A⊕M --√ 1 32XOR A , I A←A⊕I --√ 1 33CLR M M←0--- 1 34移
位
指
令SWAP M A(b3~b0,b7~b4)←→M(b7~b4,b3~b0) --- 1
老莫工作室 2010.1.16
35 SWAPM M M(b3~b0,b7~b4)←→M(b7~b4,b3~b0) - - - 1 36 RRC M A ←RRC M √ - - 1 37 RRCM M M ←RRC M √ - - 1 38 RLC M A ←RLC M √ - - 1 39 RLCM M M ←RLC M
√ - - 1 40 位操作
指令
BCLR M.b M .b ←0 - - - 1 41 BSET M.b M .b ←1 - - - 1 42 B0BCLR M.b M (bank0).b ←0 - - - 1 43 B0BSET M.b
M (bank0).b ←1
- - - 1 44 分支转移指令
CMPRS A , I ZF,C ←A-I,if A=I,则跳过下一条程序 √ - √ 1+S 45 CMPRS A , M ZF,C ←A-M,if A=M,则跳过下一条程序 √ - √ 1+S 46 INCS M A ←M+1,if A=0,则跳过下一条程序 - - - 1+S 47 INCMS M A ←M+1,if M=0,则跳过下一条程序 - - - 1+S 48 DECS M A ←M-1,if A=0,则跳过下一条程序 - - - 1+S 49 DECMS M A ←M-1,if M=0,则跳过下一条程序 - - - 1+S 50 BTS0 M.b if M.b=0,则跳过下一条程序 - - - 1+S 51 BTS1 M.b if M.b=1,则跳过下一条程序 - - - 1+S 52 BBTS0 M.b If M (bank0).b =0,则跳过下一条程序 - - - 1+S 53 B0BTS1 M.b If M (bank0).b =1,则跳过下一条程序 - - - 1+S 54 JMP d PC 15/14←ROMPAGES1/0,PC13~PC0←d
- - - 1+S 55 CALL d Stack ←PC15~PC0PC 15/14←RomPAGES1/0,PC13~PC0←d - - - 2 56 RET PC ←Stack
- - - 2 57 RETI PC ←Stack ,退出中断,并打开全局中断 - - - 2 58 NOP 空操作 - - - 2 59
-
-
-
1。