当前位置:文档之家› stc12c5a60s2单片机头文件

stc12c5a60s2单片机头文件

stc12c5a60s2单片机头文件
stc12c5a60s2单片机头文件

文件下载完成后,文件格式改为.h后保存到头文件库中,如keil软件,找到keil安装文件:keil —>c51—>INC

头文件如下

//--------------------------------------------------------------------------------

//新一代1T 8051系列单片机内核特殊功能寄存器C51 Core SFRs

// 7 6 5 4 3 2 1 0 Reset Value

sfr ACC = 0xE0; //Accumulator 0000,0000

sfr B = 0xF0; //B Register 0000,0000

sfr PSW = 0xD0; //Program Status Word CY AC F0 RS1 RS0 OV F1 P 0000,0000

//-----------------------------------

sbit CY = PSW^7;

sbit AC = PSW^6;

sbit F0 = PSW^5;

sbit RS1 = PSW^4;

sbit RS0 = PSW^3;

sbit OV = PSW^2;

sbit P = PSW^0;

//-----------------------------------

sfr SP = 0x81; //Stack Pointer 0000,0111

sfr DPL = 0x82; //Data Pointer Low Byte 0000,0000

sfr DPH = 0x83; //Data Pointer High Byte 0000,0000

//--------------------------------------------------------------------------------

//新一代1T 8051系列单片机系统管理特殊功能寄存器

// 7 6 5 4 3 2 1 0 Reset Value

sfr PCON = 0x87; //Power Control SMOD SMOD0 LVDF POF GF1 GF0 PD IDL 0001,0000

// 7 6 5 4 3 2 1 0 Reset Value

sfr AUXR = 0x8E; //Auxiliary Register T0x12 T1x12 UART_M0x6 BRTR S2SMOD BRTx12 EXTRAM S1BRS 0000,0000

//-----------------------------------

sfr AUXR1 = 0xA2; //Auxiliary Register 1 - PCA_P4 SPI_P4 S2_P4 GF2 ADRJ - DPS 0000,0000

/*

PCA_P4:

0, 缺省PCA 在P1 口

1,PCA/PWM 从P1 口切换到P4 口: ECI 从P1.2 切换到P4.1 口,

PCA0/PWM0 从P1.3 切换到P4.2 口

PCA1/PWM1 从P1.4 切换到P4.3 口

SPI_P4:

0, 缺省SPI 在P1 口

1,SPI 从P1 口切换到P4 口: SPICLK 从P1.7 切换到P4.3 口

MISO 从P1.6 切换到P4.2 口

MOSI 从P1.5 切换到P4.1 口

SS 从P1.4 切换到P4.0 口

S2_P4:

0, 缺省UART2 在P1 口

1,UART2 从P1 口切换到P4 口: TxD2 从P1.3 切换到P4.3 口

RxD2 从P1.2 切换到P4.2 口

GF2: 通用标志位

ADRJ:

0, 10 位A/D 转换结果的高8 位放在ADC_RES 寄存器, 低2 位放在ADC_RESL 寄存器1,10 位A/D 转换结果的最高2 位放在ADC_RES 寄存器的低2 位, 低8 位放在ADC_RESL 寄存器

DPS: 0, 使用缺省数据指针DPTR0

1,使用另一个数据指针DPTR1

*/

//-----------------------------------

sfr WAKE_CLKO = 0x8F; //附加的SFR WAK1_CLKO

/*

7 6 5 4 3 2 1 0 Reset Value

PCAWAKEUP RXD_PIN_IE T1_PIN_IE T0_PIN_IE LVD_W AKE _ T1CLKO T0CLKO 0000,0000B

b7 - PCAWAKEUP : PCA 中断可唤醒powerdown。

b6 - RXD_PIN_IE : 当P3.0(RXD) 下降沿置位RI 时可唤醒powerdown(必须打开相应中断)。b5 - T1_PIN_IE : 当T1 脚下降沿置位T1 中断标志时可唤醒powerdown(必须打开相应中断)。b4 - T0_PIN_IE : 当T0 脚下降沿置位T0 中断标志时可唤醒powerdown(必须打开相应中断)。b3 - LVD_W AKE : 当CMPIN 脚低电平置位LVD 中断标志时可唤醒powerdown(必须打开相应中断)。

b2 -

b1 - T1CLKO : 允许T1CKO(P3.5) 脚输出T1 溢出脉冲,Fck1 = 1/2 T1 溢出率

b0 - T0CLKO : 允许T0CKO(P3.4) 脚输出T0 溢出脉冲,Fck0 = 1/2 T1 溢出率

*/

//-----------------------------------

sfr CLK_DIV = 0x97; //Clock Divder - - - - - CLKS2 CLKS1 CLKS0 xxxx,x000

//-----------------------------------

sfr BUS_SPEED = 0xA1; //Stretch register - - ALES1 ALES0 - RWS2 RWS1 RWS0 xx10,x011

/*

ALES1 and ALES0:

00 : The P0 address setup time and hold time to ALE negative edge is one clock cycle

01 : The P0 address setup time and hold time to ALE negative edge is two clock cycles.

10 : The P0 address setup time and hold time to ALE negative edge is three clock cycles. (default)

11 : The P0 address setup time and hold time to ALE negative edge is four clock cycles.

RWS2,RWS1,RWS0:

000 : The MOVX read/write pulse is 1 clock cycle.

001 : The MOVX read/write pulse is 2 clock cycles.

010 : The MOVX read/write pulse is 3 clock cycles.

011 : The MOVX read/write pulse is 4 clock cycles. (default)

100 : The MOVX read/write pulse is 5 clock cycles.

101 : The MOVX read/write pulse is 6 clock cycles.

110 : The MOVX read/write pulse is 7 clock cycles.

111 : The MOVX read/write pulse is 8 clock cycles.

*/

//--------------------------------------------------------------------------------

//新一代1T 8051系列单片机中断特殊功能寄存器

//有的中断控制、中断标志位散布在其它特殊功能寄存器中,这些位在位地址中定义

//其中有的位无位寻址能力,请参阅新一代1T 8051系列单片机中文指南

// 7 6 5 4 3 2 1 0 Reset Value

sfr IE = 0xA8; //中断控制寄存器EA ELVD EADC ES ET1 EX1 ET0 EX0 0x00,0000

//-----------------------

sbit EA = IE^7;

sbit ELVD = IE^6; //低压监测中断允许位

sbit EADC = IE^5; //ADC 中断允许位

sbit ES = IE^4;

sbit ET1 = IE^3;

sbit EX1 = IE^2;

sbit ET0 = IE^1;

sbit EX0 = IE^0;

//-----------------------

sfr IE2 = 0xAF; //Auxiliary Interrupt - - - - - - ESPI ES2 0000,0000B

//-----------------------

// 7 6 5 4 3 2 1 0 Reset Value

sfr IP = 0xB8; //中断优先级低位PPCA PLVD PADC PS PT1 PX1 PT0 PX0 0000,0000

//--------

sbit PPCA = IP^7; //PCA 模块中断优先级

sbit PLVD = IP^6; //低压监测中断优先级

sbit PADC = IP^5; //ADC 中断优先级

sbit PS = IP^4;

sbit PT1 = IP^3;

sbit PX1 = IP^2;

sbit PT0 = IP^1;

sbit PX0 = IP^0;

//-----------------------

// 7 6 5 4 3 2 1 0 Reset Value

sfr IPH = 0xB7; //中断优先级高位PPCAH PLVDH PADCH PSH PT1H PX1H PT0H PX0H 0000,0000

sfr IP2 = 0xB5; // - - - - - - PSPI PS2 xxxx,xx00

sfr IPH2 = 0xB6; // - - - - - - PSPIH PS2H xxxx,xx00

//-----------------------

//新一代1T 8051系列单片机I/O 口特殊功能寄存器

// 7 6 5 4 3 2 1 0 Reset Value

sfr P0 = 0x80; //8 bitPort0 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 1111,1111

sfr P0M0 = 0x94; // 0000,0000

sfr P0M1 = 0x93; // 0000,0000

sfr P1 = 0x90; //8 bitPort1 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 1111,1111

sfr P1M0 = 0x92; // 0000,0000

sfr P1M1 = 0x91; // 0000,0000

sfr P1ASF = 0x9D; //P1 analog special function

sfr P2 = 0xA0; //8 bitPort2 P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 1111,1111

sfr P2M0 = 0x96; // 0000,0000

sfr P2M1 = 0x95; // 0000,0000

sfr P3 = 0xB0; //8 bitPort3 P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0 1111,1111

sfr P3M0 = 0xB2; // 0000,0000

sfr P3M1 = 0xB1; // 0000,0000

sfr P4 = 0xC0; //8 bitPort4 P4.7 P4.6 P4.5 P4.4 P4.3 P4.2 P4.1 P4.0 1111,1111

sfr P4M0 = 0xB4; // 0000,0000

sfr P4M1 = 0xB3; // 0000,0000

// 7 6 5 4 3 2 1 0 Reset Value

sfr P4SW = 0xBB; //Port-4 switch - LVD_P4.6 ALE_P4.5 NA_P4.4 - - - - x000,xxxx

sfr P5 = 0xC8; //8 bitPort5 - - - - P5.3 P5.2 P5.1 P5.0 xxxx,1111

sfr P5M0 = 0xCA; // 0000,0000

sfr P5M1 = 0xC9; // 0000,0000

//--------------------------------------------------------------------------------

//新一代1T 8051系列单片机定时器特殊功能寄存器

// 7 6 5 4 3 2 1 0 Reset Value

sfr TCON = 0x88; //T0/T1 Control TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 0000,0000

//-----------------------------------

sbit TF1 = TCON^7;

sbit TR1 = TCON^6;

sbit TF0 = TCON^5;

sbit TR0 = TCON^4;

sbit IE1 = TCON^3;

sbit IT1 = TCON^2;

sbit IE0 = TCON^1;

sbit IT0 = TCON^0;

//-----------------------------------

sfr TMOD = 0x89; //T0/T1 Modes GATE1 C/T1 M1_1 M1_0 GATE0 C/T0 M0_1 M0_0 0000,0000

sfr TL0 = 0x8A; //T0 Low Byte 0000,0000

sfr TH0 = 0x8C; //T0 High Byte 0000,0000

sfr TL1 = 0x8B; //T1 Low Byte 0000,0000

sfr TH1 = 0x8D; //T1 High Byte 0000,0000

//--------------------------------------------------------------------------------

//新一代1T 8051系列单片机串行口特殊功能寄存器

// 7 6 5 4 3 2 1 0 Reset Value

sfr SCON = 0x98; //Serial Control SM0/FE SM1 SM2 REN TB8 RB8 TI RI 0000,0000

//-----------------------------------

sbit SM0 = SCON^7; //SM0/FE

sbit SM1 = SCON^6;

sbit SM2 = SCON^5;

sbit REN = SCON^4;

sbit TB8 = SCON^3;

sbit RB8 = SCON^2;

sbit TI = SCON^1;

sbit RI = SCON^0;

//-----------------------------------

sfr SBUF = 0x99; //Serial Data Buffer xxxx,xxxx

sfr SADEN = 0xB9; //Slave Address Mask 0000,0000

sfr SADDR = 0xA9; //Slave Address 0000,0000

//-----------------------------------

// 7 6 5 4 3 2 1 0 Reset Value

sfr S2CON = 0x9A; //S2 Control S2SM0 S2SM1 S2SM2 S2REN S2TB8 S2RB8 S2TI S2RI 00000000B

sfr S2BUF = 0x9B; //S2 Serial Buffer xxxx,xxxx

sfr BRT = 0x9C; //S2 Baud-Rate Timer 0000,0000

//--------------------------------------------------------------------------------

//新一代1T 8051系列单片机看门狗定时器特殊功能寄存器

sfr WDT_CONTR = 0xC1; //Watch-Dog-Timer Control register

// 7 6 5 4 3 2 1 0 Reset Value

// WDT_FLAG - EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0 xx00,0000

//-----------------------

//--------------------------------------------------------------------------------

//新一代1T 8051系列单片机PCA/PWM 特殊功能寄存器

// 7 6 5 4 3 2 1 0 Reset Value

sfr CCON = 0xD8; //PCA 控制寄存器。CF CR - - - - CCF1 CCF0 00xx,xx00

//-----------------------

sbit CF = CCON^7; //PCA计数器溢出标志,由硬件或软件置位,必须由软件清0。

sbit CR = CCON^6; //1:允许PCA 计数器计数, 必须由软件清0。

//-

//-

sbit CCF1 = CCON^1; //PCA 模块1 中断标志, 由硬件置位, 必须由软件清0。

sbit CCF0 = CCON^0; //PCA 模块0 中断标志, 由硬件置位, 必须由软件清0。

//-----------------------

sfr CMOD = 0xD9; //PCA 工作模式寄存器。CIDL - - - CPS2 CPS1 CPS0 ECF 0xxx,x000

/*

CIDL: idle 状态时PCA 计数器是否继续计数, 0: 继续计数, 1: 停止计数。

CPS2: PCA 计数器脉冲源选择位2。

CPS1: PCA 计数器脉冲源选择位1。

CPS0: PCA 计数器脉冲源选择位0。

CPS2 CPS1 CPS0

0 0 0 系统时钟频率fosc/12。

0 0 1 系统时钟频率fosc/2。

0 1 0 Timer0 溢出。

0 1 1 由ECI/P3.4 脚输入的外部时钟,最大fosc/2。

1 0 0 系统时钟频率,Fosc/1

1 0 1 系统时钟频率/4,Fosc/4

1 1 0 系统时钟频率/6,Fosc/6

1 1 1 系统时钟频率/8,Fosc/8

ECF: PCA计数器溢出中断允许位, 1--允许CF(CCON.7) 产生中断。

*/

//-----------------------

sfr CL = 0xE9; //PCA 计数器低位0000,0000

sfr CH = 0xF9; //PCA 计数器高位0000,0000

//-----------------------

// 7 6 5 4 3 2 1 0 Reset Value

sfr CCAPM0 = 0xDA; //PCA 模块0 PWM 寄存器- ECOM0 CAPP0 CAPN0 MAT0 TOG0 PWM0 ECCF0 x000,0000

sfr CCAPM1 = 0xDB; //PCA 模块1 PWM 寄存器- ECOM1 CAPP1 CAPN1 MA T1 TOG1 PWM1 ECCF1 x000,0000

//ECOMn = 1:允许比较功能。

//CAPPn = 1:允许上升沿触发捕捉功能。

//CAPNn = 1:允许下降沿触发捕捉功能。

//MATn = 1:当匹配情况发生时, 允许CCON 中的CCFn 置位。

//TOGn = 1:当匹配情况发生时, CEXn 将翻转。

//PWMn = 1:将CEXn 设置为PWM 输出。

//ECCFn = 1:允许CCON 中的CCFn 触发中断。

//ECOMn CAPPn CAPNn MA Tn TOGn PWMn ECCFn

// 0 0 0 0 0 0 0 0x00 未启用任何功能。

// x 1 0 0 0 0 x 0x21 16位CEXn上升沿触发捕捉功能。// x 0 1 0 0 0 x 0x11 16位CEXn下降沿触发捕捉功能。// x 1 1 0 0 0 x 0x31 16位CEXn边沿(上、下沿)触发捕捉功能。

// 1 0 0 1 0 0 x 0x49 16位软件定时器。

// 1 0 0 1 1 0 x 0x4d 16位高速脉冲输出。

// 1 0 0 0 0 1 0 0x42 8位PWM。

//ECOMn CAPPn CAPNn MA Tn TOGn PWMn ECCFn

// 0 0 0 0 0 0 0 0x00 无此操作

// 1 0 0 0 0 1 0 0x42 普通8位PWM, 无中断

// 1 1 0 0 0 1 1 0x63 PWM输出由低变高可产生中断

// 1 0 1 0 0 1 1 0x53 PWM输出由高变低可产生中断

// 1 1 1 0 0 1 1 0x73 PWM输出由低变高或由高变低都可产生中断

//-----------------------

sfr CCAP0L = 0xEA; //PCA 模块0 的捕捉/比较寄存器低8 位。0000,0000

sfr CCAP0H = 0xFA; //PCA 模块0 的捕捉/比较寄存器高8 位。0000,0000

sfr CCAP1L = 0xEB; //PCA 模块 1 的捕捉/比较寄存器低8 位。0000,0000

sfr CCAP1H = 0xFB; //PCA 模块 1 的捕捉/比较寄存器高8 位。0000,0000

//-----------------------

// 7 6 5 4 3 2 1 0 Reset Value

sfr PCA_PWM0 = 0xF2; //PCA 模块0 PWM 寄存器。- - - - - - EPC0H EPC0L xxxx,xx00

sfr PCA_PWM1 = 0xF3; //PCA 模块1 PWM 寄存器。- - - - - - EPC1H EPC1L xxxx,xx00

//PCA_PWMn: 7 6 5 4 3 2 1 0

// - - - - - - EPCnH EPCnL

//B7-B2: 保留

//B1(EPCnH): 在PWM 模式下,与CCAPnH 组成9 位数。

//B0(EPCnL): 在PWM 模式下,与CCAPnL 组成9 位数。

//--------------------------------------------------------------------------------

//新一代1T 8051系列单片机ADC 特殊功能寄存器

// 7 6 5 4 3 2 1 0 Reset Value

sfr ADC_CONTR = 0xBC; //A/D 转换控制寄存器ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000

sfr ADC_RES = 0xBD; //A/D 转换结果高8位ADCV.9 ADCV.8 ADCV.7 ADCV.6 ADCV.5 ADCV.4 ADCV.3 ADCV.2 0000,0000

sfr ADC_RESL = 0xBE; //A/D 转换结果低2位ADCV.1 ADCV.0 0000,0000

//--------------------------------------------------------------------------------

//新一代1T 8051系列单片机SPI 特殊功能寄存器

// 7 6 5 4 3 2 1 0 Reset Value

sfr SPCTL = 0xCE; //SPI Control Register SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0 0000,0100

sfr SPSTAT = 0xCD; //SPI Status Register SPIF WCOL - - - - - - 00xx,xxxx

sfr SPDAT = 0xCF; //SPI Data Register 0000,0000

//--------------------------------------------------------------------------------

//新一代1T 8051系列单片机IAP/ISP 特殊功能寄存器

sfr IAP_DATA = 0xC2;

sfr IAP_ADDRH = 0xC3;

sfr IAP_ADDRL = 0xC4;

// 7 6 5 4 3 2 1 0 Reset Value

sfr IAP_CMD = 0xC5; //IAP Mode Table 0 - - - - - MS1 MS0 0xxx,xx00

sfr IAP_TRIG = 0xC6;

sfr IAP_CONTR = 0xC7; //IAP Control Register IAPEN SWBS SWRST CFAIL - WT2 WT1 WT0 0000,x000

//--------------------------------------------------------------------------------

单片机STC12C5A60S2简介

STC12C5A60S2简介 STC12C5A60S2是STC生产的单时钟/机器周期(1T)的单片机,是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换,针对电机控制,强干扰场合。 1、增强型8051CPU,1T(1024G),单时钟/机器周期 2、工作电压 5.5-3.5V 3、1280字节RAM 4、通用I/O口,复位后为:准双向口/弱上拉 可设置成四种模式:准双向口/弱上拉,强推挽/强上拉,仅为输入/高阻,开漏 每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120mA 5、有EEPROM功能 6、看门狗 7、内部集成MAX810专用复位电路 8、外部掉电检测电路 9、时钟源:外部高精度晶体/时钟,内部R/C振荡器 常温下内部R/C振荡器频率为:5.0V单片机为:11~17MHz 3.3V 单片机为:8~12MHz 10、4个16位定时器 两个与传统8051兼容的定时器/计数器,16位定时器T0和T1 11、3个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在 P3.5/T1输出时钟,独立波特率发生器可以在P1.0口输出时钟 12、外部中断I/O口7路,传统的下降沿中断或电平触发中断,并新增支持上升 沿中断的PCA模块,Power Down模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4,T1/P3.5,RxD/P3.0,CCP0/P1.3,CCP0/P1.3 13、PWM2路 14、A/D转换,10位精度ADC,共8路,转换速度可达250K/S 15、通用全双工异步串行口(UART) 16、双串口,RxD2/P1.2,TxD2/P1.3 17、工作范围:-40~85 18、封装:LQFP-48,LQFP-44,PDIP-40,PLCC 管脚说明 P0.0~P0.7 P0:P0口既可以作为输入/输出口,也可以作为地址/数据复用总线使用。当P0口作为输入/输出口时,P0是一个8位准双向口,内部有弱上拉电阻,无需外接上拉电阻。当P0作为地址/数据复用总线使用时,是低8位地址线A0~A7,数据线D0~D7 P1.0/ADC0/CLKOUT2 标准IO口、ADC输入通道0、独立波特率发生器的时钟输出 P1.1/ADC1

免费的单片机C语言常用头文件

免费的函数原形的头文件读者可参考返回非整型值的函数 函数原形的头文件读者可参考返回非整型值的函数assert.h - assert(), 声明宏 ctype.h –字符类型函数 float.h –浮点数原形 limits.h –数据类型的大小和范围 math.h –浮点运算函数 stdarg.h –变量参数表. stddef.h –标准定义 stdio.h –标准输入输出IO 函数 stdlib.h –包含内存分配函数的标准库 string.h –字符串处理函数 3 字符类型库 下列函数按照输入的ACS II 字符集字符分类使用这些函数之前应当用"#include " 包含 int isalnum(int c) 如果c 是数字或字母返回非零数值否则返回零 int isalpha(int c) 如果c 是字母返回非零数值否则返回零 int iscntrl(int c) 如果c 是控制字符如FF, BELL, LF ..等返回非零数值否则返回零 int isdigit(int c) 如果c 是数字返回非零数值否则返回零

int isgraph(int c) 如果c 是一个可打印字符而非空格返回非零数值否则返回零 int islower(int c) 如果c 是小写字母返回非零数值否则返回零 int isprint(int c) 如果c 是一个可打印字符返回非零数值否则返回零 int ispunct(int c) 如果c 是一个可打印字符而不是空格数字或字母返回非零数值否则返回零 int isspace(int c) 如果c 是一个空格字符返回非零数值包括空格CR, FF, HT, NL, 和VT 否则返回零 int isupper(int c) 如果c 是大写字母返回非零数值否则返回零 int isxdigit(int c) 如果c 是十六进制数字返回非零数值否则返回零 int tolower(int c) 如果c 是大写字母则返回c 对应的小写字母其它类型仍然返回c int toupper(int c) 如果c 是小写字母则返回c 对应的大写字母其它类型仍然返回c 4 浮点运算库 下列函数支持浮点数运算使用这些函数之前必须用 #include 包含 float asin(float x) 以弧度形式返回x 的反正弦值 float acos(float x)

单片机STC12C5A60S2

精心整理 单片机STC12C5A60S2 在众多的51系列单片机中,要算国内STC 公司的1T 增强系列更具有竞争力,因他不但和8051指令、管脚完全兼容,而且其片内的具有大容量程序存储器且是FLASH 工艺的,如STC12C5A60S2单片机内部就自带高达60KFLASHROM,这种工艺的存储器用户可以用电的方式瞬间擦除、改写。而且STC 系列单片机支持串口程序烧写。显而易见,这种单片机对开发设备的要求很低,开发时间也大大缩短。写入单片机内的程序还可以进行加密,这又很好地保护了你的劳动成果。重要的一点STC12C5A60S2目前的售价与传统51差不多,市场供应也很充足。是一款高性价比的单片机 /低功耗/集成 1.2.电压:3.4.5.6.,可设可达到(8.9.10.; 11.外部掉电检测电路:在P4.6口有一个低压门槛比较器,5V 单片机为 1.32V ,误差为+/-5%,3.3V 单片机为1.30V ,误差为+/-3%; 12.时钟源:外部高精度晶体/时钟,内部R/C 振荡器(温漂为+/-5%到+/-10%以内)1用户在下载用户程序时,可选择是使用内部R/C 振荡器还是外部晶体/时钟,常温下内部R/C 振荡器频率为:5.0V 单片机为:11MHz ~15.5MHz ,3.3V 单片机为:8MHz ~12MHz ,精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,以实际测试为准; 13.共4个16位定时器两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定

时器2,但有独立波特率发生器做串行通讯的波特率发生器再加上2路PCA模块可再实现2个16位定时器; 14.2个时钟输出口,可由T0的溢出在P3.4/T0输出时钟,可由T1的溢出在P3.5/T1输出时钟; 15.外部中断I/O口7路,传统的下降沿中断或低电平触发中断,并新增支持上升沿中断的PCA 模块,PowerDown模式可由外部中断唤醒,INT0/P3.2,INT1/P3.3,T0/P3.4,T1/P3.5,RxD/P3.0,CCP0/P1.3(也可通过寄存器设置到P4.2),CCP1/P1.4(也可通过寄存器设置到P4.3); 置到 20.装: (均可 VCC GND P0 写“1”时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FLASH编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部电位必须被拉高; P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入“1”后,电位被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收; P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚电位被内部上拉电阻拉高,且作为输入。作为输入时,P2口的

51单片机头文件reg51.h详解

我们在用c语言编程时往往第一行就是头文件,51单片机为reg51.h或reg52.h,51单片机相对来说比较简单,头文件里面内容不多,像飞思卡尔、ARM 系列的单片机头文件往往内容就非常多,尽管如此,对一些初次接触单片机的朋友来说,51的头文件还是搞不太清楚,今天具体来说明一下。 1)“文件包含”处理概念 所谓“文件包含”是指在一个文件内将另外一个文件的内容全部包含进来。因为被包含的文件中的一些定义和命令使用的频率很高,几乎每个程序中都可能要用到,为了提高编程效率,减少编程人员的重得劳动,将这些定义和命令单独组成一个文件,如reg51.h,然后用#include包含进来就可以了,这个就相当于工业上的标准零件,拿来直接用就可以了。 2)寄存器地址及位地址声明的原因 reg51.h里面主要是一些特殊功能寄存器的地址声明,对可以位寻址的,还包括一些位地址的声明,如果如sfr P1=0x80; sfr IE=0xA8;sbit EA=0xAF等。 sfr P1 = 0x90这句话表示:P1口所对应的特殊功能寄存器P1在内存中的地址为0x80,sbit EA=0xAF这句话表示EA这一位的地址为0xAF。 注意这里出现了一个使用很频繁的sfr和sbit。 sfr 表示特殊功能寄存器的意思,它并非标准C 语言的关键字,而是Keil 为能直接访问80C51中的SFR 而提供了一个新的关键词,其用法是:sfr 特殊功能寄存器名=地址值(注意对于头文件里“特殊功能寄存器名”,用户实际上也可以修改的,如P1=0x80,也可改为A1=0x80,但sfr 和地址值则不能更改,否者会编译出错。) sbit表示位的意思,它也是非标准C 语言的关键字,编写程序时如需操作寄存器的某一位(可位寻址的寄存器才能用)时,需定义一个位变量,此时就要要到sbit,如sbit deng=P1^0,sbit EA = 0xAF;需要注意的是,位定义时有些特殊,用法有三种: 第一种方法:sbit 位变量名=寄存器位地址值 第二种方法:sbit 位变量名=SFR 名称^寄存器位值(0-7) 第三种方法:sbit 位变量名=SFR 地址值^寄存器位值 如: sbit IT0=0x88 (1)说明:0x88是IT0 的位地址值 sbit deng=P1^2 (2)说明:其中P1 必须先用sfr 定义好 sbit EA=0xA8^7 (3)说明:0xA8 就是IE寄存器的地址值 以上三种定义方法需注意的是 IT0 deng EA可由用户随便定义,但必须满足C语言对变量名的定义规则。除些外其它的则必须按照上面的格式写,如“名称^变量位地址

51单片机C语言头文件及其使用

51单片机C语言头文件及其使用 2007-05-29 16:33 很多初学单片机者往往对C51的头文件感到很神秘,而为什么要那样写,甚至有的初学者喜欢问,P1口的P为什么要大写,不大写行不行呢?其实这样的问题,看过本文后,就会明白。其实这个是在头文件中用sfr定义的,现在定义好了的是这样的sfr P1 = 0x90;,也就是说,到底大写,还是小写,就是在这里面决定的。这就说明,如果你要用小写,就得在头文件中改为小写。其实它都是为了编程序方便才这样写的,在程序编译时,就会变成相应的地址(如P1就变成了0x90)。 还有一点就是,现在有很多改进型的单片机,它们有很多新增的特殊功能寄存器在标准的reg51.h或reg52.h中没有定义,这就需要自己加进头文件(相关厂家已经把它们定义好了),当然也可以直接在程序中定义。下面是一个标准的C51头文件:(此文件一般在C:\KEIL\C51\INC下,INC文件夹根目录里有不少头文件,并且里面还有很多以公司分类的文件夹,里面也都是相关产品的头文件。如果我们要使用自己写的头文件,使用的时候只需把对应头文件拷贝到INC文件夹里就可以了。) /* BYTE Registers */ sfr P0 = 0x80; sfr P1 = 0x90; sfr P2 = 0xA0; sfr P3 = 0xB0; sfr PSW = 0xD0; sfr ACC = 0xE0; sfr B = 0xF0; sfr SP = 0x81; sfr DPL = 0x82; sfr DPH = 0x83; sfr PCON = 0x87; sfr TCON = 0x88; sfr TMOD = 0x89; sfr TL0 = 0x8A; sfr TL1 = 0x8B; sfr TH0 = 0x8C; sfr TH1 = 0x8D; sfr IE = 0xA8; sfr IP = 0xB8; sfr SCON = 0x98; sfr SBUF = 0x99; /* 8052 Extensions */ sfr T2CON = 0xC8; sfr RCAP2L = 0xCA; sfr RCAP2H = 0xCB; sfr TL2 = 0xCC;

STC12C5A60S2单片机的AD转换

A/D转换测试程序(ADC查询方式) #include “stc12c5a.h”//头文件在STC公司主页上下载 #include ”intrins.h” //与STC12C5A60S2单片机ADC相关的寄存器说明// Sfr ADC_CONTR = 0xBC;//AD转换控制寄存器 Sfr ADC_RES = 0xBD;//AD转换结果寄存器高 Sfr ADC_RESL = 0xBE;//AD转换结果寄存器低 Sfr P1ASF = 0x9D;//P1口模拟转换功能控制寄存器 Sfr AURX1 = 0xA2;//AD转换结果存储方式控制位 #define ADC_POWER 0x80 //ADC电源开 #define ADC_FLAG 0x10 //ADC结束标志位 #define ADC_START 0x08 //ADC启动控制位设为开 #define ADC_SPEEDLL 0x00 //设为540个时钟周期ADC一次 #define ADC_SPEEDL 0x20 //设为360个时钟周期ADC一次 #define ADC_SPEEDH 0x40 //设为180个时钟周期ADC一次 #define ADC_SPEEDHH 0x60 //设为90个时钟周期ADC一次 void AD_init(void); void delay(unsigned int a); unsigned int AD_get(unsigned char n); float AD_work(unsigned char n); void main() { unsigned char i; AD_init(); while(1) { for(i=0;i<8;i++) { AD_work(i); delay(20); } } } unsigned int AD_get(unsigned char n) //第n通道ADC采样函数 { unsigned int adc_data; ADC_RES = 0; //清零 ADC_CONTR=ADC_POWER|ADC_SPEEDLL|n|ADC_START;//打开AD转换电源、

STC12C5A60S2单片机课程设计报告

一、课程设计基本情况介绍 1.1课程设计的基本目的与任务 本课程设计旨在驾驭本专业学生理论指导实践能力以及电子产品工程设计与开发能力。本实践课所要达到的主要目的是: 1、通过本次课程设计,是对学生综合能力的检,提高学生综合运用专业知识,强化单片机 应用系统设计与防震能力。 2、本次课程设计是在生产实习所完成的“单片机核心板+电子钟模块+MP3模块+RFID模块+无线传输模块+GPS模块+脉搏传感模块”的基础上设计该硬件系统的工作程序。 1.2课程设计的基本内容 1、在生产实习设计单片机硬件系统的基础上,设计相应的应用软件系统。 2、在LCD1602上显示学号程序设计。 3、基于DS1302的实时时钟软件设计。 4、基于DS18B20的温度测量软件设计。 5、基于TL1838A的红外遥控解码软件设计。 6、设计应用软件系统框图和流程图,完成所设计软件的调试。 1.3课程设计的教学要求 1、通过资料查阅及学习了解单片机应用系统的软件设计方法及单片机编程、软硬件联机调 试技巧。 2、独立设计并编写下列应用程序: (1)LCD1602学号显示程序; (2)DS1302实时时钟程序; (3)DS18B20温度测量程序; (4)TL1838A红外遥控解码程序; 3、独立完成所设计程序与硬件系统的联机仿真。 二、整机系统框图(硬件、软件) 该设计方案是以STC12C5A60S2单片机为核心,采用LCD液晶屏幕显示模块、实时时钟模块、温度测量模块、红外遥控解码等模块所构建的系统,能在LCD1602液晶屏上显示当前的日期(年、月、日)、时间(时、分、秒)数据、当前环境温度值和红外遥控解码值。用户可通过遥控器或单片机核心板上的按键来进行日期和时间的设置。本系统设计大部分功能由软件来实现,电路简单明了,系统稳定性也得到大大提高。 1、总体硬件设计框架图: 2、总体软件设计框架图 /////// 三、整机硬件电路原理图(见99SE图) 1、核心板电路原理图 2、蜂鸣器驱动电路 3、按键电路 4、单片机复位电路 5、LCD1602液晶显示电路 6、电子钟模块接口电路 四、软件系统设计思想 //////////// 五、系统软件资源分配表(调试程序、工作程序) ////////////// 六、显示学号的调试程序流程图、程序源代码

单片机头文件

Reg51.h是头文件,是对单片机的特殊寄存器的定义。另外,#include 与#include"reg51.h"是有区别的,使用< >包含头文件时,编译先进入到软件安装文件夹处开始搜索这个头文件,使用“”包含头文件时,编译先进入当前工程所在文件夹处开始搜索这个头文件。Reg51.h在文件安装文件夹处存在,所以一般用#include。 头文件具体对特殊寄存器的定义如下: /*-------------------------------------------------------------------------- REG51.H Header file for generic 80C51 and 80C31 microcontroller. Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc. All rights reserved. --------------------------------------------------------------------------*/ #ifndef __REG51_H__ #define __REG51_H__ /* BYTE Register */ sfr P0 = 0x80; sfr P1 = 0x90; sfr P2 = 0xA0; sfr P3 = 0xB0; sfr PSW = 0xD0; sfr ACC = 0xE0; sfr B = 0xF0; sfr SP = 0x81; sfr DPL = 0x82; sfr DPH = 0x83; sfr PCON = 0x87; sfr TCON = 0x88; sfr TMOD = 0x89; sfr TL0 = 0x8A; sfr TL1 = 0x8B; sfr TH0 = 0x8C; sfr TH1 = 0x8D; sfr IE = 0xA8; sfr IP = 0xB8; sfr SCON = 0x98; sfr SBUF = 0x99; /* BIT Register */ /* PSW */ sbit CY = 0xD7; sbit AC = 0xD6;

单片机常用芯片头文件

//STC 单片机内部ADC转换程序 //可选择查询和中断方式 //H文件 #ifndef __ADC_H__ #define __ADC_H__ #define ADC_POWER 0x80 //ADC 电源控制位 #define ADC_FLAG 0x10 //ADC 完成标志 #define ADC_START 0x08 //ADC 启动控制位 //ADC转换速度选择 #define ADC_SPEEDLL 0x00 //420 clocks #define ADC_SPEEDL 0x20 //280 clocks #define ADC_SPEEDH 0x40 //140 clocks #define ADC_SPEEDHH 0x60 //70 clocks unsigned int AD_Result_Temp; unsigned int GetADCResult (unsigned char chan); //ADC 转换处理,查询方式#endif //C文件 #ifndef __ADC_C__ #define __ADC_C__ #include //#include /*---------------------------- 初始化ADC 寄存器中断方式 ---------------------------- void InitADC() { unsigned unsigned char chan=0; P1ASF = 0xff; //设置P1口全部为ADC通道ADC_RES = 0; //清除高8位缓冲数据 ADC_RESL = 0; //清除低2位缓冲数据 ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | chan; _nop_(); _nop_(); //打开ADC } */ //---------------------------- //ADC 中断处理 //---------------------------- /*void adc_isr() interrupt 5 using 1

STC12C5A60S2单片机双串口通信

STC12C5A60S2单片机双串口通信 STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作 与传统51单片机串行口相同;特殊的是STC12C5A60S2 单片机内部有一个独立波特率发生器,串口1可以使用 定时器1作为波特率发生器,也可以使用独立波特率发 生器作为波特率发生器;而串口2只能使用独立波特率 发生器作为波特率发生器。 下面是一段双串口通信的程序: /************************************************ *********************** 时间:2012.11.24 芯片:STC12C5A60S2 晶振:22.1184MHz 波特率:9600bps 引脚定义:串行口1:发送 ————TxD/P3.1;接收 ————RxD/P3.0 串行口2:发送 ————TxD2/P1.3;接收 ————RxD2/P1.2 功能描述:STC12双串口通信(中断方式)

当串行口1接收数据后,将此数据由串行口2发送出去 当串行口2接收数据后,将此数据由串行口1发送出去 ************************************************* **********************/ #include; #define S2RI 0x01//串口2接收中断请求标志位 #define S2TI 0x02//串口2发送中断请求标志位unsigned char flag1,flag2,temp1,temp2; /****************串行口初始化函数 ****************/ void InitUART(void) { TMOD = 0x20; //定时器1工作在方式2 8位自动重装 SCON = 0x50; //串口1工作在方式1 10位异步收发 REN=1允许接收 TH1 = 0xFA; //定时器1初值 TL1 = TH1; TR1 = 1; //定时器1开始计数 EA =1;//开总中断

AT89C52单片机头文件

/*-------------------------------------------------------------------------- AT89X52.H Header file for the low voltage Flash Atmel AT89C52 and AT89LV52. Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc. All rights reserved. --------------------------------------------------------------------------*/ #ifndef __AT89X52_H__ #define __AT89X52_H__ /*------------------------------------------------ Byte Registers ------------------------------------------------*/ sfr P0 = 0x80; sfr SP = 0x81; sfr DPL = 0x82; sfr DPH = 0x83; sfr PCON = 0x87; sfr TCON = 0x88; sfr TMOD = 0x89; sfr TL0 = 0x8A; sfr TL1 = 0x8B; sfr TH0 = 0x8C; sfr TH1 = 0x8D; sfr P1 = 0x90; sfr SCON = 0x98; sfr SBUF = 0x99; sfr P2 = 0xA0; sfr IE = 0xA8; sfr P3 = 0xB0; sfr IP = 0xB8; sfr T2CON = 0xC8; sfr T2MOD = 0xC9; sfr RCAP2L = 0xCA; sfr RCAP2H = 0xCB; sfr TL2 = 0xCC; sfr TH2 = 0xCD; sfr PSW = 0xD0; sfr ACC = 0xE0; sfr B = 0xF0; /*------------------------------------------------ P0 Bit Registers

基于51单片机的头文件—自己编写

这个是我自己编写的51单片机的库函数对应的头文件,在网上本人还分享了很多热门模块的库函数,都是现成的,欢迎下载!!!! #ifndef __CONFIG_H #define __CONFIG_H #include<myreg51.h> #include<intrins.h> #include<stdio.h> #include<string.h> #include<math.h> /**************************选择晶振频率*******************************/ //#define MAIN_freq 22118400L //定义主时钟 //#define MAIN_freq 12000000L //定义主时钟12M hz #define MAIN_freq 11059200L //定义主时钟11.0592M hz //#define MAIN_freq 5529600L //定义主时钟 //#define MAIN_freq 24000000L //定义主时钟 /**************************定义常用词*******************************/ #define uint unsignedint #define sint signedint #define uchar unsignedchar #define schar signedchar #define error 1//定义错误返回1 #define right 0//定义正确返回0 /***********************************************************/ #endif #ifndef __MYREG51_H__ #define __MYREG51_H__ sfr PSW =0xD0; sfr ACC =0xE0; sfr B =0xF0; sfr SP =0x81; sfr DPL =0x82; sfr DPH =0x83;

单片机C语言常用头文件

函数原形的头文件读者可参考返回非整型值的函数 assert.h - assert(), 声明宏 ctype.h –字符类型函数 float.h –浮点数原形 limits.h –数据类型的大小和范围 math.h –浮点运算函数 stdarg.h –变量参数表. stddef.h –标准定义 stdio.h –标准输入输出IO 函数 stdlib.h –包含内存分配函数的标准库 string.h –字符串处理函数 3 字符类型库 下列函数按照输入的ACS II 字符集字符分类使用这些函数之前应当用"#include " 包含 int isalnum(int c) 如果c 是数字或字母返回非零数值否则返回零 int isalpha(int c) 如果c 是字母返回非零数值否则返回零 int iscntrl(int c) 如果c 是控制字符如FF, BELL, LF ..等返回非零数值否则返回零 int isdigit(int c) 如果c 是数字返回非零数值否则返回零 int isgraph(int c) 如果c 是一个可打印字符而非空格返回非零数值否则返回零 int islower(int c) 如果c 是小写字母返回非零数值否则返回零 int isprint(int c) 如果c 是一个可打印字符返回非零数值否则返回零 int ispunct(int c) 如果c 是一个可打印字符而不是空格数字或字母返回非零数值否则返回零 int isspace(int c) 如果c 是一个空格字符返回非零数值包括空格CR, FF, HT, NL, 和VT 否则返回零 int isupper(int c) 如果c 是大写字母返回非零数值否则返回零 int isxdigit(int c) 如果c 是十六进制数字返回非零数值否则返回零 int tolower(int c) 如果c 是大写字母则返回c 对应的小写字母其它类型仍然返回c int toupper(int c) 如果c 是小写字母则返回c 对应的大写字母其它类型仍然返回c 4 浮点运算库 下列函数支持浮点数运算使用这些函数之前必须用#include 包含 float asin(float x) 以弧度形式返回x 的反正弦值

c语言单片机编程之头文件编写

如何高效编程之头文件 在网上查了很长时间关于头文件的资料,但是发现很难找到适合我的。学单片机的朋友知道,很多程序经常要调用相同的函数,如果每写一个程序都把这些函数重新写一遍或者复制过来,那是很浪费时间的,现在我通过学习总结以及别人的经验,跟大家分享,欢迎大家转载学习。 写程序最好是结构化编程,因为这样的程序看起来就不那么长了,一目了然,可以很快就知道这个程序实现什么功能,而且排错也非常简单。把常用的函数声明、自定义类型、外部变量的声明等写进头文件,与之配对的扩展名为.c的文件就写常用的函数,main.c 最好就写一个主函数。之前学的51单片机,现在玩430单片机,就以430单片机为例,其他编程软件道理与这个相同。在IAR下新建工程,包含了main.c、mydefine.c和mydefine.h(mydefine.c和mydefine.h是一对)三个文件(注:可包含多个配对的头文件和C 文件)。先把程序贴出来,再详解其中缘由。 main.c内容: #include "mydefine.h" void main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD;

SegInitial(); //数码管控制引脚初始化 long m = 0; while(1) { disp(m); //显示m的值 delay(10); m++; if(m == 1000000) m = 0; } } mydefine.h的内容 #ifndef _MYDEFINE_H #define _MYDEFINE_H #include "msp430x14x.h"

单片机编程头文件相关问题

1. Reg51.h是头文件,是对单片机的特殊寄存器的定义。#include 与 #include “REG51.h”有区别。使用< > 包含头文件时,编译线进入到软件安装文件夹处开始搜索这个头文件,使用“”包含头文件时,编译先进入当前工程所在文件夹处开始搜索头文件。 #ifndef _REG51_H #define _REG51_H 2.#ifndef 标示1 //判断“标示1”是否定义,如果被定义了则返回假,如果没有被定义则返回真。 /*********************************/ 语句1 #ifndef 标示1 语句2 #define 标示1 语句3 #endif 语句4 …… 语句5 …… 这段代码意思是:如果标示1没有被定义,则重定义标示1,即执行语句2、语句3、语句4、语句5…… 备注:#ifndef和#endif要一起用,如果丢失#endif,可能会报错。 千万不要忽略了头文件中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。 还是把头文件的内容都放在#ifndef 和#endif中吧。不管你的头文件会不会多个文件引用,你都要加上这个,一般格式是这样的: #ifndef<标识> #define<标识> ………… ………… #endif <标识>在理论上那个来说可以使自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名的全大写,前后加下划线,并把头文件中的“.”页变成下划线,如stidio.h #ifndef _STDIO_H_ #define _STDIO_H_ …… #endif 3.一个C文件功能模块,它的函数等希望可以直接被其它函数所引用可以通过制作头文件的方法(步骤): (1)具有一个单独调试可用的1602driver.c文件 (2)复制1602dirver.c文件并另存为1602driver.h文件,把复制的1602driver.c删掉 (3)在1602driver.h文件中开头两行: 第一行:#ifndef _1602DRIVER_H_ 第二行:#define _1602DRIVER_H_ extern void fun_wait_bf(void); ///读,等待,busy标志位,busy=0 方可进行操作extern void fun_write_e(void); //制造一个E 的上升沿,能够为写数据服务extern void fun_write_instruction(unsigned char instruction_data); extern void fun_write_data(unsigned char data_data); ……………………//各种在其他函数中要调用的函数名都声明进去,只有1602driver.c中……………………//才用的如:等待标志位等,可以不用声明出来。

关于51单片机启动程序和头文件的深入学习

总的作用: STARTUP.A51//启动文件. 清理RAM.设置堆栈等.即执行完start.a51后跳转到.c文件的main 函数 //特殊寄存器的字节地址和位地址,sfr定义字节变量、sbit定义位变量,用通俗名作为变量名,并赋地址值,从而用名称来使用这些特殊寄存器。 //定义了一些外部函数,在C51单片机编程中,头文件INTRINS.H的函数使用起来,就会让你像在用汇编时一样简便. 特别需要注意的概念: 地址与地址值: “地址是存放值的内存空间对应的门牌号码。地址值是门牌号对应内存空间里存放内容。通俗讲,一栋楼房, 101号房间什么都没只有1个人。这个人是值。101是地址。房间是内存空间。” 启动程序详细解释 ;STARTUP.A51:用户上电初始化程序 ;------------------------------------------------------------------------------ ; ; 用户定义需上电初始化的内存空间 ; ; 使用以下EQU命令可定义在CPU复位时需用0进行初始化的内存空间 ; ; ;IDATA 存储器的空间的绝对起始地址总是0. IDATALENEQU 80H ; 需用0进行初始化的IDATA存储器空间的字节数 ; XDATASTARTEQU 0H ; XDATA存储器空间的绝对起始地址 XDATALENEQU 0H ; 需用0进行初始化的XDATA存储器的空间字节数. ; PDATASTARTEQU 0H ; PDATA存储器的空间的绝对起始地址 PDATALENEQU 0H ; 需用0进行初始化的PDATA存储器的空间字节数. ; ; 注意: IDATA 存储器的空间在物理上包括了8051单片机的DATA和BIT存储器空间. ; 听说至少要保证与C51编译器运行库有关的存储器的空间进行0初始化不知是否 ;------------------------------------------------------------------------------ ; ; 再入函数模拟初始化 ; ; 以下用EQU指令定义了再入函数模拟堆栈指针的初始化 ; ; 使用SMALL存储器模式时再入函数的堆栈空间. IBPSTACKEQU 0 ; 使用SMALL存储器模式再入函数时将其设置成1. IBPSTACKTOPEQU 0FFH+1 ; 将堆栈顶设置为最高地址+1. ;

根据STC12C5A60S2单片机数字电压表的设计

数字电压表的设计

第1章引言 在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。数字电压表简称DVM,它是采用数字化测量技术,把连续的模拟量转换成不连续、离散的数字形式并加以显示的仪表。由于数字式仪器具有读数准确方便、精度高、误差小、测量速度快等特而得到广泛应用。

传统的指针式刻度电压表功能单一,精度低,容易引起视差和视觉疲劳,因而不能满足数字化时代的需要。采用单片机的数字电压表,将连续的模拟量如直流电压转换成不连续的离散的数字形式并加以显示,从而精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC实时通信。数字电压表是诸多数字化仪表的核心与基础。以数字电压表为核心,可以扩展成各种通用数字仪表、专用数字仪表及各种非电量的数字化仪表。目前,由各种单片机和A/D转换器构成的数字电压表作全面深入的了解是很有必要的。 目前,数字电压表的内部核心部件是A/D转换器,转换的精度很大程度上影响着数字电压表的准确度,因而,以后数字电压表的发展就着眼在高精度和低成本这两个方面。 本文是以简易数字直流电压表的设计为研究内容,本系统主要包括三大模块:转换模块、数据处理模块及显示模块。 第2章系统总体方案设计选择与说明 2.1 设计要求 1、增强型MCS-51系列单片机STC12C5A60S2为核心器件,组成一个简单的直流数字电压表。 2、采用1路模拟量输入,能够测量0-10V之间的直流电压值。 3、电压显示采用LCD1602显示。 4、尽量使用较少的元器件。

51单片机特殊功能寄存器头文件说明

就是keil软件c语言编程的REG51.H /*-------------------------------------------------------------------------- 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 sbit OV = 0xD2; 溢出标志位 sbit P = 0xD0; 奇偶校验位1的个数为奇数,P=1; /* TCON */ 定时器/计数器控制寄存器 sbit TF1 = 0x8F; 定时器/计数器1溢出中断请求标志,当溢出时由硬件置位,当CPU响应中 断时由硬件清0 sbit TR1 = 0x8E; 启动定时器1 sbit TF0 = 0x8D; 定时器/计数器0溢出中断请求标志,当溢出时由硬件置位,当CPU响应中

相关主题
文本预览
相关文档 最新文档