keil的a51中psw的F0位怎么定义

keil的a51中psw的F0位怎么定义,第1张

F0是寄存器PSW中的一位,编写程序时,可以直接使用,就像TR0,TR1,EA,ET0这些标志位一样,是可以位寻址的,用汇编语言写程序时,可以直接写:SETB  F0,CLR  F0。

用C语言写程序,也是可以直接写的,F0=0   F0=1

所以,不论用什么语言写程序,都不需要定义的,要再定义,反倒重复了会现错的。

PSW寄存器如下图所示

要安装对应的包,这里就会增加对应的芯片,比如你要用STM32F030系列的芯片,那么你得从ST网站上下载一个包,叫Keil.STM32F0xx_DFP.1.0.0.pack,双击运行这个包,增加到KEIL里面,就会有对应的flash选择了。

/*

stc12c2052AD 头文件。

/*------------------------------------------------

Byte Registers

------------------------------------------------*/

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 SCON=0x98

sfr SBUF=0x99

sfr IE =0xA8

sfr IPH =0XB7 /* 中断优先级扩展寄存器,用于定义扩展中断源的优先级*/

/*

IPH^7空

IPH^6(PPCA_LVDH)... PCA扩展定时器中断与低电压中断公用

IPH^5(PADC_SPIH)... ADC模数转换与SPI传送结束中断公用

IPH^4(PSH)......... ??

IPH^3(PT1H)........

IPH^2(PX1H)

IPH^1(PT0H)

IPH^0(PX0H)

*/

sfr IP =0xB8 /* 通用中断源的优先级定义寄存器,与IPH合并使用*/

sfr PSW=0xD0

sfr ACC=0xE0

sfr B =0xF0

/* ----------------- P1口IO定义 ------------------- */

/* P1M0[7~0] P1M1[7~0]方向作用*/

/*00传统51准双向口模式*/

/*01推挽输出,上拉20mA*/

/*10高阻单向输入,AD必须。*/

/*11开漏输出,AD也可以选择*/

sfr P1 =0x90 /* P1口地址 */

sfr P1M0=0x91 /* P1口方向0*/

sfr P1M1=0x92 /* P1口方向1*/

/* ----------------- P3口IO定义 ------------------- */

/* P3M0[7~0] P3M1[7~0]方向作用*/

/*00传统51准双向口模式*/

/*01推挽输出,上拉20mA*/

/*10高阻单向输入,AD必须。*/

/*11开漏输出,AD也可以选择*/

sfr P3 =0xB0 /* P3口地址 */

sfr P3M0=0xB1 /* P3口方向0*/

sfr P3M1=0xB2 /* P3口方向1*/

/*----------------- IAP/IAP 功能寄存器 ------------ */

sfr ISP_DATA =0XE2 /* 收发数据寄存器*/

sfr ISP_ADDRH=0XE3 /* 目标 *** 作地址高8位*/

sfr ISP_ADDRL=0XE4 /* 目标 *** 作地址低8位*/

sfr ISP_CMD =0XE5 /* *** 作指令寄存器*/

sfr ISP_TRIG =0XE6 /* 触发寄存器*/

sfr ISP_CONTR=0XE7 /* 控制寄存器*/

/* --------------- 新增功能控制寄存器 ------------- */

sfr AUXR=0X8E /*新增特殊功能寄存器*/

/*

其中:

AUXR^7(T0x12)..定时器ct0时钟源设定:0_atbit(传统1/12,1_atbit(1:1不分频;

AUXR^6(T1x12)..定时器ct1时钟源设定:0_atbit(传统1/12,1_atbit(1:1不分频;

AUXR^5(UARTx6). 串口模式0时时钟设定:0_atbit(传统1/12^1_atbit(1/2 2分频;

AUXR^4(EADCI).. ADC中断允许位:0_atbit(禁止,1_atbit(允许

AUXR^3(ESPI)... SPI中断允许位:0_atbit(禁止,1_atbit(允许

AUXR^2(ELVDI).. 低电压中断允许:0_atbit(禁止,1_atbit(允许

5V系统3.7V,3V系统2.4V以下发生中断

AUXR^1/AUXR^0.. 保留

*/

sfr CLOCK_DIV=0XC7 /* 空闲模式下的时钟分频,可进一步降低功耗*/

sfr WDT_CONTR=0XE1 /* 看门狗控制寄存器*/

/* 其中:

WDT_CONTR^7(WDT_FLAG).. 看门狗溢出标志_atbit(1,可软件清零

WDT_CONTR^6保留

WDT_CONTR^5(EN_WDT).... 看门狗允许标志_atbit(1

WDT_CONTR^4(CLR_WDT)... 看门狗清零_atbit(1,硬件自动回零

WDT_CONTR^3(IDLE_WDT)..=1空闲模式下继续工作,_atbit(0空闲模式下不工作

WDT_CONTR^2~0(PS2~0)... 看门狗溢出时间设定:

0 0 0 ...... 2分频..... @20MHz下 39.3mS

0 0 1 ...... 4分频..... @20MHz下 78.6mS

0 1 0 ...... 8分频..... @20MHz下 157.3mS

0 1 1 ......16分频..... @20MHz下 314.6mS

1 0 0 ......32分频..... @20MHz下 629.1mS

1 0 1 ......64分频..... @20MHz下 1.25S

1 1 0 .....128分频..... @20MHz下 2.5S

1 1 1 .....256分频..... @20MHz下5S

其他主频下的时间可以参照上表作相应换算。

*/

sfr SADDR = 0XA9 /* 从地址,未启用*/

sfr SADEN = 0XB9 /* 标识地址,未启用*/

sfr SPI_STATUS=0X84 /* SPSTAT SPI状态寄存器 */

/*其中:

SPSTAT^7(SPIF).... SPI 传输完成标志。当一次串行传输完成时,SPIF 置位,

并当ESPI和EA 都置位时产生中断。当SPI 处于主模式且

SSIG_atbit(0 时,如果/SS 为输入并被驱动为低电平,SPIF

也将置位。SPIF标志通过软件向其写入“1”清零。

SPSTAT^6(WCOL).... SPI 写冲突标志。在数据传输的过程中如果对SPI 数据寄

存器SPDAT 执行写 *** 作,WCOL 将置位。WCOL 标志通过软

件向其写入“1”清零。

SPSTAT^5~0保留

*/

sfr SPI_CONTR=0X85 /* SPI控制寄存器SPCTL*/

/*其中:

SPCTL^7(SSIG)....../SS 忽略。

1:MSTR(位4)确定器件为主机还是从机。

0:/SS 脚用于确定器件为主机还是从机。/SS 脚可作为I/O

口使用(见SPI 主从选择表)。

SPCTL^6(SPEN)...... SPI 使能。1:SPI 使能。0:SPI 被禁止,所有SPI 管脚都作

为I/O 口使用。

SPCTL^5(DORD)...... SPI 数据顺序:1:数据字的LSB(最低位) 最先发送;

0:数据字的MSB(最高位) 最先发送。

SPCTL^4(MSTR)...... 主/从模式选择(见SPI 主从选择表)。

SPCTL^3(CPOL)...... SPI 时钟极性:1:SPICLK 空闲时为高电平。SPICLK 的前时

钟沿为下降沿而后沿为上升沿。0:SPICLK 空闲时为低电平。

SPICLK 的前时钟沿为上升沿而后沿为下降沿。

SPCTL^2(CPHA)...... SPI 时钟相位选择:

1:数据在SPICLK 的前时钟沿驱动,并在后时钟沿采样。

0:数据在/SS 为低(SSIG=00)时被驱动,在SPICLK 的后时钟

沿被改变,并在前时钟沿被采样。

(注:SSIG_atbit(1 时的 *** 作未定义)

SPCTL^1~0(SPR1~0)...SPR0/SPR1是SPI 时钟速率选择控制位。

SPR1^SPR0:

0 0 -CPU_CLK/4

0 1 -CPU_CLK/16

1 0 -CPU_CLK/64

1 1 -CPU_CLK/128

*/

sfr SPI_DATA =0X86 /* SPI数据收发寄存器SPDAT*/

sfr ADC_CONTR =0XC5 /* ADC控制寄存器*/

/*其中:

ADC_CONTR^7(ADC_POWER)..ADC 电源控制位。0:关闭;1:打开.

启动AD 转换前一定要确认AD 电源已打开,AD 转换结束

后关闭AD 电源可降低功耗,也可不关闭。初次打开内部

A/D 转换模拟电源,需适当延时,等内部模拟电源稳定

后,再启动A/D 转换建议启动A/D 转换后,在A/D 转换

结束之前,不改变任何I/O 口的状态,有利于高精度A/D

转换.

ADC_CONTR^6~5(SPEED1~0).模数转换器转换速度控制位

SPEED1 SPEED0 A/D 转换所需时间

1 1210个时钟周期转换一次,CPU 工作频率20MHz 时,A/D转

换速度约 100KHz

10420个时钟周期转换一次

01630个时钟周期转换一次

00840个时钟周期转换一次

ADC_CONTR^4(ADC_FLAG)...模数转换器转换结束标志位,当A/D 转换完成后,ADC_FLAG

_atbit( 1,要由软件清0。不管是A/D 转换完成后由该位申请产

生中断,还是由软件查询该标志位A/D 转换是否结束,当A/D

转换完成后,ADC_FLAG= 1,一定要软件清0。

ADC_CONTR^3(ADC_START)...模数转换器(ADC)转换启动控制位,设置为1时,开始转换

ADC_CONTR^2~0(CHS2~0)....CHS0:模拟输入通道选择

CHS2 CHS1 CHS0模拟输入通道选择

0 0 0 选择 P1.0 作为A/D 输入来用

0 0 1 选择 P1.1 作为A/D 输入来用

0 1 0 选择 P1.2 作为A/D 输入来用

0 1 1 选择 P1.3 作为A/D 输入来用

1 0 0 选择 P1.4 作为A/D 输入来用

1 0 1 选择 P1.5 作为A/D 输入来用

1 1 0 选择 P1.6 作为A/D 输入来用

1 1 1 选择 P1.7 作为A/D 输入来用

*/

sfr ADC_DATA=0XC6 /* A/D 转换结果特殊功能寄存器 */

sfr CCON=0XD8 /* PCA 控制寄存器,支持位寻址后面有定义*/

/*其中:

CCON^7(CF)......PCA计数器阵列溢出标志。计数值翻转时该位由硬件置位。

如果CMOD寄存器的ECF位置位, CF标志可用来产生中断。

CF位可通过硬件或软件置位, 但只可通过软件清零。

CCON^6(CR)......PCA计数器阵列运行控制位。该位通过软件置位, 用来起

动PCA计数器阵列计数。该位通过软件清零, 用来关闭

PCA计数器。

CCON^5~2保留

CCON^1(CCF1)....PCA模块1中断标志。当出现匹配或捕获时该位由硬件置位。

该位必须通过软件清零。

CCON^0(CCF0)....PCA模块0中断标志。当出现匹配或捕获时该位由硬件置位。

该位必须通过软件清零。

*/

sfr CMOD=0XD9 /* PCA 模式寄存器 */

/*其中:

CMOD^7(CIDL)....计数器阵列空闲控制:CIDL_atbit(0时,空闲模式下PCA计数器继

续工作。CIDL=1时,空闲模式下PCA计数器停止工作。

CMOD^6~3保留

CMOD^2~1(CPS1,CPS0)PCA计数脉冲选择

CPS1 CPS0 选择PCA 时钟源输入

00 0,内部时钟,Fosc/12

011,内部时钟,Fosc/2

102,定时器0溢出,由于定时器0可以工作在1T方式,所以可以

达到计一个时钟就溢出, 频率反而是最高的, 可达

到Fosc

113,ECI/P3.4脚的外部时钟输入(最大速率_atbit(Fosc/2)

CMOD^0(ECF).....PCA计数溢出中断使能:ECF_atbit(1时,使能寄存器CCON CF位的

中断。ECF_atbit(0时,禁止该功能。

*/

sfr CH= 0XF9 /* PCA计数器初始值高8位*/

sfr CL = 0XE9 /* PCA计数器初始值低8位*/

sfr CCAPM0=0XDA /* PCA 比较/ 捕获模块寄存器0*/

/*

CCAPM0^7保留

CCAPM0^6(ECOM0)........ 使能比较器。ECOM0= 1时使能比较器功能。

CCAPM0^5(CAPP0)........ 正捕获。CAPP0= 1时使能上升沿捕获。

CCAPM0^4(CAPN0)........ 负捕获。CAPN0= 1时使能下降沿捕获。

CCAPM0^3(MAT0)......... 匹配。当MAT0= 1时, PCA计数值与模块的比较/捕获寄

存器的值的匹配将置位CCON寄存器的中断标志位CCF0。

CCAPM0^2(TOG0).........翻转。当TOG0= 1时, PCA计数值与模块的比较/捕获寄

存器的值的匹配将使CEXn脚翻转。(CEX0/P3.7)

CCAPM0^1(PWM0)......... 脉宽调节模式。当PWM0= 1时, 使能CEXn脚用作脉宽调

节输出。

CCAPM0^0(ECCF0)........ 使能CCF0中断。使能寄存器CCON的比较/捕获标志CCF0,

用来产生中断。

使用的机种基本模式组合:

ECOM0 CAPP0 CAPN0 MAT0TOG0 PWM0 ECCF0模块功能

00 000 00无此 *** 作

X1 000 0X16位捕获模式,由CEX0的上升沿触发

X0 100 0X16位捕获模式,由CEX0的下降沿触发

X1 100 0X16位捕获模式,由CEX0的跳变触发

10 010 0X16位软件定时器

10 011 0X16位高速输出

10 000 108位PWM

*/

sfr CCAP0H =0XFA /* 当出现捕获或比较时,它们用来保存16 位的计数值。

当PCA 模块用在PWM 模式中时,它们用来控制输出的

占空比。CCAP0H.CCAP0L分别为高低8位,组合使用*/

sfr CCAP0L =0XEA

sfr PCA_PWM0 =0XF2 /* PWM下9位数的最高位

PCA_PWM0^1(EPC0H)....在PWM模式下,与CCAP0H组成9位数

PCA_PWM0^0(EPC0L)....在PWM模式下,与CCAP0L组成9位数

*/

sfr CCAPM1 =0XDB /* PCA 比较/ 捕获模块寄存器1,支持位寻址定义在后面 */

/*

CCAPM1^7保留

CCAPM1^6(ECOM1)........ 使能比较器。ECOM1= 1时使能比较器功能。

CCAPM1^5(CAPP1)........ 正捕获。CAPP1= 1时使能上升沿捕获。

CCAPM1^4(CAPN1)........ 负捕获。CAPN1= 1时使能下降沿捕获。

CCAPM1^3(MAT1)......... 匹配。当MAT1= 1时, PCA计数值与模块的比较/捕获寄

存器的值的匹配将置位CCON寄存器的中断标志位CCF1。

CCAPM1^2(TOG1).........翻转。当TOG1= 1时, PCA计数值与模块的比较/捕获寄

存器的值的匹配将使CEXn脚翻转。(CEX1/P3.5)

CCAPM1^1(PWM1)......... 脉宽调节模式。当PWMn= 1时, 使能CEXn脚用作脉宽调

节输出。

CCAPM1^0(ECCF1)........ 使能CCF1中断。使能寄存器CCON的比较/捕获标志CCF1,

用来产生中断。

使用的机种基本模式组合:

ECOM1 CAPP1 CAPN1 MAT1TOG1 PWM1 ECCF1模块功能

00 000 00无此 *** 作

X1 000 0X16位捕获模式,由CEX1的上升沿触发

X0 100 0X16位捕获模式,由CEX1的下降沿触发

X1 100 0X16位捕获模式,由CEX1的跳变触发

10 010 0X16位软件定时器

10 011 0X16位高速输出

10 000 108位PWM

*/

sfr CCAP1H =0XFB /* 当出现捕获或比较时,它们用来保存16 位的计数值。

当PCA 模块用在PWM 模式中时,它们用来控制输出的

占空比。CCAP1H.CCAP1L分别为高低8位,组合使用*/

sfr CCAP1L =0XEB

sfr PCA_PWM1 =0XF3 /* PWM下9位数的最高位

PCA_PWM1^1(EPC1H)....在PWM模式下,与CCAP1H组成9位数

PCA_PWM1^0(EPC1L)....在PWM模式下,与CCAP1L组成9位数

*/

/*------------------------------------------------

PCON Bit Values

------------------------------------------------*/

#define IDL_0x01

#define STOP_ 0x02

#define EWT_0x04

#define EPFW_ 0x08

#define WTR_0x10

#define PFW_0x20

#define POR_0x40

#define SMOD_ 0x80

/*------------------------------------------------

TCON Bit Registers

------------------------------------------------*/

sbit IT0=TCON^0

sbit IE0=TCON^1

sbit IT1=TCON^2

sbit IE1=TCON^3

sbit TR0=TCON^4

sbit TF0=TCON^5

sbit TR1=TCON^6

sbit TF1=TCON^7

/*------------------------------------------------

TMOD Bit Values

------------------------------------------------*/

#define T0_M0_ 0x01

#define T0_M1_ 0x02

#define T0_CT_ 0x04

#define T0_GATE_ 0x08

#define T1_M0_ 0x10

#define T1_M1_ 0x20

#define T1_CT_ 0x40

#define T1_GATE_ 0x80

#define T1_MASK_ 0xF0

#define T0_MASK_ 0x0F

/*------------------------------------------------

P1 Bit Registers

------------------------------------------------*/

sbit P1_0= P1^0

sbit P1_1= P1^1

sbit P1_2= P1^2

sbit P1_3= P1^3

sbit P1_4= P1^4

sbit P1_5= P1^5

sbit P1_6= P1^6

sbit P1_7= P1^7

sbit ADC0= P1^0 /* + Analog input */

sbit ADC1= P1^1 /* + Analog input */

sbit ADC2= P1^2 /* + Analog input */

sbit ADC3= P1^3 /* + Analog input */

sbit ADC4= P1^4 /* + Analog input */

sbit ADC5= P1^5 /* + Analog input */

sbit ADC6= P1^6 /* + Analog input */

sbit ADC7= P1^7 /* + Analog input */

/* SPI 专用IO */

sbit SS = P1^4 /* 主从SPI选择,外部输入P1.4_atbit(0为从机*/

sbit MOSI= P1^5 /* 主输出/从输入*/

sbit MISO= P1^6 /* 主输入/从输出*/

sbit SCLK= P1^7 /* SPI时钟,主方输出,从方接收*/

/*------------------------------------------------

SCON Bit Registers

------------------------------------------------*/

sbit RI = SCON^0

sbit TI = SCON^1

sbit RB8 = SCON^2

sbit TB8 = SCON^3

sbit REN = SCON^4

sbit SM2 = SCON^5

sbit SM1 = SCON^6

sbit SM0 = SCON^7

/*------------------------------------------------

IE Bit Registers

------------------------------------------------*/

sbit EX0 = IE^0 /* 1_atbit(Enable External interrupt 0 */

sbit ET0 = IE^1 /* 1_atbit(Enable Timer 0 interrupt */

sbit EX1 = IE^2 /* 1_atbit(Enable External interrupt 1 */

sbit ET1 = IE^3 /* 1_atbit(Enable Timer 1 interrupt */

sbit ES = IE^4 /* 1_atbit(Enable Serial port interrupt */

sbit ET2 = IE^5 /* 1_atbit(Enable Timer 2 interrupt */

sbit EA = IE^7 /* 0_atbit(Disable all interrupts */

/*------------------------------------------------

P3 Bit Registers (Mnemonics &Ports)

------------------------------------------------*/

sbit P3_0= P3^0

sbit P3_1= P3^1

sbit P3_2= P3^2

sbit P3_3= P3^3

sbit P3_4= P3^4

sbit P3_5= P3^5

/* P3_6 Hardwired as AOUT */

sbit P3_7= P3^7

sbit RXD = P3^0 /* Serial data input */

sbit TXD = P3^1 /* Serial data output */

sbit INT0= P3^2 /* External interrupt 0 */

sbit INT1= P3^3 /* External interrupt 1 */

sbit T0 = P3^4 /* Timer 0 外部时钟输入口P3.4 */

sbit ECI = P3^4 /* PCA计数器阵列的可选外部时钟输入口P3.4 */

sbit T1 = P3^5 /* Timer 1 外部时钟输入口P3.5 */

sbit CEX1= P3^5 /* PCA计数器与模块的比较/捕获寄存器的值的匹配时的输出口*/

sbit PWM1= P3^5 /* PWM方式时PWM1的输出口P3.5/PCA1反相输出*/

sbit CEX0= P3^7 /* PCA计数器与模块的比较/捕获寄存器的值的匹配时的输出口*/

sbit PWM0= P3^7 /* PWM方式时PWM0的输出口P3.7/PCA0反相输出*/

/*------------------------------------------------

IP 中断优先级寄存器低8位

------------------------------------------------*/

sbit PX0 = IP^0 /* 外部中断0 P3.2*/

sbit PT0 = IP^1 /* 定时计数器0中断*/

sbit PX1 = IP^2 /* 外部中断1 P3.3*/

sbit PT1 = IP^3 /* 定时计数器1中断*/

sbit PS = IP^4 /* 通信中断RI或TI*/

/*------------------------------------------------

PSW Bit Registers

------------------------------------------------*/

sbit P = PSW^0

sbit FL = PSW^1

sbit OV = PSW^2

sbit RS0 = PSW^3

sbit RS1 = PSW^4

sbit F0 = PSW^5

sbit AC = PSW^6

sbit CY = PSW^7

/*------------------------------------------------

PCA 控制寄存器CCON Bit Registers

------------------------------------------------*/

sbit CCF0= CCON^0 /*PCA模块0中断标志。当出现匹配或捕获时该位由硬件置位。

该位必须通过软件清零。*/

sbit CCF1= CCON^1 /*PCA模块1中断标志。当出现匹配或捕获时该位由硬件置位。

该位必须通过软件清零。*/

sbit CR = CCON^6 /*PCA计数器阵列运行控制位。该位通过软件置位, 用来起

动PCA计数器阵列计数。该位通过软件清零, 用来关闭

PCA计数器。*/

sbit CF = CCON^7 /*PCA计数器阵列溢出标志。计数值翻转时该位由硬件置位。

如果CMOD寄存器的ECF位置位, CF标志可用来产生中断。

CF位可通过硬件或软件置位, 但只可通过软件清零。*/


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11822877.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存