搜档网
当前位置:搜档网 › 特殊功能寄存器地址与控制位

特殊功能寄存器地址与控制位

特殊功能寄存器地址与控制位
特殊功能寄存器地址与控制位

/************************************************************ * 特殊功能寄存器地址和控制位

************************************************************/ /*中断使能1*/

#define IE1_ 0x0000

sfrb IE1 = IE1_;

#define WDTIE 0x01 /*看门狗中断使能*/

#define OFIE 0x02 /*外部晶振故障中断使能*/

#define NMIIE 0x10 /*非屏蔽中断使能*/

#define ACCVIE 0x20 /*可屏蔽中断使能/flash写中断错误*/ #define URXIE0 0x40 /*串口0接收中断使能*/

#define UTXIE0 0x80 /*串口0发送中断使能*/

/*中断标志1*/

#define IFG1_ 0x0002

sfrb IFG1 = IFG1_;

#define WDTIFG 0x01 /*看门狗中断标志*/

#define OFIFG 0x02 /*外部晶振故障中断标志*/

#define NMIIFG 0x10 /*非屏蔽中断标志*/

#define URXIFG0 0x40 /*串口0接收中断标志*/

#define UTXIFG0 0x80 /*串口0发送中断标志*/

/* 中断模式使能1 */

#define ME1_ 0x0004

sfrb ME1 = ME1_;

#define URXE0 0x40 /* 串口0接收中断模式使能 */

#define USPIE0 0x40 /* 同步中断模式使能 */

#define UTXE0 0x80 /* 串口0发送中断模式使能 */

/* 中断使能2 */

#define IE2_ 0x0001

sfrb IE2 = IE2_;

#define URXIE1 0x10 /* 串口1接收中断使能 */

#define UTXIE1 0x20 /* 串口1发送中断使能 */

/* 中断标志2 */

#define IFG2_ 0x0003

sfrb IFG2 = IFG2_;

#define URXIFG1 0x10 /* 串口1接收中断标志 */

#define UTXIFG1 0x20 /* 串口1发送中断标志 */

/* 中断模式使能2 */

#define ME2_ 0x0005

sfrb ME2 = ME2_;

#define URXE1 0x10 /* 串口1接收中断模式使能 */

#define USPIE1 0x10 /* 同步中断模式使能 */

#define UTXE1 0x20 /* 串口1发送中断模式使能 */

/************************************************************

* 看门狗定时器的寄存器定义

************************************************************/

#define WDTCTL_ 0x0120

sfrw WDTCTL = WDTCTL_;

#define WDTIS0 0x0001 /*选择WDTCNT的四个输出端之一*/

#define WDTIS1 0x0002 /*选择WDTCNT的四个输出端之一*/

#define WDTSSEL 0x0004 /*选择WDTCNT的时钟源*/

#define WDTCNTCL 0x0008 /*清除WDTCNT端: 为1时从0开始计数*/

#define WDTTMSEL 0x0010 /*选择模式 0: 看门狗模式; 1: 定时器模式*/

#define WDTNMI 0x0020 /*选择NMI/RST 引脚功能 0:为 RST; 1:为NMI*/

#define WDTNMIES 0x0040 /*WDTNMI=1时.选择触发延 0:为上升延 1:为下降延*/

#define WDTHOLD 0x0080 /*停止看门狗定时器工作 0:启动;1:停止*/

#define WDTPW 0x5A00 /* 写密码:高八位*/

/* SMCLK= 1MHz定时器模式 */

#define WDT_MDLY_32 WDTPW+WDTTMSEL+WDTCNTCL /* TSMCLK*2POWER15= 32ms 复位状态 */

#define WDT_MDLY_8 WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0 /* TSMCLK*2POWE R13=8.192ms " */

#define WDT_MDLY_0_5 WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1 /* TSMCLK*2POW ER9=0.512ms " */

#define WDT_MDLY_0_064 WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDTIS0 /* TSMCLK* 2POWER6=0.512ms " */

/* ACLK=32.768KHz 定时器模式*/

#define WDT_ADLY_1000 WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL /* TACLK*2POW ER15=1000ms " */

#define WDT_ADLY_250 WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0 /* TACLK*2 POWER13=250ms " */

#define WDT_ADLY_16 WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1 /* TACLK*2 POWER9=16ms " */

#define WDT_ADLY_1_9 WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0 /* TAC LK*2POWER6=1.9ms " */

/* SMCLK=1MHz看门狗模式 */

#define WDT_MRST_32 WDTPW+WDTCNTCL /* TSMCLK*2POWER15=32ms 复位状态 */

#define WDT_MRST_8 WDTPW+WDTCNTCL+WDTIS0 /* TSMCLK*2POWER13=8.19 2ms " */

#define WDT_MRST_0_5 WDTPW+WDTCNTCL+WDTIS1 /* TSMCLK*2POWER9=0.51 2ms " */

#define WDT_MRST_0_064 WDTPW+WDTCNTCL+WDTIS1+WDTIS0 /* TSMCLK*2POWER 6=0.512ms " */

/* ACLK=32KHz看门狗模式 */

#define WDT_ARST_1000 WDTPW+WDTCNTCL+WDTSSEL /* TACLK*2POWER15=10 00ms " */

#define WDT_ARST_250 WDTPW+WDTCNTCL+WDTSSEL+WDTIS0 /* TACLK*2POWER1 3=250ms " */

#define WDT_ARST_16 WDTPW+WDTCNTCL+WDTSSEL+WDTIS1 /* TACLK*2POWER9 =16ms " */

#define WDT_ARST_1_9 WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0 /* TACLK*2PO WER6=1.9ms " */

/************************************************************

硬件乘法器的寄存器定义

************************************************************/

#define MPY_ 0x0130 /* 无符号乘法 */

sfrw MPY = MPY_;

#define MPYS_ 0x0132 /* 有符号乘法*/

sfrw MPYS = MPYS_;

#define MAC_ 0x0134 /* 无符号乘加 */

sfrw MAC = MAC_;

#define MACS_ 0x0136 /* 有符号乘加 */

sfrw MACS = MACS_;

#define OP2_ 0x0138 /* 第二乘数 */

sfrw OP2 = OP2_;

#define RESLO_ 0x013A /* 低6位结果寄存器 */

sfrw RESLO = RESLO_;

#define RESHI_ 0x013C /* 高6位结果寄存器 */

sfrw RESHI = RESHI_;

#define SUMEXT_ 0x013E /*结果扩展寄存器 */

const sfrw SUMEXT = SUMEXT_;

/************************************************************

* DIGITAL I/O Port1/2 寄存器定义有中断功能

************************************************************/

#define P1IN_ 0x0020 /* P1 输入寄存器 */

const sfrb P1IN = P1IN_;

#define P1OUT_ 0x0021 /* P1 输出寄存器 */

sfrb P1OUT = P1OUT_;

#define P1DIR_ 0x0022 /* P1 方向选择寄存器 */

sfrb P1DIR = P1DIR_;

#define P1IFG_ 0x0023 /* P1 中断标志寄存器*/

sfrb P1IFG = P1IFG_;

#define P1IES_ 0x0024 /* P1 中断边沿选择寄存器*/

sfrb P1IES = P1IES_;

#define P1IE_ 0x0025 /* P1 中断使能寄存器 */

sfrb P1IE = P1IE_;

#define P1SEL_ 0x0026 /* P1 功能选择寄存器*/

sfrb P1SEL = P1SEL_;

#define P2IN_ 0x0028 /* P2 输入寄存器 */

const sfrb P2IN = P2IN_;

#define P2OUT_ 0x0029 /* P2 输出寄存器 */

sfrb P2OUT = P2OUT_;

#define P2DIR_ 0x002A /* P2 方向选择寄存器 */

sfrb P2DIR = P2DIR_;

#define P2IFG_ 0x002B /* P2 中断标志寄存器 */

sfrb P2IFG = P2IFG_;

#define P2IES_ 0x002C /* P2 中断边沿选择寄存器 */

sfrb P2IES = P2IES_;

#define P2IE_ 0x002D /* P2 中断使能寄存器 */

sfrb P2IE = P2IE_;

#define P2SEL_ 0x002E /* P2 功能选择寄存器 */

sfrb P2SEL = P2SEL_;

/************************************************************ * DIGITAL I/O Port3/4寄存器定义无中断功能

************************************************************/

#define P3IN_ 0x0018 /* P3 输入寄存器 */

const sfrb P3IN = P3IN_;

#define P3OUT_ 0x0019 /* P3 输出寄存器 */

sfrb P3OUT = P3OUT_;

#define P3DIR_ 0x001A /* P3 方向选择寄存器 */

sfrb P3DIR = P3DIR_;

#define P3SEL_ 0x001B /* P3 功能选择寄存器*/

sfrb P3SEL = P3SEL_;

#define P4IN_ 0x001C /* P4 输入寄存器 */

const sfrb P4IN = P4IN_;

#define P4OUT_ 0x001D /* P4 输出寄存器 */

sfrb P4OUT = P4OUT_;

#define P4DIR_ 0x001E /* P4 方向选择寄存器 */

sfrb P4DIR = P4DIR_;

#define P4SEL_ 0x001F /* P4 功能选择寄存器 */

sfrb P4SEL = P4SEL_;

/************************************************************ * DIGITAL I/O Port5/6 I/O口寄存器定义PORT5和6 无中断功能

************************************************************/

#define P5IN_ 0x0030 /* P5 输入寄存器 */

const sfrb P5IN = P5IN_;

#define P5OUT_ 0x0031 /* P5 输出寄存器*/

sfrb P5OUT = P5OUT_;

#define P5DIR_ 0x0032 /* P5 方向选择寄存器*/

sfrb P5DIR = P5DIR_;

#define P5SEL_ 0x0033 /* P5 功能选择寄存器*/

sfrb P5SEL = P5SEL_;

#define P6IN_ 0x0034 /* P6 输入寄存器 */

const sfrb P6IN = P6IN_;

#define P6OUT_ 0x0035 /* P6 输出寄存器*/

sfrb P6OUT = P6OUT_;

#define P6DIR_ 0x0036 /* P6 方向选择寄存器*/

sfrb P6DIR = P6DIR_;

#define P6SEL_ 0x0037 /* P6 功能选择寄存器*/

sfrb P6SEL = P6SEL_;

************************************************************ * ADC12 A/D采样寄存器定义

************************************************************/ /*ADC12转换控制类寄存器*/

#define ADC12CTL0_ 0x0;' /* ADC12 Control 0 */

sfrw ADC12CTL0 = ADC12CTL0_;

#define ADC12CTL1_ 0x01A2 /* ADC12 Control 1 */

sfrw ADC12CTL1 = ADC12CTL1_;

/*ADC12中断控制类寄存器*/

#define ADC12IFG_ 0x01A4 /* ADC12 Interrupt Flag */

sfrw ADC12IFG = ADC12IFG_;

#define ADC12IE_ 0x01A6 /* ADC12 Interrupt Enable */

sfrw ADC12IE = ADC12IE_;

#define ADC12IV_ 0x01A8 /* ADC12 Interrupt Vector Word */

sfrw ADC12IV = ADC12IV_;

/*ADC12存贮器类寄存器*/

#define ADC12MEM_ 0x0140 /* ADC12 Conversion Memory */

#ifndef __IAR_SYSTEMS_ICC

#define ADC12MEM ADC12MEM_ /* ADC12 Conversion Memory (for assembler) */ #else

#define ADC12MEM ((int*) ADC12MEM_) /* ADC12 Conversion Memory (for C) */ #endif

#define ADC12MEM0_ ADC12MEM_ /* ADC12 Conversion Memory 0 */

sfrw ADC12MEM0 = ADC12MEM0_;

#define ADC12MEM1_ 0x0142 /* ADC12 Conversion Memory 1 */

sfrw ADC12MEM1 = ADC12MEM1_;

#define ADC12MEM2_ 0x0144 /* ADC12 Conversion Memory 2 */

sfrw ADC12MEM2 = ADC12MEM2_;

#define ADC12MEM3_ 0x0146 /* ADC12 Conversion Memory 3 */

sfrw ADC12MEM3 = ADC12MEM3_;

#define ADC12MEM4_ 0x0148 /* ADC12 Conversion Memory 4 */

sfrw ADC12MEM4 = ADC12MEM4_;

#define ADC12MEM5_ 0x014A /* ADC12 Conversion Memory 5 */

sfrw ADC12MEM5 = ADC12MEM5_;

#define ADC12MEM6_ 0x014C /* ADC12 Conversion Memory 6 */

sfrw ADC12MEM6 = ADC12MEM6_;

#define ADC12MEM7_ 0x014E /* ADC12 Conversion Memory 7 */

sfrw ADC12MEM7 = ADC12MEM7_;

#define ADC12MEM8_ 0x0150 /* ADC12 Conversion Memory 8 */

sfrw ADC12MEM8 = ADC12MEM8_;

#define ADC12MEM9_ 0x0152 /* ADC12 Conversion Memory 9 */

sfrw ADC12MEM9 = ADC12MEM9_;

#define ADC12MEM10_ 0x0154 /* ADC12 Conversion Memory 10 */

sfrw ADC12MEM10 = ADC12MEM10_;

#define ADC12MEM11_ 0x0156 /* ADC12 Conversion Memory 11 */

sfrw ADC12MEM11 = ADC12MEM11_;

#define ADC12MEM12_ 0x0158 /* ADC12 Conversion Memory 12 */

sfrw ADC12MEM12 = ADC12MEM12_;

#define ADC12MEM13_ 0x015A /* ADC12 Conversion Memory 13 */

sfrw ADC12MEM13 = ADC12MEM13_;

#define ADC12MEM14_ 0x015C /* ADC12 Conversion Memory 14 */

sfrw ADC12MEM14 = ADC12MEM14_;

#define ADC12MEM15_ 0x015E /* ADC12 Conversion Memory 15 */

sfrw ADC12MEM15 = ADC12MEM15_;

/*ADC12存贮控制类寄存器*/

#define ADC12MCTL_ 0x0080 /* ADC12 Memory Control */

#ifndef __IAR_SYSTEMS_ICC

#define ADC12MCTL ADC12MCTL_ /* ADC12 Memory Control (for assembler) */ #else

#define ADC12MCTL ((char*) ADC12MCTL_) /* ADC12 Memory Control (for C) */ #endif

#define ADC12MCTL0_ ADC12MCTL_ /* ADC12 Memory Control 0 */

sfrb ADC12MCTL0 = ADC12MCTL0_;

#define ADC12MCTL1_ 0x0081 /* ADC12 Memory Control 1 */

sfrb ADC12MCTL1 = ADC12MCTL1_;

#define ADC12MCTL2_ 0x0082 /* ADC12 Memory Control 2 */

sfrb ADC12MCTL2 = ADC12MCTL2_;

#define ADC12MCTL3_ 0x0083 /* ADC12 Memory Control 3 */

sfrb ADC12MCTL3 = ADC12MCTL3_;

#define ADC12MCTL4_ 0x0084 /* ADC12 Memory Control 4 */

sfrb ADC12MCTL4 = ADC12MCTL4_;

#define ADC12MCTL5_ 0x0085 /* ADC12 Memory Control 5 */

sfrb ADC12MCTL5 = ADC12MCTL5_;

#define ADC12MCTL6_ 0x0086 /* ADC12 Memory Control 6 */

sfrb ADC12MCTL6 = ADC12MCTL6_;

#define ADC12MCTL7_ 0x0087 /* ADC12 Memory Control 7 */

sfrb ADC12MCTL7 = ADC12MCTL7_;

#define ADC12MCTL8_ 0x0088 /* ADC12 Memory Control 8 */

sfrb ADC12MCTL8 = ADC12MCTL8_;

#define ADC12MCTL9_ 0x0089 /* ADC12 Memory Control 9 */

sfrb ADC12MCTL9 = ADC12MCTL9_;

#define ADC12MCTL10_ 0x008A /* ADC12 Memory Control 10 */

sfrb ADC12MCTL10 = ADC12MCTL10_;

#define ADC12MCTL11_ 0x008B /* ADC12 Memory Control 11 */

sfrb ADC12MCTL11 = ADC12MCTL11_;

#define ADC12MCTL12_ 0x008C /* ADC12 Memory Control 12 */

sfrb ADC12MCTL12 = ADC12MCTL12_;

#define ADC12MCTL13_ 0x008D /* ADC12 Memory Control 13 */

sfrb ADC12MCTL13 = ADC12MCTL13_;

#define ADC12MCTL14_ 0x008E /* ADC12 Memory Control 14 */

sfrb ADC12MCTL14 = ADC12MCTL14_;

#define ADC12MCTL15_ 0x008F /* ADC12 Memory Control 15 */

sfrb ADC12MCTL15 = ADC12MCTL15_;

/* ADC12CTL0 内8位控制寄存器位*/

#define ADC12SC 0x001 /*采样/转换控制位*/

#define ENC 0x002 /* 转换允许位*/

#define ADC12TOVIE 0x004 /*转换时间溢出中断允许位*/

#define ADC12OVIE 0x008 /*溢出中断允许位*/

#define ADC12ON 0x010 /*ADC12内核控制位*/

#define REFON 0x020 /*参考电压控制位*/

#define REF2_5V 0x040 /*内部参考电压的电压值选择位 '0'为1.5V; '1'为2.5V*/ #define MSH 0x080 /*多次采样/转换位*/

#define MSC 0x080 /*多次采样/转换位*/

/*SHT0 采样保持定时器0 控制ADC12的结果存贮器MEM0~MEM7的采样周期*/

#define SHT0_0 0*0x100 /*采样周期=TADC12CLK*4 */

#define SHT0_1 1*0x100 /*采样周期=TADC12CLK*8 */

#define SHT0_2 2*0x100 /*采样周期=TADC12CLK*16 */

#define SHT0_3 3*0x100 /*采样周期=TADC12CLK*32 */

#define SHT0_4 4*0x100 /*采样周期=TADC12CLK*64 */

#define SHT0_5 5*0x100 /*采样周期=TADC12CLK*96 */

#define SHT0_6 6*0x100 /*采样周期=TADC12CLK*128 */

#define SHT0_7 7*0x100 /*采样周期=TADC12CLK*192 */

#define SHT0_8 8*0x100 /*采样周期=TADC12CLK*256 */

#define SHT0_9 9*0x100 /*采样周期=TADC12CLK*384 */

#define SHT0_10 10*0x100 /*采样周期=TADC12CLK*512 */

#define SHT0_11 11*0x100 /*采样周期=TADC12CLK*768 */

#define SHT0_12 12*0x100 /*采样周期=TADC12CLK*1024 */

#define SHT0_13 13*0x100 /*采样周期=TADC12CLK*1024 */

#define SHT0_14 14*0x100 /*采样周期=TADC12CLK*1024 */

#define SHT0_15 15*0x100 /*采样周期=TADC12CLK*1024 */

/*SHT1 采样保持定时器1 控制ADC12的结果存贮器MEM8~MEM15的采样周期*/

#define SHT1_0 0*0x100 /*采样周期=TADC12CLK*4 */

#define SHT1_1 1*0x100 /*采样周期=TADC12CLK*8 */

#define SHT1_2 2*0x100 /*采样周期=TADC12CLK*16 */

#define SHT1_3 3*0x100 /*采样周期=TADC12CLK*32 */

#define SHT1_4 4*0x100 /*采样周期=TADC12CLK*64 */

#define SHT1_5 5*0x100 /*采样周期=TADC12CLK*96 */

#define SHT1_6 6*0x100 /*采样周期=TADC12CLK*128 */

#define SHT1_7 7*0x100 /*采样周期=TADC12CLK*192 */

#define SHT1_8 8*0x100 /*采样周期=TADC12CLK*256 */

#define SHT1_9 9*0x100 /*采样周期=TADC12CLK*384 */

#define SHT1_10 10*0x100 /*采样周期=TADC12CLK*512 */

#define SHT1_11 11*0x100 /*采样周期=TADC12CLK*768 */

#define SHT1_12 12*0x100 /*采样周期=TADC12CLK*1024 */

#define SHT1_13 13*0x100 /*采样周期=TADC12CLK*1024 */

#define SHT1_14 14*0x100 /*采样周期=TADC12CLK*1024 */

#define SHT1_15 15*0x100 /*采样周期=TADC12CLK*1024 */

/* ADC12CTL1 内8位控制寄存器位*/

#define ADC12BUSY 0x0001 /*ADC12忙标志位*/

#define CONSEQ_1 1*2 /*序列通道单次转换*/

#define CONSEQ_2 2*2 /*单通道多次转换*/

#define CONSEQ_3 3*2 /*序列通道多次转换*/

#define ADC12SSEL_0 0*8 /*ADC12内部时钟源*/

#define ADC12SSEL_1 1*8 /*ACLK*/

#define ADC12SSEL_2 2*8 /*MCLK*/

#define ADC12SSEL_3 3*8 /*SCLK*/

#define ADC12DIV_0 0*0x20 /*1分频*/

#define ADC12DIV_1 1*0x20 /*2分频*/

#define ADC12DIV_2 2*0x20 /*3分频*/

#define ADC12DIV_3 3*0x20 /*4分频*/

#define ADC12DIV_4 4*0x20 /*5分频*/

#define ADC12DIV_5 5*0x20 /*6分频*/

#define ADC12DIV_6 6*0x20 /*7分频*/

#define ADC12DIV_7 7*0x20 /*8分频*/

#define ISSH 0x0100 /*采样输入信号反向与否控制位*/

#define SHP 0x0200 /*采样信号(SAMPCON)选择控制位*/

#define SHS_0 0*0x400 /*采样信号输入源选择控制位 ADC12SC*/

#define SHS_1 1*0x400 /*采样信号输入源选择控制位 TIMER_A.OUT1*/ #define SHS_2 2*0x400 /*采样信号输入源选择控制位 TIMER_B.OUT0*/ #define SHS_3 3*0x400 /*采样信号输入源选择控制位 TIMER_B.OUT1*/ /*转换存贮器地址定义位*/

#define CSTARTADD_0 0*0x1000 /*选择MEM0首地址*/

#define CSTARTADD_1 1*0x1000 /*选择MEM1首地址*/

#define CSTARTADD_2 2*0x1000 /*选择MEM2首地址*/

#define CSTARTADD_3 3*0x1000 /*选择MEM3首地址*/

#define CSTARTADD_4 4*0x1000 /*选择MEM4首地址*/

#define CSTARTADD_5 5*0x1000 /*选择MEM5首地址*/

#define CSTARTADD_6 6*0x1000 /*选择MEM6首地址*/

#define CSTARTADD_7 7*0x1000 /*选择MEM7首地址*/

#define CSTARTADD_8 8*0x1000 /*选择MEM8首地址*/

#define CSTARTADD_9 9*0x1000 /*选择MEM9首地址*/

#define CSTARTADD_10 10*0x1000 /*选择MEM10首地址*/

#define CSTARTADD_11 11*0x1000 /*选择MEM11首地址*/

#define CSTARTADD_12 12*0x1000 /*选择MEM12首地址*/

#define CSTARTADD_13 13*0x1000 /*选择MEM13首地址*/

#define CSTARTADD_14 14*0x1000 /*选择MEM14首地址*/

#define CSTARTADD_15 15*0x1000 /*选择MEM15首地址*/

/* ADC12MCTLx */

#define INCH_0 0 /*选择模拟量通道0 A0 */

#define INCH_1 1 /*选择模拟量通道0 A1*/

#define INCH_2 2 /*选择模拟量通道0 A2*/

#define INCH_4 4 /*选择模拟量通道0 A4*/

#define INCH_5 5 /*选择模拟量通道0 A5*/

#define INCH_6 6 /*选择模拟量通道0 A6*/

#define INCH_7 7 /*选择模拟量通道0 A7*/

#define INCH_8 8 /*VEREF+*/

#define INCH_9 9 /*VEREF-*/

#define INCH_10 10 /*片内温度传感器的输出*/

#define INCH_11 11 /*(A VCC-A VSS)/2*/

#define INCH_12 12 /*(A VCC-A VSS)/2*/

#define INCH_13 13 /*(A VCC-A VSS)/2*/

#define INCH_14 14 /*(A VCC-A VSS)/2*/

#define INCH_15 15 /*(A VCC-A VSS)/2*/

/*参考电压源选择位*/

#define SREF_0 0*0x10 /*VR+ = A VCC; VR- = A VSS*/

#define SREF_1 1*0x10 /*VR+ = VREF+; VR- = A VSS*/

#define SREF_2 2*0x10 /*VR+ = VEREF+; VR- = A VSS*/

#define SREF_3 3*0x10 /*VR+ = VEREF+; VR- = A VSS*/

#define SREF_4 4*0x10 /*VR+ = A VCC; VR- = VREF-*/

#define SREF_5 5*0x10 /*VR+ = VREF+; VR- = VREF-*/

#define SREF_6 6*0x10 /*VR+ = VEREF+; VR- = VREF-*/

#define SREF_7 7*0x10 /*VR+ = VEREF+; VR- = VREF-*/

#define EOS 0x80 /*序列结束选择位*/

/************************************************************

* USART 串口寄存器"UCTL","UTCTL","URCTL"定义的各个位可串口1 串口2公用

************************************************************/

/* UCTL 串口控制寄存器*/

#define PENA 0x80 /*校验允许位*/

#define PEV 0x40 /*偶校验为0时为奇校验*/

#define SPB 0x20 /*停止位为2 为0时停止位为1*/

#define CHAR 0x10 /*数据位为8位为0时数据位为7位*/

#define LISTEN 0x08 /*自环模式(发数据同时在把发的数据接收回来)*/

#define SYNC 0x04 /*同步模式为0异步模式*/

#define MM 0x02 /*为1时地址位多机协议(异步) 主机模式(同步);为0时线路空闲多机协议(异步) 从机模式(同步)*/

#define SWRST 0x01 /*控制位*/

/* UTCTL 串口发送控制寄存器*/

#define CKPH 0x80 /*时钟相位控制位(只同步方式用)为1时时钟UCLK延时半个周期*/ #define CKPL 0x40 /*时钟极性控制位为1时异步与UCLK相反;同步下降延有效*/

#define SSEL1 0x20 /*时钟源选择位:与SSEL0组合为0,1,2,3四种方式*/

#define SSEL0 0x10 /*"0"选择外部时钟,"1"选择辅助时钟,"2","3"选择系统子时钟 */

#define URXSE 0x08 /*接收触发延控制位(只在异步方式下用)*/

#define TXWAKE 0x04 /*多处理器通信传送控制位(只在异步方式下用)*/

#define STC 0x02 /*外部引脚STE选择位为0时为4线模式为1时为3线模式*/

#define TXEPT 0x01 /*发送器空标志*/

/* URCTL 串口接收控制寄存器同步模式下只用两位:FE和OE*/

#define FE 0x80 /*帧错标志*/

#define PE 0x40 /*校验错标志位*/

#define OE 0x20 /*溢出标志位*/

#define BRK 0x10 /*打断检测位*/

#define URXEIE 0x08 /*接收出错中断允许位*/

#define URXWIE 0x04 /*接收唤醒中断允许位*/

#define RXWAKE 0x02 /*接收唤醒检测位*/

#define RXERR 0x01 /*接收错误标志位*/

/************************************************************

* USART 0 串口0寄存器定义

************************************************************/

#define U0CTL_ 0x0070 /* UART 0 Control */

sfrb U0CTL = U0CTL_;

#define U0TCTL_ 0x0071 /* UART 0 Transmit Control */

sfrb U0TCTL = U0TCTL_;

#define U0RCTL_ 0x0072 /* UART 0 Receive Control */

sfrb U0RCTL = U0RCTL_;

#define U0MCTL_ 0x0073 /* UART 0 Modulation Control */

sfrb U0MCTL = U0MCTL_;

#define U0BR0_ 0x0074 /* UART 0 Baud Rate 0 */

sfrb U0BR0 = U0BR0_;

#define U0BR1_ 0x0075 /* UART 0 Baud Rate 1 */

sfrb U0BR1 = U0BR1_;

#define U0RXBUF_ 0x0076 /* UART 0 Receive Buffer */

const sfrb U0RXBUF = U0RXBUF_;

#define U0TXBUF_ 0x0077 /* UART 0 Transmit Buffer */

sfrb U0TXBUF = U0TXBUF_;

/* Alternate register names */

#define UCTL0_ 0x0070 /* UART 0 Control */

sfrb UCTL0 = UCTL0_;

#define UTCTL0_ 0x0071 /* UART 0 Transmit Control */

sfrb UTCTL0 = UTCTL0_;

#define URCTL0_ 0x0072 /* UART 0 Receive Control */

sfrb URCTL0 = URCTL0_;

#define UMCTL0_ 0x0073 /* UART 0 Modulation Control */

sfrb UMCTL0 = UMCTL0_;

#define UBR00_ 0x0074 /* UART 0 Baud Rate 0 */

sfrb UBR00 = UBR00_;

#define UBR10_ 0x0075 /* UART 0 Baud Rate 1 */

sfrb UBR10 = UBR10_;

#define RXBUF0_ 0x0076 /* UART 0 Receive Buffer */

const sfrb RXBUF0 = RXBUF0_;

#define TXBUF0_ 0x0077 /* UART 0 Transmit Buffer */

sfrb TXBUF0 = TXBUF0_;

#define UCTL_0_ 0x0070 /* UART 0 Control */

sfrb UCTL_0 = UCTL_0_;

#define UTCTL_0_ 0x0071 /* UART 0 Transmit Control */

sfrb UTCTL_0 = UTCTL_0_;

#define URCTL_0_ 0x0072 /* UART 0 Receive Control */

sfrb URCTL_0 = URCTL_0_;

#define UMCTL_0_ 0x0073 /* UART 0 Modulation Control */ sfrb UMCTL_0 = UMCTL_0_;

#define UBR0_0_ 0x0074 /* UART 0 Baud Rate 0 */

sfrb UBR0_0 = UBR0_0_;

#define UBR1_0_ 0x0075 /* UART 0 Baud Rate 1 */

sfrb UBR1_0 = UBR1_0_;

#define RXBUF_0_ 0x0076 /* UART 0 Receive Buffer */

const sfrb RXBUF_0 = RXBUF_0_;

#define TXBUF_0_ 0x0077 /* UART 0 Transmit Buffer */

sfrb TXBUF_0 = TXBUF_0_;

/************************************************************ * USART 1 串口1寄存器定义

************************************************************/

#define U1CTL_ 0x0078 /* UART 1 Control */

sfrb U1CTL = U1CTL_;

#define U1TCTL_ 0x0079 /* UART 1 Transmit Control */

sfrb U1TCTL = U1TCTL_;

#define U1RCTL_ 0x007A /* UART 1 Receive Control */

sfrb U1RCTL = U1RCTL_;

#define U1MCTL_ 0x007B /* UART 1 Modulation Control */ sfrb U1MCTL = U1MCTL_;

#define U1BR0_ 0x007C /* UART 1 Baud Rate 0 */

sfrb U1BR0 = U1BR0_;

#define U1BR1_ 0x007D /* UART 1 Baud Rate 1 */

sfrb U1BR1 = U1BR1_;

#define U1RXBUF_ 0x007E /* UART 1 Receive Buffer */ const sfrb U1RXBUF = U1RXBUF_;

#define U1TXBUF_ 0x007F /* UART 1 Transmit Buffer */ sfrb U1TXBUF = U1TXBUF_;

#define UCTL1_ 0x0078 /* UART 1 Control */

sfrb UCTL1 = UCTL1_;

#define UTCTL1_ 0x0079 /* UART 1 Transmit Control */ sfrb UTCTL1 = UTCTL1_;

#define URCTL1_ 0x007A /* UART 1 Receive Control */ sfrb URCTL1 = URCTL1_;

#define UMCTL1_ 0x007B /* UART 1 Modulation Control */ sfrb UMCTL1 = UMCTL1_;

#define UBR01_ 0x007C /* UART 1 Baud Rate 0 */

sfrb UBR01 = UBR01_;

#define UBR11_ 0x007D /* UART 1 Baud Rate 1 */

sfrb UBR11 = UBR11_;

#define RXBUF1_ 0x007E /* UART 1 Receive Buffer */ const sfrb RXBUF1 = RXBUF1_;

#define TXBUF1_ 0x007F /* UART 1 Transmit Buffer */

sfrb TXBUF1 = TXBUF1_;

#define UCTL_1_ 0x0078 /* UART 1 Control */

sfrb UCTL_1 = UCTL_1_;

#define UTCTL_1_ 0x0079 /* UART 1 Transmit Control */ sfrb UTCTL_1 = UTCTL_1_;

#define URCTL_1_ 0x007A /* UART 1 Receive Control */ sfrb URCTL_1 = URCTL_1_;

#define UMCTL_1_ 0x007B /* UART 1 Modulation Control */ sfrb UMCTL_1 = UMCTL_1_;

#define UBR0_1_ 0x007C /* UART 1 Baud Rate 0 */

sfrb UBR0_1 = UBR0_1_;

#define UBR1_1_ 0x007D /* UART 1 Baud Rate 1 */

sfrb UBR1_1 = UBR1_1_;

#define RXBUF_1_ 0x007E /* UART 1 Receive Buffer */ const sfrb RXBUF_1 = RXBUF_1_;

#define TXBUF_1_ 0x007F /* UART 1 Transmit Buffer */ sfrb TXBUF_1 = TXBUF_1_;

单片机89C51特殊功能寄存器

单片机89C51特殊功能寄存器 高手从菜鸟忽略作起之(三)单片机共有21个特殊功能寄存器,下面从其功能,位结构,地址,读写方法对其作详细介绍。 一,特殊功能寄存器总述。 二,特殊功能寄存器分类:

1.CPU控制类(6个):Acc,B,PSW,DPL,DPH,SP. 2.中断控制类(2个):IE,IP. 3.计数/定时类(6个):TMOD,TCON,TL0,TL1,TH0,TH1. 4.并口端口类(4个):P0,P1,P2,P3. 5.串口端口类(2个):SCON,SBUF. 6.电源管理类(1个):PCON. 三,特殊功能寄存器详述: 1.CPU控制类(6个):Acc,B,PSW,DPL,DPH,SP 1.1 Acc:累加器,可按位,字节访问。 1.2 B:辅助寄存器,用于进行乘除运算。 P:奇偶校验位:P=0:1的个数为奇数;P=1,1的个数为偶数。 ---:保留位,没使用。 OV:Over flow,溢出标志,OV=0:没溢出;OV=1:溢出。 Rs0:Regedit select 0,寄存器选取0. RS1:Regedit select 1,寄存器选取1。 F0:User Flag bit:用户自定义位。 Ac: Auxiliary Carry,辅助进位标志,由低4位运算时,是否有向高4位进位。Cy:Carry,进位标志。字节运算时,是否有进位。 1.4 DPTL:Data Pointer Register Low,数据指针寄存器低8位。 1.5 DPTH:Data Pointer Register High,数据指针寄存器高8位。 1.6 SP: Stock Pointer:栈指针寄存器。 2.中断控制类寄存器(2个):IE,IP EX0: Enable Extra 0 ,INT0 中断允许位。 ET0: Enable Timer 0,C/T0 中断允许位。 EX1: Enable Extra 1 ,INT1 中断允许位。 ET1: Enable Timer 1,C/T1 中断允许位。 ES: Enable serial ,串行中断允许位。 ET2: Enable Timer 2,C/T2 中断允许位。

MCS-51系列特殊功能寄存器

MCS-51系列特殊功能寄存器(80H~FFH) 1.P0 (80H) 2.SP 栈指针(81H) 3.DPTR 数据指针(由DPH和DPL组成) DPL 数据指针低八位(82H) DPH 数据指针高八位(83H) 4.PCON 电源管理寄存器(87H) SMOD :波特率倍增位。SMOD=0时,不变;SMOD=1时,倍增。 GF1,GF0 :通用标志位。 PD :掉电方式位。PD=1时,进入掉电方式。 IDL :待机方式位。IDL=1时,进入待机方式。 5.TMOD 定时/记数方式寄存器(89H) GATE :门控位。GATE=0时,直接由TR启动定时器;GATE=1时,须外部INT为1时,且TR启动定时器。 C/T :功能选择位。C/T=0时,为定时器;C/T=1时,为计数器。 M1,M0 :方式选择位。

6.T CON 定时/记数控制寄存器(88H) TF1 :定时器1溢出标志。由硬件置1,并且进入中断;进入中断服务程序后,由硬件清0,查询方式下由软件清0。 TR1 :定时器运行控制位。TR1=0时,关闭T1;TR1=1时,启动T1。 TF0 :定时器0溢出标志。由硬件置1,并且进入中断;进入中断服务程序后,由硬件清0,查询方式下由软件清0。 TR0 :定时器运行控制位。TR0=0时,关闭T0;TR0=1时,启动T0。 IE1 :外部中断1请求标志。 IT1 :外部中断1触发方式。IT1=0时,为低电平触发方式;IT1=1时,为负跳变触发方式(边沿触发)。 IE0 :外部中断0请求标志。 IT0 :外部中断0触发方式。IT0=0时,为低电平触发方式;IT0=1时,为负跳变触发方式(边沿触发)。 7.P1 (90H) SM0,SM1 :串行方式控制。 SM2 :多机通讯控制位。SM2=0时,禁止多机通讯;SM2=1时,允许多机通讯。

51_52系列单片机特殊功能寄存器及资源映射方式总结

51系列单片机特殊功能寄存器总结 第一节:片内RAM映射: 51:00H_7FH 128B片内(DATA),其中00H-07H: bank0,08H-0FH: bank1, 10H-17H: bank2,18H-1FH:bank3. 20H-2FH: 位寻址区(bdata) 30H-7FH: 堆栈区。 80H-FFH: SFR区 52:增加了80H-FFH间接寻址的片内RAM(IDATA) 第二节:特殊功能寄存器(51) ①TCON,地址:88H,定时器计数器控制,中断控制 IT0/1:外部中断触发方式控制,置0,为低电平触发,置1,为下降沿触发。每个机器周期的S5P2器件多外部触发采样。响应中断需要两个机器 周期。 IE0/1:外部中断请求标志,CPU响应中断后,硬件自动将IE清0 TFx,定时器Tx溢出标志,计数溢出时,硬件将其置位,响应中断后,硬件将其清0,该位可由程序查询。 TRx, 定时器x运行控制,置1则启动定时器,清0则停止定时器。 ②TMOD,地址:89H, 定时器计数器工作方式控制 counter对外部输入外冲计数,计一次数需要两个机器周期。 GATE: 取反后与外部中断输入或运算后再同TCON的TRx位相与控制计数器的启与停,GATE为0时,允许TRx开启或停止计数器,为1时,允许INTx开启或停止计数器。 ③TL0, 地址:8AH, 定时器0低八位 ④TL1, 地址:8BH, 定时器1低八位

⑤TH0, 地址:8CH, 定时器0高八位 ⑥TH1, 地址:8DH, 定时器1高八位1 ⑦SCON, 地址:98H,串行通信控制寄存器 S M2:方式2和方式3的多机通信控制位,在方式0中,SM2应置0。 REN:允许串行接收位,由软件置1时,允许接收,清0时。禁止接收 TB8:方式2和方式3中,发送的第9位数据,需要时由软件置位或复位。 RB8: 方式2和方式3中,接收到的第9位数据,在方式1时,RB是接收到停止位,在方式0时,不使用RB8. TI:接收中断标志,由硬件置1,在方式0时,串行发送到第8位结束时置1;在其他方式,串行口发送停止位时置1。TI必须由软件清0。 RI:接收中断标志,由硬件置1。在方式0时(SM2应置0),接收到第8位结束时置1,当SM2=0的其他方式(方式0,1,3)时,接收到停止位置位“1”,当SM2=1时,若串口工作在方式2和3,接收到的第9位数据(RB8)为1时,才激活RI。在方式1时,只有接收到有效的停止位时才会激活RI。RI必须由软件清0 ⑧SBUF, 地址:99H,串行通信数据缓冲器 ⑨IE, 地址:A8H,中断使能控制寄存器 EA: globle interuption Enable, 1: Enable, 0: Disable ET2: timers2 flowover interuption Enable for52, 1: Enable, 0: Disable ES: serrial port interuption Enable, 1: Enable, 0: Disable ET1/0: timers1/0 flowover interuption Enable, 1: Enable, 0: Disable EX1/0: external interuption Enable, 1: Enable, 0: Disable

单片机特殊功能寄存器及相应功能

SPECIAL FUNCTION REGISTER ?? Register (MSB) (LSB) Byte Symbol b7 b6 b5 b4 b3 b2 b1 b0 Address P0 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 80H(128) SP 81H(129) DPL 82H(130) DPH 83H(131) PCON SMOD - - - GF1 GF0 PD IDL 87H(135) *PCON SMOD - - WLE GF1 GF0 PD IDL 87H(135) TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 88H(136) TMOD GATE C/T M1 M0 GATE C/T M1 M0 89H(137) TL0 8AH(138) TL1 8BH(139) TH0 8CH(140) TH1 8DH(141) P1 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 T2EX T2 90H(144) *P1 SDA SCL RT2 T2 CT3I CT2I CT1I CT0I 90H(144) SCON SM0 SM1 SM2 REN TB8 RB8 TI RI 98H(152) SBUF 99H(153) P2 P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 0A0H(208) IE EA - ET2 ES ET1 EX1 ET0 EX0 0A8H(168) *IEN0 EA EAD ES1 ES0 ET1 EX1 ET0 EX0 0A8H(168) +CML0 0A9H(169) +CML1 0AAH(170) +CML2 0ABH(171) +CTL0 0ACH(172) +CTL1 0ADH(173) +CTL2 0AEH(174) +CTL3 0AFH(175) P3 RD WR T1 T0 INT1 INT0 TXD RXD 0B0H(176) IP - - PT2 PS PT1 PX1 PT0 PX0 0B8H(184) *IP0 - PAD PS1 PS0 PT1 PX1 PT0 PX0 0B8H(184) +P4 CMT1 CMT0 CMSR5 CMSR4 CMSR3 CMSR2 CMSR1 CMSR0 0C0H(192) +P5 ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0 0C4H(196) +ADCON ADC.1 ADC.0 ADEX ADCI ADCS AADR2 AADR1 AADR0 0C5H(197)

51单片机特殊功能寄存器功能一览表

51单片机特殊功能寄存器功能一览表 21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。 在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。这样的特殊功能寄存器51单片机共有21个并且都是可寻址的列表如下(其中带*号的为52系列所增加的特殊功能寄存器):

分别说明如下: 1、ACC---是累加器,通常用A表示 这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。该标志常用作程序分枝转移的判断条件。 2、B--一个寄存器 在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。 3、PSW-----程序状态字。 这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。它的各位功能请看下表: 下面我们逐一介绍各位的用途 CY:进位标志。 8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。这样就没事了。有进、借位,CY=1;无进、借位,CY =0 例:78H+97H(01111000+10010111) AC:辅助进、借位(高半字节与低半字节间的进、借位)。

特殊功能寄存器地址与控制位

/************************************************************ * 特殊功能寄存器地址和控制位 ************************************************************/ /*中断使能1*/ #define IE1_ 0x0000 sfrb IE1 = IE1_; #define WDTIE 0x01 /*看门狗中断使能*/ #define OFIE 0x02 /*外部晶振故障中断使能*/ #define NMIIE 0x10 /*非屏蔽中断使能*/ #define ACCVIE 0x20 /*可屏蔽中断使能/flash写中断错误*/ #define URXIE0 0x40 /*串口0接收中断使能*/ #define UTXIE0 0x80 /*串口0发送中断使能*/ /*中断标志1*/ #define IFG1_ 0x0002 sfrb IFG1 = IFG1_; #define WDTIFG 0x01 /*看门狗中断标志*/ #define OFIFG 0x02 /*外部晶振故障中断标志*/ #define NMIIFG 0x10 /*非屏蔽中断标志*/ #define URXIFG0 0x40 /*串口0接收中断标志*/ #define UTXIFG0 0x80 /*串口0发送中断标志*/ /* 中断模式使能1 */ #define ME1_ 0x0004 sfrb ME1 = ME1_; #define URXE0 0x40 /* 串口0接收中断模式使能 */ #define USPIE0 0x40 /* 同步中断模式使能 */ #define UTXE0 0x80 /* 串口0发送中断模式使能 */ /* 中断使能2 */ #define IE2_ 0x0001 sfrb IE2 = IE2_; #define URXIE1 0x10 /* 串口1接收中断使能 */ #define UTXIE1 0x20 /* 串口1发送中断使能 */ /* 中断标志2 */ #define IFG2_ 0x0003 sfrb IFG2 = IFG2_; #define URXIFG1 0x10 /* 串口1接收中断标志 */ #define UTXIFG1 0x20 /* 串口1发送中断标志 */ /* 中断模式使能2 */ #define ME2_ 0x0005 sfrb ME2 = ME2_; #define URXE1 0x10 /* 串口1接收中断模式使能 */ #define USPIE1 0x10 /* 同步中断模式使能 */ #define UTXE1 0x20 /* 串口1发送中断模式使能 */ /************************************************************

单片机寄存器汇总表图文稿

单片机寄存器汇总表 Company number【1089WT-1898YT-1W8CB-9UUT-92108】

51单片机寄存器功能一览表 21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。 在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。这样的特殊功能寄存器51单片机共有21个并且都是可寻址的列表如下(其中带*号的为52系列所增加的特殊功能寄存器):

分别说明如下: 1、ACC---是累加器,通常用A表示 这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离

不开它。自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。该标志常用作程序分枝转移的判断条件。 2、B--一个寄存器 在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。 3、PSW-----程序状态字。 这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。它的各位功能请看下表: 下面我们逐一介绍各位的用途 CY:进位标志。 8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办最高位就进到这里来。这样就没事了。有进、借位,CY=1;无进、借位,CY=0 AC:辅助进、借位(高半字节与低半字节间的进、借位)。 例:57H+3AH(01010111+00111010)

51单片机特殊功能寄存器详细说明

/*-------------------------------------------------------------------------- REG51.H Header file for generic 80C51 and 80C31 microcontroller. Copyright (c 1988-2001 Keil Elektronik GmbH and Keil Software, Inc. All rights reserved. --------------------------------------------------------------------------*/ /* BYTE Register */ sfr P0 = 0x80; sfr P1 = 0x90; sfr P2 = 0xA0; sfr P3 = 0xB0; sfr PSW = 0xD0; 程序状态字 sfr ACC = 0xE0; 累加器 sfr B = 0xF0; B寄存器 sfr SP = 0x81; 堆栈指针 sfr DPL = 0x82; 数据指针低八位 sfr DPH = 0x83; 数据指针高八位 sfr PCON = 0x87; 波特率选择寄存器 sfr TCON = 0x88; 定时器/计数器控制寄存器

sfr TMOD = 0x89; 定时器方式选择寄存器 sfr TL0 = 0x8A; 定时器0低八位 sfr TL1 = 0x8B; 定时器1低八位 sfr TH0 = 0x8C; 定时器0高八位 sfr TH1 = 0x8D; 定时器1高八位 sfr IE = 0xA8; 中断允许寄存器 sfr IP = 0xB8; 中断优先级寄存器 sfr SCON = 0x98; 串行控制寄存器 sfr SBUF = 0x99; 串行数据缓冲器 /* BIT Register */ /* PSW */ 程序状态字 sbit CY = 0xD7; 有无进位或者借位 sbit AC = 0xD6; Auxiliary Carry有无低四位向高四位的进位或借位 sbit F0 = 0xD5; 用户管理的标志位,可根据自己的需求设定 sbit RS1 = 0xD4; 这两位用于选择当前工作寄存器区。8051有8个8位寄存器R0~R7,它 们在RAM中的地址可以根据用户需要来确定。 sbit RS0 = 0xD3; RS1 RS0:R0~R7的地址0 0:00H~07H 0 1:08H~0FH 1 0:10H~17H 1 1:18H~1FH

51单片机的特殊功能寄存器

51单片机的特殊功能寄存器 通过前面课程的学习,我们已知道了单片机的内部有ROM、有RAM、有并行I/O 口,那么,除了这些东西之外,单片机内部究竟还有些什么?这些个零碎的东西怎么连在一起的? 下面就让我们来对单片机内部作一个完整的分析吧! 从图中我们可以看出,在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、 P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在一个51单片机 的内部包含了这么多的东西。 对图进行进一步的分析,我们已知,对并行I/O口的读写只要将数据送入到相应I/O口的锁存器就可以了,那么对于定时 /计数器,串行I/O口等怎么用呢?在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。事实上,我们已接触过P1 这个特殊功能寄存器了,还有哪些呢?看下表 符号地址功能介绍 B F0H B寄存器 ACC E0H 累加器 PSW D0H 程序状态字 IP B8H 中断优先级控制寄存器 P3 B0H P3口锁存器 IE A8H 中断允许控制寄存器

P2 A0H P2口锁存器 SBUF 99H串行口锁存器 SCON 98H串行口控制寄存器 P1 90H P1口锁存器 TH1 8DH定时器/计数器1(高8位) TH0 8CH 定时器/计数器1(低8位) TL1 8BH 定时器/计数器0(高8位) TL0 8AH 定时器/计数器0(低8位) TMOD 89H定时器/计数器方式控制寄存器 TCON 88H 定时器/计数器控制寄存器 DPH 83H 数据地址指针(高8位) DPL 82H 数据地址指针(低8位) SP 81H 堆栈指针 P0 80H P0口锁存器 PCON 87H电源控制寄存器 下面,我们介绍一下几个常用的SFR。 1、ACC---是累加器,通常用A表示。 这 是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在 ACC中的缘故吧。它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。自身带有全零标志Z,若A=0则 Z=1;若A≠0则z=0。该标志常用作程序分枝转移的判断条件。 2、B--一个寄存器。 在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。 3、PSW-----程序状态字。这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。它的各位功能请看下表: 下面我们逐一介绍各位的用途 CY:进位标志。8051中的运算器是一种8位的运算器,我们知道,8位运算器只

c51特殊功能寄存器

51单片机的特殊功能寄存器 2009-03-16 10:16 通过前面课程的学习,我们已知道了单片机的内部有ROM、有RAM、有并行I/O 口,那么,除了这些东西之外,单片机内部究竟还有些什么?这些个零碎的东西怎么连在一起的? 下面就让我们来对单片机内部作一个完整的分析吧! 从图中我们可以看出,在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有 RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在一个51单片机的内部包含了这么多的东西。 对图进行进一步的分析,我们已知,对并行I/O口的读写只要将数据送入到相应I/O口的锁存器就可以了,那么对于定时/计数器,串行I/O口等怎么用呢?在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。事实上,我们已接触过P1这个特殊功能寄存器了,还有哪些呢?看下表

下面,我们介绍一下几个常用的SFR。 1、ACC---是累加器,通常用A表示。 这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。自身带有全零标志Z,若A=0则 Z=1;若A≠0则z=0。该标志常用作程序分枝转移的判断条件。 2、B--一个寄存器。 在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。 3、PSW-----程序状态字。 这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。它的各位功能请看下表: 下面我们逐一介绍各位的用途 CY:进位标志。8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。这样就没事了。有进、借位,CY=1;无进、借位,CY=0 例:78H+97H(01111000+10010111) AC:辅助进、借位(高半字节与低半字节间的进、借位)。 例:57H+3AH(01010111+00111010) F0:用户标志位,由用户(编程人员)决定什么时候用,什么时候不用。 RS1、RS0:工作寄存器组选择位。这个我们已知了。

51单片机寄存器汇总表

51单片机寄存器功能一览表 21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。 在51单片机部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O 口,中断系统,以及一个部的时钟电路。在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。这样的特殊功能寄存器51单片机共有21个并且都是可寻址的列表如下(其中带*号的为52系列所增加的特殊功能寄存器):

分别说明如下: 1、ACC---是累加器,通常用A表示 这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。该标志常用作程序分枝转移的判断条件。 2、B--一个寄存器 在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。 3、PSW-----程序状态字。 这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU 的当前状态,并作出相应的处理。它的各位功能请看下表: 下面我们逐一介绍各位的用途 CY:进位标志。

单片机指令和寄存器英语词汇

按功能分为五大类: (1)数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX(Move External RAM)对外部RAM的数据传送; XCH(Exchange)字节交换; XCHD(Exchange low-order Digit)低半字节交换; PUSH(Push onto Stack)入栈; POP (Pop from Stack)出栈; (2)算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; (3)逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC(Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap)低4位与高4位交换; (4)控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移; DJNZ (Decrement Jump if Not Zero)减1后不为0则转移; JZ (Jump if Zero)结果为0则转移;

51单片机的特殊功能寄存器详细表

51单片机的特殊功能寄存器详细列表 Symbol BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0Address P0P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.080H SP81H DPL82H DPH83H PCON SMOD---GF1GF0PD IDL87H *PCON SMOD--WLE GF1GF0PD IDL87H TCON TF1TR1TF0TR0IE1IT1IE0IT088H TMOD GATE C/T M1M0GATE C/T M1M089H TL08AH TL18BH TH08CH TH18DH P1P1.7P1.6P1.5P1.4P1.3P1.2T2EX T290H *P1SDA SCL RT2T2CT3I CT2I CT1I CT0I90H SCON SM0SM1SM2REN TB8RB8TI RI98H SBUF99H P2P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.00A0H IE EA-ET2ES ET1EX1ET0EX00A8H *IEN0EA EAD ES1ES0ET1EX1ET0EX00A8H +CML00A9H +CML10AAH +CML20ABH +CTL00ACH +CTL10ADH +CTL20AEH +CTL30AFH P3RD WR T1T0INT1INT0TXD RXD0B0H IP--PT2PS PT1PX1PT0PX00B8H *IP0-PAD PS1PS0PT1PX1PT0PX00B8H +P4CMT1CMT0CMSR 5 CMSR 4 CMSR 3 CMSR 2 CMSR 1 CMSR 0C0H +P5ADC7ADC6ADC5ADC4ADC3ADC2ADC1ADC00C4H +ADCON ADC.1ADC.0ADEX ADCI ADCS AADR 2 AADR 1 AADR 0C5H +ADCH0C6H T2CON TF2EXF2RCLK TCLK EXEN 2 TR2C/T2 3CP/R L2 0C8H *TM2IR T2OV CMI2CMI1CMI0CTI3CTI2CTI1CTI00C8H +CMH00C9H RCAP2L0CAH *CMH10CAH

MCS-51单片机的特殊功能寄存器

MCS-51单片机的特殊功能寄存器 从图中我们可以看出,在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在一个51单片机的内部包含了这么多的东西。 对图进行进一步的分析,我们已知,对并行I/O口的读写只要将数据送入到相应I/O 口的锁存器就可以了,那么对于定时/计数器,串行I/O口等怎么用呢?在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。事实上,我们已接触过P1这个特殊功能寄存器了,还有哪些呢?看下表

下面,我们介绍一下几个常用的SFR。 1、ACC---是累加器,通常用A表示。 这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。该标志常用作程序分枝转移的判断条件。 2、B--一个寄存器。 在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。

3指针寄存器 (1)程序计数器PC 指明即将执行的下一条指令的地址,16位,寻址64KB范围, 复位时PC = 0000H (2)堆栈指针SP 指明栈顶元素的地址,8位,可软件设置初值,复位时SP = 07H (3)数据指针DPTR @R0、@R1、@DPTR;指明访问的数据存储器的单元地址,16位,寻址范围64KB。DPTR = DPH + DPL。可以用它来访问外部数据存储器中的任一单元,如果不用,也可以作为通用寄存器来用,由我们自已决定如何使用。分成DPL(低8位)和DPH(高8位)两个寄存器。用来存放16位地址值,以便用间接寻址或变址寻址的方式对片外数据RAM或程序存储器作64K字节范围内的数据操作 4、PSW-----程序状态字。 这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU 的当前状态,并作出相应的处理。它的各位功能请看下表: CY:进位标志。8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。这样就没事了。有进、借位,CY=1;无进、借位,CY=0 例:78H+97H(01111000+10010111) AC:辅助进、借位(高半字节与低半字节间的进、借位)。 例:57H+3AH(01010111+00111010) 下面我们逐一介绍各位的用途 F0:用户标志位,由用户(编程人员)决定什么时候用,什么时候不用。 RS1、RS0:工作寄存器组选择位。这个我们已知了。 0V:溢出标志位。运算结果按补码运算理解。有溢出,OV=1;无溢出,OV=0。什么是溢出我们后面的章节会讲到。 P:奇偶校验位:它用来表示ALU运算结果中二进制数位“1”的个数的奇偶性。若为奇数,则P=1,否则为0。运算结果有奇数个1,P=1;运算结果有偶数个1,P=0。 例:某运算结果是78H(01111000),显然1的个数为偶数,所以P=0。 5、P0、P1、P2、P3------这个我们已经知道,是四个并行输入/输出口的寄存器。它里面的内容对应着管脚的输出。

单片机寄存器名称

【转】【51单片机特殊功能寄存器功能一览表】 Posted on 2011-03-26 15:07 香格里拉\(^o^)/阅读(688) 评论(0)编辑收藏 【转】【51单片机寄存器功能一览表】 21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SF R存储空间中,地址空间为80H-FFH,在这片SF R空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。 在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有R OM,用来存放程序,有R AM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能 寄存器(SF R)。这样的特殊功能寄存器51单片机共有21个并且都是可寻址的列表如下(其中带*号的为52系列所增加的特殊功能寄存器):

分别说明如下: 1、ACC---是累加器,通常用A表示 这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。该标志常用作程序分枝转移的判断条件。 2、B--一个寄存器 在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。 3、PSW-----程序状态字。 这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。它的各位功能请看下表: 下面我们逐一介绍各位的用途 CY:进位标志。 8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。这样就没事了。有进、借位,CY=1;无进、借位,CY=0 例:78H+97H(01111000+10010111) AC:辅助进、借位(高半字节与低半字节间的进、借位)。

C51单片机21个特殊功能寄存器

21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83 个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。 在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。这样的特殊功能寄存器51单片机共有21个并且都是可寻址的列表如下(其中带*号的为52系列所增加的特殊功能寄存器):

分别说明如下: 1、ACC---是累加器,通常用A表示 这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。该标志常用作程序分枝转移的判断条件。 2、B--一个寄存器 在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。 3、PSW-----程序状态字。 这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。它的各位功能请看下表: 下面我们逐一介绍各位的用途CY:进位标志。,如果做加法的话,两数位运算器只能表示到0-255中的运算器是一种8位的运算器,我们知道,88051,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。这样就没事了。有相加可能会超过2550 CY==1;无进、借位,进、借位,CY )78H+97H(01111000+10010111例: 。(高半字节与低半字节间的进、借位)AC:辅助进、借位)(01010111+0011101057H+3AH例::用户标志位F0 由用户(编程人员)决定什么时候用,什么时候不用。 :工作寄存器组选择位、RS0RS1现场保两位的状态,就能任选一个工作寄存器区。这个特点提高了MCS-51中的RS1、RS0通过修改PSW不需的工作效率和响应中断的速度是很有利的。若在一个实际的应用系统中,护和现场恢复的速度。对于提高CPU 要四组工作寄存器,那么这个区域中多余单元可以作为一般的数据缓冲器使用。 0V:溢出标志位0。什么是溢出我们后面的章节会讲到。运算结果按补码运算理解。有溢出,OV=1;无溢出,OV= :奇偶校验位P。运算结果有,否则为0P=1ALU它用来表示运算结果中二进制数位“1”的个

51单片机特殊功能寄存器与串行通讯

51单片机特殊功能寄存器与串行通讯 一、IE(中断允许控制寄存器) IE(字节地址A8H)寄存器格式: D7D6D5D4D3D2D1D0 IE EA X ET2ES ET1EX1ET0EX0 位地址AFH ADH ACH ABH AAH A9H A8H IE各位功能说明 EA(IE.7)中断允许总控制位 X(IE.6)保留位 ET2(IE.5)定时器/计数器T2中断响应控制位 ES(IE.4)串口中断响应控制位 ET1(IE.3)定时器/计数器T1中断响应控制位 EX1(IE.2)外部中断INT1中断响应控制位 ET0(IE.1)定时器/计数器T0中断响应控制位 EX0(IE.0)外部中断INT0中断响应控制位 中断优先级控制(1为高级;0位低级) 默认顺序: INT0T0INT1T1Ri Ti 中断号n中断源中断向量8n+3 0外部中断0(INT0)0003H 1定时器0(T0)000BH 2外部中断1(INT1)0013H 3定时器1(T1)001BH 4串行口(Ri,Ti)0023H 二、TMOD(定时器方式控制寄存器) TMOD(字节地址:89H,不可位寻址)寄存器格式: 定时器、计数器1定时器、计数器0 D7D6D5D4D3D2D1D0 TMOD GATE C/T M1M0GATE C/T M1M0 1、GATE---门控制 GATE=1,由外部中断引脚INT1、INT0和控制寄存器的TR0,TR1来启动定时器 当INT0引脚为高电平时TR0置位,启动定时器T0 当INT1引脚为高电平时TR1置位,启动定时器T1 2、C/T---功能选择位 为0:作为定时器 为1:作为计数器 3、M0、M1---方式选择功能4种工作方式 M1M0工作方式计数器模式TMOD(设置定时器0模式)00方式013位计数器TMOD=0x00 01方式116位计数器TMOD=0x01 10方式2自动重装8位计数器TMOD=0x02

相关主题