一、编程步骤:
1、看门狗设置 2、系统初始化 3、端口初始化 4、对应功能初始化(如:串口,定时器,I2C,SPI,PCA,DAC/ADC,中断等等) 5、功能函数或中断函数(如需要)6、包含的头
文件 7、项目说明
二、对应功能初始化要点:
1、Uart:(1)串口工作模式由SCON设定(2)定时器工作方式设定TMOD (3)波特率TH载入值设定
(4)启动TR1 (5)时钟基准 CKCON (6)波特率加倍设定 PCON(7)开中断使能TI
2、Time:(1)工作方式设定TMOD (2)定时器时钟基准CKCON (3)启动/停止TCON设定TRn
3、Interrupt:(1)中断允许IE (2)触发方式设定(上下沿,电平)(3)对应控制位允许设定,如ES串口允许
C8051F020单片机初始化程序
; $INCLUDE (C8051F020.inc) http://wbymcs51.blog.bokee.net/
C8051F020单片机功能强大,初始化也比较繁杂,为了便于初始化各功能模块,我们编了此程序可看着“说明”初始化。
ORG SYS_INIT
;※▲◆●◎★☆△
;◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
;■-- <1> --电源管理
; PCON ; POWER CONTROL
;■-- <2> --系统时钟和振荡器
; OSCXCN ; EXTERNAL OSCILLATOR CONTROL
; OSCICN ; INTERNAL OSCILLATOR CONTROL
;■-- <3> --复位及看门狗管理
; RSTSRC ; RESET SOURCE
; WDTCN ; WATCHDOG TIMER CONTROL
;■-- <4> --FLASH存储器编程和安全管理
; FLSCL ; FLASH MEMORY TIMING PRESCALER
; PSCTL ; PROGRAM STORE R/W CONTROL
; FLACL ; FLASH ACESS LIMIT
;■-- <5> --中断控制
; IE ; INTERRUPT ENABLE
; EIE1 ; EXTERNAL INTERRUPT ENABLE 1
; EIE2 ; EXTERNAL INTERRUPT ENABLE 2
; IP ; INTERRUPT PRIORITY
; EIP1 ; EXTERNAL INTERRUPT PRIORITY REGISTER 1
; EIP2 ; EXTERNAL INTERRUPT PRIORITY REGISTER 2
; P3IF ; PORT 3 EXTERNAL INTERRUPT FLAGS
;■-- <6> --端口IO初始化及交叉开关设置
; XBR0 ; DIGITAL CROSSBAR CONFIGURATION REGISTER 0
; XBR1 ; DIGITAL CROSSBAR CONFIGURATION REGISTER 1
; XBR2 ; DIGITAL CROSSBAR CONFIGURATION REGISTER 2
; P0MDOUT ; PORT 0 OUTPUT MODE CONFIGURATION
; P1MDOUT ; PORT 1 OUTPUT MODE CONFIGURATION
; P2MDOUT ; PORT 2 OUTPUT MODE CONFIGURATION
; P3MDOUT ; PORT 3 OUTPUT MODE CONFIGURATION
; P74OUT ; PORTS 4 - 7 OUTPUT MODE
;■-- <7> --外部RAM和片内XRAM
; EMI0CN ; EXTERNAL MEMORY INTERFACE CONTROL
; EMI0CF ; EXTERNAL MEMORY INTERFACE (EMIF) CONFIGURATION
; EMI0TC ; EXTERNAL MEMORY
;■-- <8> --定时器设置
; TMOD ; TIMER MODE
; TCON ; TIMER CONTROL
; T2CON ; TIMER 2 CONTROL
; T4CON ; TIMER 4 CONTROL
; TMR3CN ; TIMER 3 CONTROL
; TMR3RLL ; TIMER 3 RELOAD REGISTER - LOW BYTE
; TMR3RLH ; TIMER 3 RELOAD REGISTER - HIGH BYTE
; TMR3L ; TIMER 3 - LOW BYTE
; TMR3H ; TIMER 3 - HIGH BYTE
;■-- <9> --串行通讯
; SCON0 ; SERIAL PORT 0 CONTROL
; SCON1 ; SERIAL PORT 1 CONTROL
; SBUF1 ; SERAIL PORT 1 DATA
; SADDR1 ; SERAIL PORT 1
; PCON ; POWER CONTROL
; RCAP2L ; TIMER 2 CAPTURE REGISTER - LOW BYTE
; RCAP2H ; TIMER 2 CAPTURE REGISTER - HIGH BYTE
; RCAP4L ; TIMER 4 CAPTURE REGISTER - LOW BYTE
; RCAP4H ; TIMER 4 CAPTURE REGISTER - HIGH BYTE
; SADDR0 ; SERIAL PORT 0 SLAVE ADDRESS
;■-- <10> --可编程计数器阵列
; PCA0CN ; PCA 0 COUNTER CONTROL
; PCA0MD ; PCA 0 COUNTER MODE
; PCA0CPM0 ; CONTROL REGISTER FOR PCA 0 MODULE 0
; PCA0CPM1 ; CONTROL REGISTER FOR PCA 0 MODULE 1
; PCA0CPM2 ; CONTROL REGISTER FOR PCA 0 MODULE 2
; PCA0CPM3 ; CONTROL REGISTER FOR PCA 0 MODULE 3
; PCA0CPM4 ; CONTROL REGISTER FOR PCA 0 MODULE 4
;■-- <11> --SMBus通讯
; SMB0CN ; SMBUS 0 CONTROL
; SMB0CR ; SMBUS 0 CLOCK RATE
; SMB0STA ; SMBUS 0 STATUS
; SMB0DAT ; SMBUS 0 DATA
; SMB0ADR ; SMBUS 0 SLAVE ADDRESS
;■-- <12> --SPI总线通讯
; SPI0CKR ; SERIAL PERIPHERAL INTERFACE 0 CLOCK RATE CONTROL
; SPI0DAT ; SERIAL PERIPHERAL INTERFACE 0 DATA
; SPI0CFG ; SERIAL PERIPHERAL INTERFACE 0 CONFIGURATION
; SPI0CN ; SERIAL PERIPHERAL INTERFACE 0 CONTROL
;-- <13> --ADC转换
; AMX0CF ; ADC 0 MUX CONFIGURATION
; AMX0SL ; ADC 0 MUX CHANNEL SELECTION
; ADC0CF ; ADC 0 CONFIGURATION
; ADC0CN ; ADC 0 CONTROL
; ADC0L ; ADC 0 DATA - LOW BYTE
; ADC0H ; ADC 0 DATA - HIGH BYTE
; ADC1CF ; ADC 1 ANALOG MUX CONFIGURATION
; AMX1SL ; ADC 1 ANALOG MUX CHANNEL SELECT
; ADC1CN ; ADC 1 CONTROL
; ADC0GTL ; ADC 0 GREATER-THAN REGISTER - LOW BYTE
; ADC0GTH ; ADC 0 GREATER-THAN REGISTER - HIGH BYTE
; ADC0LTL ; ADC 0 LESS-THAN REGISTER - LOW BYTE
; ADC0LTH ; ADC 0 LESS-THAN REGISTER - HIGH BYTE
; REF0CN ; VOLTAGE REFERENCE 0 CONTROL
; ADC1 ; ADC 1 DATA
;■-- <14> --DAC转换
; PCA0L ; PCA 0 TIMER - LOW BYTE
; PCA0H ; PCA 0 TIMER - HIGH BYTE
; DAC0CN ; DAC 0 CONTROL
; DAC1L ; DAC 1 REGISTER - LOW BYTE
; DAC1H ; DAC 1 REGISTER - HIGH BYTE
; DAC1CN ; DAC 1 CONTROL
;■-- <15> --比较器设置
; CPT0CN ; COMPARATOR 0 CONTROL
; CPT1CN ; COMPARATOR 1 CONTROL
; EMI0TC ; EMIF TIMING CONTROL
;■-- <16> --时钟/电压基准设置
; CKCON ; CLOCK CONTROL
; SADEN1 ; SERIAL PORT 1 SLAVE ADDRESS MASK
; SADEN0 ; SERIAL PORT 0 SLAVE ADDRESS MASK
; P1MDIN ; PORT 1 INPUT MODE
; PSW ; PROGRAM STATUS WORD
; B ; B REGISTER
; WDTCN ; WATCHDOG TIMER CONTROL
;◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
;
;====================================================================
; function: Init_CTS 定时器/计数器,中断和串行通讯初始化子程序
; input: -----------------
; output: -----------------
; usage: -----------------
;====================================================================
THS0 equ 0a8h
TLS0 equ 09ah
; THS1 equ 0fah;0feh;0fah;-4800;0f4h
; TLS1 equ 0fah;0feh;0fah;-4800;0f4h
;
; THS2 equ 0ffh;0feh;0fah;-4800;0f4h
; TLS2 equ 0b8h;0feh;0fah;-4800;0f4h
Init_TCS: ;定时器/计数器,中断和串行通讯初始化子程序
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
; ◆◆◆8051内部控制寄存器◆◆◆
;************************************************************************************
;|名 称| 代号 | 地址|位寻| B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
;|--------|------|------|----|-----|------|------|------|------|------|------|------|
;|电源控制| PCON | 87H | NO |SMOD | -- | -- | -- | GF1 | GF0 | PD | IDL |
;|--------|------|------|----|-----|------|------|------|------|------|------|------|
;|计时控制| TCON | 88H | YE |TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
;|--------|------|------|----|-----|------|------|------|------|------|------|------|
;|计时模式| TMOD | 89H | NO |1GATE| 1C/T | 1M1 | 1M0 | 0GATE| 0C/T | 0M1 | 0M0 |
;|--------|------|------|----|-----|------|------|------|------|------|------|------|
;|串行控制| SCON | 98H | YE |SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
;|--------|------|------|----|-----|------|------|------|------|------|------|------|
;|中断允许| IE | A8H | YE |EA | -- | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
;|--------|------|------|----|-----|------|------|------|------|------|------|------|
;|中断优先| IP | B8H | YE |-- | -- | PT2 | PS | PT1 | PX1 | PT0 | PX0 |
;************************************************************************************
;时钟频率为:11.059200MHz;
;机器周期为:12/fosc=1.085069μs;
;CT0定时器设定延时为:2000μs;
;CT0定时器工作于模式0;
;CT0溢出处理采用中断方式;
;CT0选择内部时钟;
;CT0启动由TR0的0/1决定;
;设定波特率为: 4800bps;
;串口0工作于方式1--T1定时器工作于方式2;
;串口1工作于模式3--T2定时器用于波特率发生器 4800bps
mov TH0, #THS0
mov TL0, #TLS0
; mov TH1, #THS1
; mov TL1, #TLS1
; mov TH2, #THS2
; mov TL2, #TLS2
;▲■-- <1> --电源管理
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;87H---PCON-------电源控制寄存器
;复位值: 00000000
;位 7-2: 保留。
;STOP:停机方式选择。
; 向该位写’1’将使 CIP-51 进入停机方式。该位读出值总是为 0。
; 0:无影响
; 1:CIP-51 被强制进入掉电方式(关闭振荡器
;IDLE:空闲方式选择。向该位写’1’将使 CIP-51 进入空闲方式。该位读出值总是为 0。
; 0:无影响
; 1:CIP-51 被强制进入空闲方式。(关闭供给 CPU 的时钟信号,但定时器、中断和
; 所有外设保持活动状态。)
;======================================================================
;|电源控制| PCON | 87H | - |- | - | - | - | - | - | STOP | IDLE |
;------------------------------------------------------------------------------------
; mov PCON, #00000000B
; mov PCON, #080h
;▲■-- <2> --系统时钟和振荡器
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;B1H---OSCXCN----外部振荡器控制寄存器
;复位值: 00000000
;XTLVLD:晶体振荡器有效标志,(在 XOSCMD=11x 时有效,只读)
; 0:晶体振荡器未用或未稳定。
; 1:晶体振荡器正在运行并且工作稳定。
;: XOSCMD2-0:外部振荡器方式位
; 00x:外部振荡器电路关闭。
; 010:外部 CMOS 时钟方式。
; 011:外部 CMOS 时钟方式二分频。
; 100:RC 振荡器方式。
; 101:电容振荡器方式。
; 110:晶体振荡器方式。
; 111:晶体振荡器方式二分频。
;位 3: 保留。读 = 0,写 = 忽略。
;XFCN2-0:外部振荡器频率控制位。
; XFCN 晶体(XOSCMD=11x) RC(XOSCMD=10x) C(XOSCMD=10x)
; 000 F ≤ 32kHz F ≤ 25kHz K 因子= 0.87
; 001 32kHz < f ≤ 84kHz 25kHz < f ≤ 50kHz K 因子= 2.6
; 010 84kHz < f ≤ 225kHz 50kHz < f ≤ 100kHz K 因子= 7.7
; 011 225kHz < f ≤ 590kHz 100kHz < f ≤ 200kHz K 因子= 22
; 100 590kHz < f ≤ 1.5MHz 200kHz < f ≤ 400kHz K 因子= 65
; 101 1.5MHz < f ≤ 4MHz 400kHz < f ≤ 800kHz K 因子= 180
; 110 4MHz < f≤ 10MHz 800kHz < f ≤ 1.6MHz K 因子= 664
; 111 10MHz < f≤ 30MHz 1.6MHz < f ≤ 3.2MHz K 因子= 1590
;======================================================================
;|外部振荡器控制| OSCXCN | B1H | - |XTLVLD| XOSCMD2 | XOSCMD1 | XOSCMD0 |XFCN2 | XFCN1 | XFCN0
;------------------------------------------------------------------------------------
; mov OSCXCN, #01100111B
mov OSCXCN, #067h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;B2H---OSCICN----内部振荡器控制寄存器
;复位值: 11000000
;IOSCEN:内部振荡器使能位
; 0:内部振荡器禁止。
; 1:内部振荡器使能。
;IFRDY:内部振荡器频率准备好标志
; 0:内部振荡器未运行在编程频率。
; 1:内部振荡器按编程频率运行。
;位 5-2:未用。读 = 0000b,写 = 忽略。
;IFCN1-0:内部振荡器频率控制位
; 00:SYSCLK 为内部振荡器 8 分频。
; 01:SYSCLK 为内部振荡器 4 分频。
; 10:SYSCLK 为内部振荡器 2 分频。
; 11:SYSCLK 为内部振荡器输出(不分频)。
;======================================================================
;|内部振荡器控制| OSCICN | B2H | - |IOSCEN|IFRDY | - | - | - | - | IFCN1| IFCN0
;------------------------------------------------------------------------------------
; mov OSCICN, #00001000B
mov OSCICN, #08h
;▲■-- <3> --复位及看门狗管理
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;EFH---RSTSRC----复位源寄存器
;复位值: 可变
;位 7: 未用。读 = 0,写 = 忽略。
;CNVRSEF:转换启动复位源使能和标志。
; 写:
; 0:CNVSTR0 不是复位源。
; 1:CNVSTR0 是复位源(低电平有效)。
; 读:
; 0:前面的复位不是来自 CNVSTR0。
; 1:前面的复位来自 CNVSTR0。 ?
;C0RSEF:比较器 0 复位使能和标志
; 写:
; 0:比较器 0 不是复位源。
; 1:比较器 0 是复位源(低电平有效)。
; 读:
; 0:前面的复位不是来自比较器 0。
; 1:前面的复位来自比较器 0。
;SWRSF:软件强制复位和标志
; 写
; 0:无作用
; 1:强制产生一个内部复位。/RST 引脚不受影响。
; 读
; 0:前面的复位不是来自写 SWRSF 位。
; 1:前面的复位来自写 SWRSF 位。
;WDTRSF:看门狗定时器复位标志
; 0:前面的复位不是来自 WDT 超时。
; 1:前面的复位来自 WDT 超时。
;MCDRSF:时钟丢失检测器标志
; 写
; 0:时钟丢失检测器禁止。
; 1:时钟丢失检测器使能。如果检测到时钟丢失条件,则触发复位。
; 读
; 0:前面的复位不是来自时钟丢失检测器超时。
; 1:前面的复位来自时钟丢失检测器超时。
;PORSF:上电复位和 VDD 监视器复位标志
; 写:如果 VDD 监视器被使能(MONEN 引脚接逻辑高电平),可以通过写该位
; 来选择 VDD 监视器为复位源。
; 写
; 0:不选择 VDD 监视器为复位源。
; 1:选择 VDD 监视器为复位源。?
; 重要:在上电时,通过外部 VDD 监视器使能引脚(MONEN)来使能/禁止 VDD
; 监视器。PORSF 位并不使能或禁止 VDD 监视器电路,它只是选择 VDD 监
; 视 器为复位源。
; 发生上电复位后该位被置’1’。这可能是真正的上电复位,也可能是 VDD
; 监视器复位。无论哪一种情况,复位后数据存储器的内容都应被视为不确定。
; 读
; 0:前面的复位不是来自上电或 VDD 监视器复位。
; 1:前面的复位来自上电或 VDD 监视器复位。 注:当该标志位的读出值
; 为’1’时,所有其它复位标志都是不确定的。
;PINRSF:硬件引脚复位标志
; 0:无影响。
; 1:强制产生一次上电复位。/RST 引脚被驱动为低电平。
; 读:
; 0:前面的复位不是来自/RST 引脚。
; 1:前面的复位来自/RST 引脚。
;======================================================================
;|复位源| RSTSRC| EFH | - |- | CNVRSEF | C0RSEF | SWRSF | WDTRSF | MCDRSF | PORSF |PINRSF
;------------------------------------------------------------------------------------
; mov RSTSRC, #01000000B
mov RSTSRC, #040h
;▲■-- <4> --FLASH存储器编程和安全管理
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;B6H---FLSCL----FLASH 定时预分频
;复位值: 10000000
;FOSE:FLASH 单稳态定时器使能
; 该位用于使能 FLASH 读操作单稳态定时器。当 FLASH 单稳态定时器被禁止时,
; FLASH 读出放大器在整个 FLASH 读周期内被使能。当系统时钟频率低于
; 10MHz 时,禁止 FLASH 单稳态定时器会增加系统功耗。
; 0:禁止 FLASH 单稳态定时器。
; 1:使能 FLASH 单稳态定时器。
;位 6-0: 保留。读 = 0,必须写 0。
;======================================================================
;|FLASH 定时预分频| FLSCL | B6H | - |FOSE| - | - | - | - | - | - | -
;------------------------------------------------------------------------------------
; mov FLSCL, #00000000B
mov FLSCL, #00h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;8FH---PSCTL----程序存储读写控制
;复位值: 00000000
;位 7-2: 未使用。读 = 000000b,写 = 忽略。
;PSEE:程序存储擦除允许
; 将该位置’1’后允许擦除 FLASH 存储器中的一个页(前提是 PSWE 位也被 置’1’)。在将该位置’1’后,用 MOVX 指令进行一次写操作将擦除包含 MOVX 指令寻址地
址的那个 FLASH 页。用于写操作的数据可以是任意值。
; 0:禁止擦除 FLASH 存储器。
; 1:允许擦除 FLASH 存储器。
;PSWE:程序存储写允许
; 将该位置’1’后允许用 MOVX 指令向 FLASH 存储器写一个字节。在写数据 之前必须先进行擦除。
; 0:禁止写 FLASH 存储器。
; 1:允许写 FLASH 存储器;MOVX 写指令寻址 FLASH 存储器。
;======================================================================
;|程序存储读写控制|PSCTL | 8FH | - |- | - | - | - | - | - | PSEE | PSWE
;------------------------------------------------------------------------------------
; mov PSCTL, #00000010B
mov PSCTL, #03h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;B7H---FLACL----FLASH 定时预分频
;复位值: 00000000
;位 7-0 FLACL:FLASH 访问限制
;======================================================================
;|FLACL 访问限制寄存器| FLSCL | B7H | - |- | - | - | - | - | - | - | -
;------------------------------------------------------------------------------------
; mov FLACL, #00000000B
mov FLACL, #00h
;▲■-- <5> --中断控制
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;A8H---IE----------中断使能
;(可位寻址)
;EA:允许所有中断「梦辉市恚顾兄卸稀K剿械牡ジ鲋卸掀帘紊柚谩?
; 0:禁止所有中断源。
; 1:开放中断。每个中断由它对应的中断屏蔽设置决定。
;IEGF0:通用标志位 0。
; 该位用作软件控制的通用标志位。 ?
;ET2:定时器 2 中断允许位?
; 该位用于设置定时器 2 的中断屏蔽。
; 0:禁止定时器 2 中断。
; 1:允许 TF2L 或 TF2H 标志的中断请求。
;ES0:UART0 中断允许位。该位设置 UART0 的中断屏蔽。
; 0:禁止 UART0 中断。
; 1:允许 UART0 中断。
;ET1:定时器 1 中断允许位。 该位用于设置定时器 1 的中断屏蔽。
; 0:禁止定时器 1 中断。
; 1:允许 TF1 标志位的中断请求。
;EX1:外部中断 1 允许位。该位用于设置外部中断 1 的中断屏蔽。
; 0:禁止外部中断 1。
; 1:允许/INT1 引脚的中断请求
;ET0:定时器 0 中断允许位,该位用于设置定时器 0 的中断屏蔽。
; 0:禁止定时器 0 中断。
; 1:允许 TF0 标志位的中断请求。
;EX0:外部中断 0 允许位。该位用于设置外部中断 0 的中断屏蔽。
; 0:禁止外部中断 0。
; 1:允许/INT0 引脚的中断请求
;-----------------------------------------------------------------------------------
;位:7 6 5 4 3 2 1 0
; EA IEGF0 ET2 ES0 ET1 EX1 ET0 EX0
;RST:0 0 0 0 0 0 0 0
;-----------------------------------------------------------------------------------
;mov IE, #1000 0010
mov IE, #082h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;E6H---EIE1----------扩展中断允许 1
;位 7: 保留。读 = 0b,写 = 忽略。
;CP2IE:允许比较器 2(CP2)中断。该位设置 CP2 的中断屏蔽。
; 0:禁止 CP2 中断。
; 1:允许 CP2 中断。
;CP1IE:允许比较器 1(CP1)中断。 该位设置 CP1 的中断屏蔽。
; 0:禁止 CP1 中断。
; 1:允许 CP1 中断。
;CP0IE:允许比较器 0(CP0)中断。 该位设置 CP0 的中断屏蔽。
; 0:禁止 CP0 中断。
; 1:允许 CP0 中断?
;EPCA0:可编程计数器阵列(PCA0)中断允许位 该位设置 PCA0 的中断屏蔽。
; 0:禁止PCA0 中断。
; 1:允许 PCA0 中断。
;EWADC0:允许 ADC0 窗口比较中断 该位设置 ADC0 窗口比较的中断屏蔽。
; 0:禁止 ADC0 窗口比较中断。
; 1:允许 ADC0 窗口比较标志的中断请求。
;ESMB0:允许 SMBus0 中断 该位设置 SMBus0 的中断屏蔽。
; 0:禁止 SMBus0 中断。
; 1:允许 SMBus0 中断。
;ESPI0:允许串行外设接口 0(SPI0)中断 该位设置 SPI0 的中断屏蔽。
; 0:禁止 SPI0 中断。
; 1:允许 SPI0 中断。
;-----------------------------------------------------------------------------------
;位:7 6 5 4 3 2 1 0
; - CP2IE CP1IE CP0IE EPCA0 EWADC0 ESMB0 ESPI0
;RST:0 0 0 0 0 0 0 0
;-----------------------------------------------------------------------------------
; mov EIE1, #00000011B
mov EIE1, #03h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;E7H---EIE2----------扩展中断允许 2
;位 7: 保留。读 = 0b,写 = 忽略。
;ES1:允许 UART1 中断。 该位设置 UART1 的中断屏蔽。
; 0:禁止 UART1 中断。
; 1:允许 UART1 中断。
;ECAN0:允许 CAN 控制器中断。 该位设置 CAN 控制器的中断屏蔽。
; 0:禁止 CAN 控制器中断。
; 1:允许 CAN 控制器中断。
;EADC2:允许 ADC2 转换结束中断。 该位设置 ADC2 转换结束的中断屏蔽。
; 0:禁止 ADC2 转换结束中断。?
; 1:允许 ADC2 转换结束中断。
;EWADC2:允许 ADC2 窗口比较中断。 该位设置 ADC2 窗口比较的中断屏蔽。
; 0:禁止 ADC2 窗口比较中断。
; 1:允许 ADC2 窗口比较中断。
;ET4:允许定时器 4 中断。该位设置定时器 4 的中断屏蔽。
; 0:禁止定时器 4 中断
; 1:允许定时器 4 中断。
;EADC0:允许 ADC0 转换结束中断。该位设置 ADC0 转换结束的中断屏蔽。
; 0:禁止 ADC0 转换结束中断。
; 1:允许 ADC0 转换结束中断。
;ET3:允许定时器 3 中断。该位设置定时器 3 中断屏蔽。
; 0:禁止定时器 3 中断。
; 1:允许定时器 3 中断。
;-----------------------------------------------------------------------------------
;位:7 6 5 4 3 2 1 0
; - ES1 ECAN0 EADC2 EWADC2 ET4 EADC0 ET3
;RST:0 0 0 0 0 0 0 0
;-----------------------------------------------------------------------------------
; mov EIE2, #01000000B
mov EIE2, #00h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;B8H---IP----------中断优先级
;(可位寻址)
;位 7-6 未用。读=1b,写=忽略。
;PT2:定时器 2 中断优先级控制 该位设置定时器 2 中断的优先级。
; 0:定时器 2 为低优先级。
; 1:定时器 2 为高优先级。
;PS0: UART0 中断优先级控制。 该位设置 UART0 中断的优先级。
; 0:UART0 为低优先级。
; 1:UART1 为高优先级。
;PT1:定时器 1 中断优先级控制 该位设置定时器 1 中断的优先级。
; 0:定时器 1 为低优先级。
; 1:定时器 1 为高优先级。
;PX1:外部中断 1 优先级控制 该位设置外部中断 1 的优先级。
; 0:外部中断 1 为低优先级。
; 1:外部中断 1 为高优先级。
;PT0:定时器 0 中断优先级控制 该位设置定时器 0 中断的优先级。
; 0:定时器 0 为低优先级。
; 1:定时器 0 为高优先级。
;PX0:外部中断 0 优先级控制 该位设置外部中断 0 的优先级。
; 0:外部中断 0 为低优先级。
; 1:外部中断 0 为高优先级。
;-----------------------------------------------------------------------------------
;位:7 6 5 4 3 2 1 0
; - - PT2 PS0 PT1 PX1 PT0 PX0
;RST:1 1 0 0 0 0 0 0
;-----------------------------------------------------------------------------------
; mov IP, #00000000B
mov IP, #00h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;F6H---EIP1----------扩展中断优先级 1
;位 7: 保留。读=0b,写=忽略。
;PCP2:比较器 2(CP2)中断优先级控制 该位设置 CP2 中断的优先级。
; 0:CP2 中断为低优先级。
; 1:CP2 中断为高优先级。
;PCP1:比较器 1(CP1)沿中断优先级控制 该位设置 CP1 中断的优先级。
; 0:CP1 沿中断为低优先级。
; 1:CP1 中断为高优先级。
;PCP0:PCP0:比较器 0(CP0)中断优先级控制 该位设置 CP0 中断的优先级。
; 0:CP0 中断设置为低优先级。?
; 1:CP0 中断设置为高优先级。
;PPCA0:PPCA0:可编程计数器阵列(PCA0)中断优先级控制 该位设置 PCA0 中断的优先级。
; 0:PCA0 中断设置为低优先级。
; 1:PCA0 中断设置为高优先级。
;PWADC0:ADC0 窗口比较器中断优先级控制 该位设置 ADC0 窗口中断的优先级。
; 0:ADC0 窗口中断为低优先级。
; 1:ADC0 窗口中断为高优先级。
;PSMB0:SMBus0 中断优先级控制 该位设置 SMBus0 中断的优先级。
; 0:SMBus 中断为低优先级。
; 1:MBus 中断为高优先级。
;PSPI0:串行外设接口 0 中断优先级控制 该位设置 SPI0 中断的优先级。
; 0:SPI0 中断为低优先级。
; 1:SPI0 中断为高优先级。
;-----------------------------------------------------------------------------------
;位:7 6 5 4 3 2 1 0
; - PCP2 PCP2 PCP0 PPCA0 PWADC0 PSMB0 PSPI0
;RST:0 0 0 0 0 0 0 0
;-----------------------------------------------------------------------------------
; mov EIP1, #01000000B
mov EIP1, #00h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;F7H---EIP2----------扩展中断优先级 2
;位 7: 保留。读=0b,写=忽略。
;PS1:UART1 中断优先级控制 该位设置 UART1 中断的优先级。
; 0:UART1 中断为低优先级
; 1:UART1 中断为高优先级。
;PCAN0:CAN0 中断优先级控制 该位设置 CAN0 中断的优先级。
; 0:CAN0 中断为低优先级?
; 1:CAN0 中断为高优先级。
;PADC2:ADC2 转换结束中断优先级控制 该位设置 ADC2 转换结束中断的优先级。
; 0:ADC2 转换结束中断为低优先级
; 1:ADC2 转换结束中断为高优先级。
;PWADC2:ADC2 窗口比较中断优先级控制 该位设置 ADC2 窗口比较中断的优先级。
; 0:ADC2 窗口比较中断为低优先级
; 1:ADC2 窗口比较中断为高优先级
;PT4:定时器 4 中断优先级控制该位设置定时器 4 中断的优先级。
; 0:定时器 4 中断设置为低优先级
; 1:定时器 4 中断设置为高优先级
;PADC0:ADC0 转换结束中断优先级控制 该位设置 ADC 转换结束中断的优先级。
; 0:ADC 转换结束中断为低优先级
; 1:ADC 转换结束中断为高优先级
;PT3:定时器 3 中断优先级控制该位设置定时器 3 中断的优先级。
; 0:定时器 3 中断为低优先级
; 1:定时器 3 中断为高优先级。
;-----------------------------------------------------------------------------------
;位:7 6 5 4 3 2 1 0
; - PCP2 PCP2 PCP0 PPCA0 PWADC0 PSMB0 PSPI0
;RST:0 0 0 0 0 0 0 0
;-----------------------------------------------------------------------------------
; mov EIP2, #01000000B
mov EIP2, #00h
;▲■-- <6> --端口IO初始化及交叉开关设置
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;E1H---XBR0----端口 I/O 交叉开关寄存器 0
;复位值: 00000000
;CP0E:比较器 0 输出使能位
; 0:CP0 不连到端口引脚。
; 1:CP0 连到端口引脚。
;ECI0E:PCA0 外部计数器输入使能位
; 0:PCA0 外部计数器输入不连到端口引脚。
; 1:PCA0 外部计数器输入(ECI0)连到端口引脚。
;PCA0ME:PCA0 模块 I/O 使能位
; 000:所有的 PCA0 I/O 都不连到端口引脚。
; 001:CEX0 连到端口引脚。
; 010:CEX0、CEX1 连到 2 个端口引脚。
; 011:CEX0、CEX1、CEX2 连到 3 个端口引脚。
; 100:CEX0、CEX1、CEX2、CEX3 连到 4 个端口引脚。
; 101:CEX0、CEX1、CEX2、CEX3、CEX4 连到 5 个端口引脚。
; 110:CEX0、CEX1、CEX2、CEX3、CEX4、CEX5 连到 6 个端口引脚。
;UART0EN:UART0 I/O 使能位。
; 0:UART0 I/O 不连到端口引脚。
; 1:UART0 的 TX0 连到 P0.0,RX0 连到 P0.1。
;SPI0EN:SPI 总线 I/O 使能位。
; 0:SPI0 I/O 不连到端口引脚。
; 1:SPI0 的 SCK、MISO、MOSI 和 NSS 连到 4 个端口引脚。
; 注意:当 SPI 被设置为 3 线方式时,NSS 信号不被分配端口引脚。
;SMB0EN:SMBus 总线 I/O 使能位
; 0:SMBus0 I/O 不连到端口引脚。
; 1:SMBus0 的 SDA 连到 2 个端口引脚。
;======================================================================
;|端口I/O交叉开关寄存器 0| XBR0 | E1H | - |CP0E| ECI0E |PCA0ME| PCA0ME |PCA0ME |UART0EN |SPI0EN|SMB0EN
;------------------------------------------------------------------------------------
; mov XBR0, #00000111B
mov XBR0, #07h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;E2H---XBR1----端口 I/O 交叉开关寄存器 1
;复位值: 00000000
;SYSCKE:/SYSCLK 输出使能位
; 0:/SYSCLK 不连到端口引脚。
; 1:/SYSCLK 连到端口引脚。
;T2EXE:T2EX 使能位
; 0:T2EX 不连到端口引脚。
; 1:T2EX 连到端口引脚。
;T2E:T2 使能位
; 0:T2 不连到端口引脚。
; 1:T2 连到端口引脚。
;INT1E:/INT1 使能位。
; 0:/INT1 不连到端口引脚。
; 1:/INT1 连到端口引脚。
;T1E:T1 使能位
; 0:T1 不连到端口引脚。
; 1:T1 连到端口引脚。
;INT0E:/INT0 使能位
; 0:/INT0 不连到端口引脚。
; 1:/INT0 连到端口引脚。
;T0E:T0 使能位
; 0:T0 不连到端口引脚。
; 1:T0 连到端口引脚。
;CP1E:比较器 1 输出使能位
; 0:CP1 不连到端口引脚。
; 1:CP1 连到端口引脚。
;======================================================================
;|端口I/O交叉开关寄存器 1| XBR1 | E2H | - |SYSCKE | T2EXE |T2E| INT1E |T1E |INT0E | T0E |CP1E |
;------------------------------------------------------------------------------------
; mov XBR1, #00000010B
mov XBR1, #02h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;E3H---XBR2----端口 I/O 交叉开关寄存器 2
;复位值: 00000000
;WEAKPUD:弱上拉禁止位。
; 0:弱上拉全局使能。
; 1:弱上拉全局禁止。
;XBARE:交叉开关使能位
; 0:交叉开关禁止。端口 0、1、2 和 3 的所有引脚被强制为输入方式。
; 1:交叉开关使能。
;位 5: 未用。读 = 0,写 = 忽略。
;T4EXE:T4EX 输入使能位
; 0:T4EX 不连到端口引脚。
; 1:T4EX 连到端口引脚。
;T4E:T4 输入使能位
; 0:T4 不连到端口引脚。
; 1:T4 连到端口引脚。
;UART1E:UART1 I/O 使能位
; 0:UART1 I/O 不连到端口引脚。
; 1:UART1 的 TX 和 RX 连到两个端口引脚。
;EMIFLE:外部存储器接口低端口使能位
; 0:P0.7、P0.6 和 P0.5 的功能由交叉开关或端口锁存器决定。
; 1:如果 EMI0CF.4 =’0’(外部存储器接口为复用方式)
; 则 P0.7 (/WR)、P0.6 (/RD)和 P0.5 (/ALE)被交叉开关跳过,它们的输出
; 状态由端口锁存器和外部存储器接口决定。
; 1:如果 EMI0CF.4 =’1’(外部存储器接口为非复用方式)
; 则 P0.7 (/WR)和 P0.6 (/RD)被交叉开关跳过,它们的输出状态由端口锁 存器和外部存储器接口决定。
;CNVST0E:ADC0 外部转换启动输入使能位
; 0:CNVSTR0 不连到端口引脚。
; 1:CNVSTR0 连到端口引脚。
;=======================================================================
;|端口 I/O 交叉开关寄存器2| XBR2 | E3H | - |CTXOUT | - |-| -| CP2E |CNVST2E |T3EXE |T3E|
;-------------------------------------------------------------------------------------
; mov XBR2, #01000000B
mov XBR2, #040h
;▲■-- <7> --外部RAM和片内XRAM
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;AFH---EMI0CN----外部存储器接口控制
;复位值: 00000000
;PGSEL[7:0]:XRAM 页选择位
;当使用 8 位的 MOVX 命令时,XRAM 页选择位提供 16 位外部数据存储器
;地 址的高字节,实际上是选择一个 256 字节的 RAM 页。
;0x00:0x0000 - 0x00FF
;0x01:0x0100 - 0x01FF
;...
;0xFE:0xFE00 - 0xFEFF
;0xFF:0xFF00 - 0xFFFF
;======================================================================
;|外部存储器接口控制|EMI0CN | A2H | - |PGSEL7| PGSEL6 | PGSEL5| PGSEL4 | PGSEL3 | PGSEL2 | PGSEL1 |PGSEL0
;------------------------------------------------------------------------------------
; mov EMI0CN, #00000000B
mov EMI0CN, #00h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;A3H---EMI0CF----外部存储器接口配置
;复位值: 00000011
;位 7-6: 未用。读 = 00b,写 = 忽略。
;PRTSEL:EMIF 端口选择位
; 0:EMIF 在 P0-P3。
; 1:EMIF 在 P4-P7。
;EMD2:EMIF 复用方式选择位
; 0:EMIF 工作在地址/数据复用方式。
; 1:EMIF 工作在非复用方式(独立的地址和数据引脚)?
;EMD1-0:EMIF 工作模式选择位这两位控制外部存储器接口的工作模式。
;00:只用内部存储器。MOVX 只寻址片内 XRAM。所有有效地址都指向片内 存储器空间。
;01:不带块选择的分片方式。寻址低于 4K 边界的地址时访问片内存储器,寻 址高于
; 4K 边界的地址时访问片外存储器? 位片外 MOVX 操作使用地址高端 口锁存器的当前内容作为地址的?
; 高字节。注意:为了能访问片外存储器空间,
; EMI0CN 必须被设置成一个不属于片内地址空间的页地址。
;10:带块选择的分片方式。寻址低于 4K 边界的地址时访问片内存储器,寻址 高于 4K 边界
; 的地址时访问片外存储器。8 位片外 MOVX操作使用 EMI0CN 的内容作为地址的高字节。
;11:只用外部存储器。MOVX 只寻址片外 XRAM。片内 XRAM 对 CPU 为不可见。
;EALE1-0:ALE 脉冲宽度选择位(只在 EMD2 =0 时有效)
; 00:ALE 高和 ALE 低脉冲宽度 = 1 个 SYSCLK 周期。
; 01:ALE 高和 ALE 低脉冲宽度 = 2 个 SYSCLK 周期。
; 10:ALE 高和 ALE 低脉冲宽度 = 3 个 SYSCLK 周期。
; 11:ALE 高和 ALE 低脉冲宽度 = 4 个 SYSCLK 周期。
;======================================================================
;|外部存储器接口配置|EMI0CF | A3H | - |-| - | PRTSEL | EMD2 | EMD1 | EMD0 | EALE1 |EALE0
;------------------------------------------------------------------------------------
; mov EMI0CF, #00000000B
mov EMI0CF, #00h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;--A1H---EMI0TC----外部存储器时序控制
;复位值: 11111111
;EAS1-0:EMIF 地址建立时间位。
; 00:地址建立时间 = 0 个 SYSCLK 周期。
; 01:地址建立时间 = 1 个 SYSCLK 周期。
; 10:地址建立时间 = 2 个 SYSCLK 周期。
; 11:地址建立时间 = 3 个 SYSCLK 周期。
;EWR3-0:EMIF /WR 和/RD 脉冲宽度控制位。
; 0000:/WR 和/RD 脉冲宽度 = 1 个 SYSCLK 周期。
; 0001:/WR 和/RD 脉冲宽度 = 2 个 SYSCLK 周期。
; 0010:/WR 和/RD 脉冲宽度 = 3 个 SYSCLK 周期。
; 0011:/WR 和/RD 脉冲宽度 = 4 个 SYSCLK 周期。
; 0100:/WR 和/RD 脉冲宽度 = 5 个 SYSCLK 周期。
; 0101:/WR 和/RD 脉冲宽度 = 6 个 SYSCLK 周期。
; 0110:/WR 和/RD 脉冲宽度 = 7 个 SYSCLK 周期。
; 0111:/WR 和/RD 脉冲宽度 = 8 个 SYSCLK 周期。
; 1000:/WR 和/RD 脉冲宽度 = 9 个 SYSCLK 周期。
; 1001:/WR 和/RD 脉冲宽度 = 10 个 SYSCLK 周期。
; 1010:/WR 和/RD 脉冲宽度 = 11 个 SYSCLK 周期。
; 1011:/WR 和/RD 脉冲宽度 = 12 个 SYSCLK 周期。
; 1100:/WR 和/RD 脉冲宽度 = 13 个 SYSCLK 周期。
; 1101:/WR 和/RD 脉冲宽度 = 14 个 SYSCLK 周期。
; 1110:/WR 和/RD 脉冲宽度 = 15 个 SYSCLK 周期。
; 1111:/WR 和/RD 脉冲宽度 = 16 个 SYSCLK 周期
;EAH1-0:EMIF 地址保持时间位。
; 00:地址保持时间 = 0 个 SYSCLK 周期。
; 01:地址保持时间 = 1 个 SYSCLK 周期。
; 10:地址保持时间 = 2 个 SYSCLK 周期。
; 11:地址保持时间 = 3 个 SYSCLK 周期。
;======================================================================
;|外部存储器时序控制|EMI0TC | A1H | -|EAS1| EAS0 |EWR3 |EWR2 |EWR1|EWR0|EAH1|EAH0
;------------------------------------------------------------------------------------
; mov EMI0TC, #00000000B
mov EMI0TC, #00h
;▲■-- <8> --定时器设置
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓?
;89H---TMOD----定时器方式寄存器
;复位值: 00000000
;GATE1:定时器 1 门控位
; 0:当 TR1=1 时定时器 1 工作,与/INT1 的逻辑电平无关。
; 1:只有当 TR1=1 并且/INT1 有效时定时器 1 才工作。
;C/T1:计数器/定时器 1 功能选择。
; 0:定时器功能:定时器 1 由 T1M 位(CKCON.4)定义的时钟加 1。
; 1:计数器功能:定时器 1 由外部输入引脚(T1)的负跳变加 1。
;T1M1-T1M0:定时器 1 方式选择 这些位选择定时器 1 的工作方式。
; T1M1 T1M0 方式
; 0 0 方式 0:13 位计数器/定时器
; 0 1 方式 1:16 位计数器/定时器
; 1 0 方式 2:自动重装载的 8 位计数器/定时器
; 1 1 方式 3:定时器 1 停止运行
;GATE0:定时器 0 门控位
; 0:当 TR0=1 时定时器 0 工作,与/INT0 的逻辑电平无关。
; 1:只有当 TR0=1 并且/INT0 有效时定时器 0 才工作。
;C/T0:计数器/时器 0 功能选择。
; 0:定时器功能:定时器 0 由 T0M 位(CKCON.3)定义的时钟加 1。
; 1:计数器功能:定时器 0 由外部输入引脚(T0)的负跳变加 1。
;T0M1-T0M0:定时器 0 方式选择 这些位选择定时器 0 的工作方式。
; T0M1 T0M0 方式
; 0 0 方式 0:13 位计数器/定时器
; 0 1 方式 1:16 位计数器/定时器
; 1 0 方式 2:自动重装载的 8 位计数器/定时器
; 1 1 方式 3:两个 8 位计数器/定时器
;======================================================================
;|定时器方式| TMOD | 89H | - |GATE1| C/T1 | T1M1 | T1M0 | GATE0| C/T0 | T0M1 | T0M0 |
;------------------------------------------------------------------------------------
; mov TMOD, #00000001B 方式1
mov TMOD, #01h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;88H---TCON----定时器控制寄存器
;复位值: 00000000
;TF1:定时器 1 溢出标志
; 当定时器 1 溢出时由硬件置位。该位可以用软件清 0,但当 CPU 转向定时器 1
; 中断服务程序时该位被自动清 0。
; 0:未检测到定时器 1 溢出。
; 1:定时器 1 发生溢出。
;TR1:定时器 1 运行控制
; 0:定时器 1 禁止。
; 1:定时器 1 允许。
;TF0:定时器 0 溢出标志
; 当定时器 0 溢出时由硬件置位。该位可以用软件清 0,但当 CPU 转向定时器 0
; 中断服务程序时该位被自动清 0。
;TR0:定时器 0 运行控制
; 0:定时器 0 禁止。
; 1:定时器 0 允许。
;IE1:外部中断 1
; 当检测到一个由 IT1 定义的边沿/电平时,该标志由硬件置位。该位可以用软件
; 清 0,但当 CPU 转向外部中断 1 中断服务程序时该位被自动清 0(如果 IT1=1)。
; 当 IT1=0 时,该标志在/INT1 有效时被置’1’(有效电平由 IT01CF 寄存器中 的 IN1PL 位定义)。
;IT1:中断 1 类型选择
; 该位选择/INT1 中断是边沿触发还是电平触发。可以用 IT01CF 寄存器中的
; IN1PL 位将/INT1 配置为低电平有效或高电平有效。
; 0:/INT1 为电平触发。
; 1:/INT1 为边沿触发。
;IE0:外部中断 0
; 当检测到一个由 IT0 定义的边沿/电平时,该标志由硬件置位。该位可以用软件
; 清 0,但当 CPU 转向外部中断 0 中断服务程序时该位被自动清 0(如果 IT0=1)。
; 当 IT0=0 时,该标志在/INT0 有效时被置’1’(有效电平由 IT01CF 寄存器中 的 IN0PL 位定义)。
;IT0:中断 0 类型选择
; 该位选择/INT0 中断是边沿触发还是电平触发。可以用 IT01CF 寄存器中的
; IN0PL 位将/INT0 配置为低电平有效或高电平有效。
; 0:/INT0 为电平触发。
; 1:/INT0 为边沿触发。
;======================================================================
;|定时器控制|TCON | 88H | YE |TF1| TR1 | TF0 | TR0 | IE1 | IT1 | IE0 |IT0
;------------------------------------------------------------------------------------
; mov TCON, #00010000B
; mov TCON, #010h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓?
;C8H---T2CON----定时器控制寄存器
;复位值: 00000000
;TF2:定时器 2 溢出标志
; 当定时器 2 溢出时由硬件置位。当定时器2中断被允许时,该位置1导致CPU转向定时器2
; 的中断服务程序,该位不能由硬件自动清0,必须用软件清0!?
; 当RCLK0和/或TCLK0为逻辑1时,TF2不会被置1
;EXF2:定时器 2 外部标志
; 当T2EX输入引脚的负跳变导致发生捕捉或重载并且EXEN2为逻辑1时,该位由硬件置位
; 在定时器2中断被允许时,该位置1使CPU转向定时器2的中断服务程序。该位不能硬件自动清0
;RCLK0:UART0接收时钟标志
; 选择UART0工作在方式1或3时接收时钟使用的定时器
; 0 定时器1溢出作为接收时钟
; 1 定时器2溢出作为接收时钟
;TCLK0:UART0发送时钟标志
; 选择UART0工作在方式1或3时发送时钟使用的定时器
; 0 定时器1溢出作为发送时钟
; 1 定时器2溢出作为发送时钟
;EXEN2:定时器2外部允许
; 当定时器2不是工作在波特率发生器方式时,允许T2EX上的负跳变触发捕捉方式或重载
; 0 T2EX上的负跳变被忽略
; 1 T2EX上的负跳变导致一次捕捉或重载
;TR2:定时器2运行控制
; 该位允许/禁止定时器2
; 0 定时器2禁止
; 1 定时器2允许
;C/T2:定时/ 计数功能选择
; 0 定时器功能:定时器2由T2M(CKCON.5)定义的时钟加1
; 1 计数器功能:定时器2由外部输入引脚(T2)的负跳变加1
;CP/PL2:捕捉/ 重载选择
; 该位选择定时器2为捕捉或是自动重装载方式,EXEN2必须为逻辑1才能使T2EX上的负跳变
; 能够被识别并用于触发捕捉和重载。若RCLK0或TCLK0被置位,该位将被忽略,定时器2将
; 工作在自动重装载方式
; 0 当定时器2溢出或T2EX上发生负跳变时将自动重装载(EXEN2=1)
; 1 在T2EX发生负跳变时捕捉(EXEN2=1)
;======================================================================
;|定时器控制|TCON | 88H | YE |TF2| EXF2 | RCLK0| TCLK0 | EXEN2 | TR2 | C/T2|CP/PL2
;------------------------------------------------------------------------------------
; mov T2CON, #00010000B
mov T2CON, #00h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓?
;C8H---T2CON----定时器控制寄存器
;复位值: 00000000
;TF4: 定时器 4 溢出标志
; 当定时器 4 溢出时由硬件置位。当定时器4中断被允许时,该位置1导致CPU转向定时器2
; 的中断服务程序,该位不能由硬件自动清0,必须用软件清0!?
; 当RCLK0和/或TCLK0为逻辑1时,TF2不会被置1
;EXF4: 定时器 4 外部标志
; 当T4EX输入引脚的负跳变导致发生捕捉或重载并且EXEN4为逻辑1时,该位由硬件置位
; 在定时器4中断被允许时,该位置1使CPU转向定时器2的中断服务程序。该位不能硬件自动清0
;RCLK1:UART1接收时钟标志
; 选择UART1工作在方式1或3时接收时钟使用的定时器
; 0 定时器1溢出作为接收时钟
; 1 定时器4溢出作为接收时钟
;TCLK1:UART1发送时钟标志
; 选择UART1工作在方式1或3时发送时钟使用的定时器
; 0 定时器1溢出作为发送时钟
; 1 定时器4溢出作为发送时钟
;EXEN4:定时器4外部允许
; 当定时器2不是工作在波特率发生器方式时,允许T2EX上的负跳变触发捕捉方式或重载
; 0 T4EX上的负跳变被忽略
; 1 T4EX上的负跳变导致一次捕捉或重载
;TR4: 定时器2运行控制
; 该位允许/禁止定时器2
; 0 定时器4禁止
; 1 定时器4允许
;C/T4: 定时/ 计数功能选择
; 0 定时器功能:定时器4由T4M(CKCON.6)定义的时钟加1
; 1 计数器功能:定时器4由外部输入引脚(T4)的负跳变加1
;CP/PL4:捕捉/ 重载选择
; 该位选择定时器4为捕捉或是自动重装载方式,EXEN4必须为逻辑1才能使T4EX上的负跳变
; 能够被识别并用于触发捕捉和重载。若RCLK1或TCLK1被置位,该位将被忽略,定时器2将
; 工作在自动重装载方式
; 0 当定时器4溢出或T2EX上发生负跳变时将自动重装载(EXEN4=1)
; 1 在T4EX发生负跳变时捕捉(EXEN4=1)
;======================================================================
;|定时器控制|T2CON | C9H | YE |TF4| EXF4 | RCLK1| TCLK1 | EXEN4 | TR4 | C/T4|CP/PL4
;------------------------------------------------------------------------------------
; mov T4CON, #00010000B
mov T4CON, #00h
;▲■-- <9> --串行通讯
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;98H---SCON0----UART0 控制寄存器
;复位值: 00000000
;SM00-SM10:串行口工作方式。
; 写:当被写入时,这两位按下表选择串行口工作方式:
; SM00 SM10 方式
; 0 0 方式 0:同步方式
; 0 1 方式 1:8 位 UART,可变波特率
; 1 0 方式 2:9 位 UART,固定波特率
; 1 1 方式 3:9 位 UART,可变波特率
; 读:读这两位时返回 UART0 的当前工作方式。
;SM20:多处理器通信使能位 该位的功能取决于串行口工作方式。
; 方式0:无作用。
; 方式 1:检查有效停止位
; 0:停止位的逻辑电平被忽略。
; 1:只有当停止位为逻辑电平 1 时 RI0 激活
; 方式 2 和方式 3:多机通信使能?
; 0:第九位的逻辑电平被忽略。
; 1:只有当第九位为逻辑 1 并且接收到的地址与 UART0 地址或广播地 址匹配时 RI0 才被置位并产生中断
;REN0:接收允许该位允许/禁止 UART0 接收。
; 0:UART0 接收禁止
; 1:UART0 接收允?
;TB80:第九发送位该位的逻辑电平被赋值给方式 2 和 3 的第九发送位。在方式 0 和 1 中未用。
; 跟 据需要用软件置位或清 0。
;RB80:第九接收位该位被赋值为方式 2 和 3 中第九接收位的逻辑电平。在方式 1,如果 SM20 为
; 逻辑 0,则 RB80 被赋值为所接收到的停止位的逻辑电平。RB80 在方式 0 中未 用。
;TI0:发送中断标志当 UART0 发送完一个字节数据时(方式 0 时是在发送完第 8 位后,其它方式
; 在停止位的开始)该位被硬件置 1。在 UART0 中断被允许时,置 1 该位将导致 CPU 转到 UART0
; 中断服务程序。该位必须用软件手动清
;RI0:接收中断标志
; 当 UART0 接收到一个字节数据时(根据 SM20 位的选择)该位被硬件置 1。
; 在 UART0 中断被允许时,置 1 该位将会使 CPU 转到 UART0 中断服务程序。 该位必须用软件手动清 0。
;======================================================================
;|UART0 控制寄存器|SCON0 | 98H | YE |SM00| SM10 | SM20 | REN0 | TB80| RB80 | TI0 |RI0
;------------------------------------------------------------------------------------
; mov SCON0, #01010000B
mov SCON0, #000h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;98H---SCON1----UART1 控制寄存器
;复位值: 01000000
;S0M1DE:串行口工作方式选择位
; 该位选择 UART1 的工作方式。
; 0:方式 0:波特率可编程的 8 位 UART。
; 1:方式 1:波特率可编程的 9 位 UART。
;位 6: 未使用。读 = 1b。写 = 忽略。
;MCE1:多处理器通信允许 该位的功能取决于串行口工作方式。
; S0M1DE = 0:检查有效停止位。
; 0:停止位的逻辑电平被忽略。
; 1:只有当停止位为逻辑’1’时 RI1 激活。
; S0M1DE = 1:多处理器通信允许。
; 0:第 9 位的逻辑电平被忽略。
; 1:只有当第 9 位为逻辑’1’时 RI1 才被置位并产生中断。
;REN1:接收允许
; 该位允许/禁止 UART 接收器。
; 0:UART 接收禁止。
; 1:UART 接收允许。
;TB81:第九发送位
; 该位的逻辑电平被赋值给 9 位 UART 方式的第九发送位。在 8 位 UART 方式中 未用。
; 跟据需要用软件置’1’或清’0’。
;RB81:第九接收位
; 在方式 0,则 RB80 被赋值为停止位的值。在方式 1 该位被赋值为 9 位 UART 方 式中第九数据位的值。
;TI1:发送中断标志
; 当 UART 发送完一个字节数据后该位被硬件置’1’(在 8 位 UART 方式时,是 在发送第 8 位后
; ;在 9 位 UART 方式时,是在停止位开始)。当 UART0 中断被 允许时,置’1’该位将导致 CPU 转到
; UART0 中断服务程序。该位必须用软件 清’0’。
;RI1:接收中断标志
; 当 UART0 接收到一个字节数据时该位被硬件置’1’(在停止位后)。当 UART1 中断被允许时,置’1’
; 该位将会使 CPU 转到 UART1 中断服务程序。该位必须 用软件清’0’。
;======================================================================
;|UART1 控制寄存器|SCON1 | 98H | - |S0M1DE| - | MCE1 | REN1 | TB81| RB81 | TI1 |RI1
;------------------------------------------------------------------------------------
; mov SCON1, #00000000B
mov SCON1, #00h
;▲■-- <10> --可编程计数器阵列
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;D8H---PCA0CN----PCA 控制寄存器
;复位值: 00000000
;CF:PCA 计数器/定时器溢出标志
; 当 PCA 计数器/定时器从 0xFFFF 到 0x0000 溢出时由硬件置位。在计数器/定时
; 器溢出(CF)中断被允许时),该位置’1’将导致 CPU 转向 PCA 中断服务程
; 序。该位不能由硬件自动清 0,必须用软件清 0。
;CR:PCA 计数器/定时器运行控制 该位允许/禁止 PCA 计数器/定时器。
; 0:禁止 PCA 计数器/定时器。
; 1:允许 PCA 计数器/定时器。
;位 5: 未用。读 = 0b,写 = 忽略。
;CCF4:PCA 模块 4 捕捉/比较标志。
; 0:禁止定时器 3 低字节中断。
; 1:允许定时器 3 低字节中断。
;CCF4:PCA 模块 4 捕捉/比较标志
; 在发生一次匹配或捕捉时该位由硬件置位。当 CCF4 中断被允许时,该位置’1’ 将导?
; 致 CPU 转向 PCA 中断服务程序。该位不能由硬件自动清 0,必须用软件清 0
;CCF3:PCA 模块 3 捕捉/比较标志
; 在发生一次匹配或捕捉时该位由硬件置位。当 CCF3 中断被允许时,该位置’1’ 将导
; 致 CPU 转向 PCA 中断服务程序。该位不能由硬件自动清 0,必须用软件清 0。
;CCF2:PCA 模块 2 捕捉/比较标志
; 在发生一次匹配或捕捉时该位由硬件置位。当 CCF2 中断被允许时,该位置’1’ 将导
; 致 CPU 转向 PCA 中断服务程序。该位不能由硬件自动清 0,必须用软件清 0。
;CCF1:PCA 模块 1 捕捉/比较标志
; 在发生一次匹配或捕捉时该位由硬件置位。当 CCF1 中断被允许时,该位置’1’ 将导
; 致 CPU 转向 PCA 中断服务程序。该位不能由硬件自动清 0,必须用软件清 0。
;CCF0:PCA 模块 0 捕捉/比较标志
; 在发生一次匹配或捕捉时该位由硬件置位。当 CCF0 中断被允许时,该位置’1’ 将导
; 致 CPU 转向 PCA 中断服务程序。该位不能由硬件自动清 0,必须用软件清 0。
;=================================================================================
;|PCA 控制寄存器| PCA0CN | D8H | YE |CF | CR | - | CCF4 | CCF3 | CCF2 | CCF1 | CCF0|
;-----------------------------------------------------------------------------------------------
; mov PCA0CN, #x0000000B
mov PCA0CN, #00h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;D9H---PCA0MD----PCA 方式寄存器
;复位值: 01000000
;CIDL:PCA 计数器/定时器空闲控制
; 设置 CPU 空闲方式下的 PCA 工作方式。
; 0:当系统控制器处于空闲方式时,PCA 继续正常工作。
; 1:当系统控制器处于空闲方式时,PCA 停止工作?
;WDTE:看门狗定时器使能位?
; 如果该位被置’1’,PCA 模块 4 被用作看门狗定时器。
; 0:看门狗定时器被禁止?
; 1:PCA 模块 4 被用作看门狗定时器。
;WDCLK:看门狗定时器锁定
; 该位对看门狗定时器使能位锁定/解锁。当 WDCLK 被置’1’时,在发生下一
; 次系统复位之前将不能禁止 WDT。
; 0:对看门狗定时器使能位解锁。
; 1:锁定看门狗定时器使能位。
;位 4: 未用。读 = 0b,写 = 忽略。
;CPS2-CPS0:PCA 计数器/定时器时钟选择
; 这些位选择 PCA 计数器的时钟源。
; CPS2 CPS1 CPS0 时钟源
; 0 0 0 系统时钟的 12 分频
; 0 0 1 系统时钟的 4 分频
; 0 1 0 定时器 0 溢出
; 0 1 1 ECI 负跳变(最大速率 = 系统时钟频率/4)
; 1 0 0 系统时钟
; 1 0 1 外部时钟的 8 分频
; 1 1 0 保留
; 1 1 1 保留
;ECF:PCA 计数器/定时器溢出中断允许
; 该位是 PCA 计数器/定时器溢出(CF)中断的屏蔽位。
; 0:禁止 CF 中断。
; 1:当 CF(PCA0CN.7)被置位时,允许 PCA 计数器/定时器溢出的中断请求。
;注意:当 WDTE 位被置’1’时,不能改写 PCA0MD 寄存器。要改变 PCA0MD 寄存
; 器的内容,必须先禁止看门狗定时器。
;=================================================================================
;|PCA 方式寄存器| PCA0MD | D9H | - |CIDL | WDTE | WDCLK | - | CPS2 | CPS1 | CPS0 | ECF|
;-----------------------------------------------------------------------------------------------
; mov PCA0MD, #x0000000B
mov PCA0MD, #00h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;---PCA0CPMn----PCA 捕捉/比较寄存器
;复位值: 00000000
;PWM16n ;16位脉冲宽度调制使能
; 当脉冲宽度调制方式使能时(PWMn=1),该位选择16位方式
; 0:选择8位PWM
; 1:选择16位PWM
;ECOMn 比较器功能使能,该位使能/ 禁止PCA模块n的比较其功能
; 0:禁止
; 1:使能
;CAPPn 正沿捕捉功能使能,该位使能/禁止PCA模块n的正边沿捕捉
; 0:禁止
; 1:使能
;CAPNn 负沿捕捉功能使能,该位使能/禁止PCA模块n的负边沿捕捉
; 0:禁止
; 1:使能
;MATn 匹配功能使能,该位使能/禁止PCA模块n的匹配功能
; 如果使能,当PCA计数器与一个模块的捕捉/比较寄存器匹配时,PCAMD寄存器中的
; CCFn位置位
; 0:禁止
; 1:使能
;TOGn 电平切换功能使能,该位使能/ 禁止PCA模块n的电平切换功能
; 如果使能,当PCA计数器与一个模块的捕捉/比较寄存器匹配时,CEXn引脚的逻辑电平
; 切换,如果PWMn位也被置位为逻辑1,则模块工作在频率输出方式。
; 0:禁止
; 1:使能
;PWMn ;脉冲调制方式使能,该位使能/禁止PCA模块n的PWM功能
; 如果被使能,CEXn引脚输出脉冲宽度调制信号,如果PWM16n为逻辑0,则使用8位PWM方式
; 如果如果PWM16n为逻辑0,则使用16位PWM方式,如果TOGn位被置1,则模块工作在频率输出方式
; 0:禁止
; 1:使能
;ECCFn 捕捉/比较标志中断允许,该位设置捕捉/ 比较标志(CCFn)的中断屏蔽
; 0:禁止CCFn中断
; 1:当CCFn位被置1时,允许捕捉/比较标识的中断请求
;=================================================================================
;|PCA 捕捉/比较寄存器|PCA0CPMn | D8H | YE |PWM16n |ECOMn| CAPPn | CAPNn | MATn | TOGn | PWMn | ECCFn|
;-----------------------------------------------------------------------------------------------
; mov PCA0CPMn, #x0000000B
; mov PCA0CPMn, #00h
;▲■-- <11> --SMBus通讯
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;C0H---SMB0CN----SMBus0 控制寄存器
;复位值: 00000000
;BUSY:忙状态标志
; 0:SMBus0 空闭
; 1:SMBus0 忙
;ENSMB:SMBus0 使能 该位使能/禁止 SMBus0 串行接口
; 0:禁止 SMBus0
; 1:使能 SMBus0
;STA:SMBus0 起始标志
; 0:不发送起始条件。
; 1:当作为主器件时,若总线空闭,则发送出一个起始条件。(如果总线不空闲, 在收到停止
; 条件后再发送起始条件。)如果 STA 被置 1,而此时已经发送或接 收了一个或多个字节并且
; 没有收到停止条件,则发送一个重复起始条件。
;STO:SMBus0 停止标志
; 0:不发送停止条件。
; 1:将 STO 置为逻辑 1 将发送一个停止条件。当收到停止条件时,硬件将 STO 清为逻辑 0。
; 如果 STA 和 STO 都被置位,则发送一个停止条件后再发送一个 起始条件。在从方式,置位
; STO 标志将导致 SMBus 的行为象收到了停止条件 一样。
;SI:SMBus0 串行中断标志
; 当 SMBus0 进入 27 种可能状态之一时该位被硬件置位。(状态码 0xF8 不使 SI 置位。)当
; SI 中断被允许时,该位置 1 将导致 CPU 转向 SMBus 中断服务程序。 该位不能被硬件自动清 0,
; 必须用软件清除。
;AA:SMBus0 有效确认标志,该位定义在 SCL 线应答周期内返回的应答类型。
; 0:在应答周期内返回"非确认"(SDA 线高电平)。
; 1:在应答周期内返回"确认"(SDA 线低电平)。
;FTE:SMBus0 空闭定时器使能位
; 0:无 SCL 高电平超时。
; 1:当 SCL 高电平时间超过由 SMB0CR 规定的极限值时发生超时。
;TOE:SMBus0 超时使能位
; 0:无 SCL 低电平超时。
; 1:当 SCL 处于低电平的时间超过由定时器 4(如果被使能)定义的极限值时 发生超时。
;======================================================================
;|SMBus0 控制寄存器|SMB0CN | C0H | YE |BUSY |ENSMB | STA | STO |SI | AA | FTE | TOE
;------------------------------------------------------------------------------------
; mov SMB0CN, #01000100B
; mov SMB0CN, #44h
mov SMB0CN, #46h
;======================================================================
;|SMBus0 时钟速率寄存器|SMB0CR | - | - |- |- | - | - |- | - | -| -
;------------------------------------------------------------------------------------
; mov SMB0CR, #00000000B
mov SMB0CR, #0c9h ;设置时钟速率=100Khz,系统时钟为11.0592MHz
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;C1H---SMB0STA----SMBus 状态寄存器
;复位值: 11111000
;STA7-STA3:SMBus0 状态代码
; 这些位含有 SMBus0 状态代码。共有 28 个可能的状态码,每个状态码对应一
; 个 SMBus 状态。在 SI 标志(SMB0CN.3)置位时,SMB0STA 中的状态码有 效。当 SI 标志为逻辑 0 时,
; SMB0STA 中的内容无定义。任何时候向 SMB0STA 寄存器写入将导致不确定的结果。
;STA2-STA0:当 SI 标志位为逻辑 1 时,这三个 SMB0STA 最低位的读出值总是 为逻辑 0。
;======================================================================
;|SMBus 状态寄存器|SMB0STA | C1H | - |STA7| STA6 | STA5 |STA4| STA3 |STA2 | STA1 |STA0
;------------------------------------------------------------------------------------
; mov SMB0STA, #00000000B
; mov SMB0STA, #00h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;C2H---SMB0DAT----SMBus 数据寄存器
;复位值: 00000000
;SMB0DAT:SMBus 数据
; SMB0DAT 寄存器保存要发送到 SMBus 串行接口上的一个数据字节,或刚从 SMBus 串行接口接收到的一个字节
;。一旦 SI 串行中断标志被置’1’,CPU 即 可读或写该寄存器。只要 SI 串行中断标志位为逻辑’1’,该寄存
;器内的串行 数据就是稳定的。当 SI 标志位不为’1’时,系统可能正在移入/移出数据, 此时 CPU 不应访问该寄存器。
;======================================================================
;|SMBus数据寄存器|SMB0DAT | C2H | - |-| - | - | - | - | - | - |-
;------------------------------------------------------------------------------------
; mov SMB0DAT, #00000000B
; mov SMB0DAT, #00h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;C3H---SMB0ADR----SMBus0 地址寄存器
;复位值: 00000000
;SLV6-SLV0:SMBus0 从地址
; 这些位用于存放 7 位从地址,当器件工作在从发送器或从接收器方式时, SMBus0 将应答该地址。
; SLV6 是地址的最高位,对应从 SMBus0 收到的地址 字节的第一位。
;GC:全局呼叫地址使能 该位用于使能全局呼叫地址(0x00)识别。
; 0:忽略全局呼叫地址。
; 1:识别全局呼叫地址。
;======================================================================
;|SMBus0 地址寄存器|SMB0ADR | C3H | - |SLV6| SLV5 | SLV4 | SLV3 | SLV2 | SLV1 | SLV0 |GC
;------------------------------------------------------------------------------------
; mov SMB0ADR, #00000000B
; mov SMB0ADR, #00h
;▲■-- <12> --SPI总线通讯
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;9DH---SPI0CKR----SPI0 时钟速率寄存器
;复位值: 00000000
;SCR7-SCR0:SPI0 时钟频率设置位。
; 当 SPI0 模块被配置为工作于主方式时,这些位决定 SCK 输出的频率。SCK 时 钟频率是从
; 系统时; 钟分频得到的,由下面的方程给出,其中:SYSCLK 是系统 时钟频率,SPI0CKR 是
; SPI0CKR 寄存器中的 8 位值。
;======================================================================
;|SPI0 时钟速率寄存器| SPI0CKR | 9DH | - |SCR7 | SCR6 |SCR5|SCR4| SCR3 | SCR2 | SCR1 |SCR0
;------------------------------------------------------------------------------------
; mov SPI0CKR, #00000000B
mov SPI0CKR, #37h ;系统时钟11.0592
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;9AH---SPI0CFG----SPI0 配置寄存器
;复位值: 00000111
;CKPHA:SPI0 时钟相位。;该位控制 SPI0 时钟的相位。
; 0:在 SCK 周期的第一个边沿采样数据。?
; 1:在 SCK 周期的第二个边沿采样数据。?
;CKPOL:SPI0 时钟极性 该位控制 SPI0 时钟的极性。
; 0:SCK 在空闲状态时处于低电平。
; 1:SCK 在空闲状态时处于高电平。
;BC2-BC0:SPI0 位计数指示发送到SPI字的哪一位
;SPIFRS2-0:SPI0 帧长度 这三位决定在主方式数据传输期间SPI移位寄存器移入/移出的位数
;=================================================================================
;|SPI0 配置寄存器| CPT1CN | 9AH | - |CKPHA| CKPOL |BC2|BC1|BC0|SPIFRS2 |SPIFRS1|SPIFRS0|
;-----------------------------------------------------------------------------------------------
; mov SPI0CFG, #11000111B
mov SPI0CFG, #0c7h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;F8H---SPI0CN----SPI0 控制寄存器
;复位值: 00000110
;SPIF:SPI0 中断标志
; 该位在数据传输结束后被硬件置为逻辑 1。如果中断被允许,置 1 该位 将会使 CPU 转到 SPI0
; 中断处理服务程序。该位不能被硬件自动清 0, 必须用软件清 0。
;WCOL:写冲突标志
; 该位由硬件置为逻辑 1(并产生一个 SPI0 中断),表示数据传送期间对
; SPI0 数据寄存器进行了写操作。该位必须用软件清 0。
;MODF:方式错误标志
; 当检测到主方式冲突(NSS 为低电平,MSTEN=1,NSSMD[1:0] = 01) 时,该位由硬件置为逻辑 1
; (并产生一个 SPI0 中断)。该位不能被硬件 自动清 0,必须用软件清 0。
;RXOVRN:接收溢出标志(只适用于从方式) 当前传输的最后一位已经移入 SPI0 移位寄存器
; ,而接收缓冲器中仍保 存着前一次传输未被读取的数据时该位由硬件置为逻辑 1(并产生一个 SPI0 中断)
; 。该位不会被硬件自动清 0,必须用软件清 0。
;TXBSY:发送忙标志。当一个主方式传输正在进行时,该位被硬件置1,在传输结束后由硬件清0.
; 它在NSS变为高电平时清0(从方式被禁止)
;SLVSEL:从选择标志。该位在NSS引脚为低电平时置1,说明它被允许为从方式,
; 它在NSS变为高电平时清0(从方式被禁止)
;MSTEN:主方式使能位
; 0:禁止主方式,已从方式操作
; 1:使能主方式,以主方式操作
;SPIEN:SPI0 使能位
; 该位使能/禁止 SPI0。
; 0:禁止 SPI0
; 1:使能 SPI0
;======================================================================
;|SPI0 控制寄存器|SPI0CN | F8H | - |SPIF| WCOL | MODF | RXOVRN | TXBSY |SLVSEL |MSTEN |SPIEN
;------------------------------------------------------------------------------------
; mov SPI0CN, #00000011B
mov SPI0CN, #03h
;▲■-- <13> --ADC转换
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;BAH---AMX0CF----AMUX0 配置寄存器
;复位值: 00000000
;位 7-4:未使用。读 = 0000b;写 = 忽略
;PORT3IC:P3 口偶数/奇数引脚输入对配置位
; 0: P3 口偶数和奇数输入通道为独立的单端输入
; 1: P3 口偶数和奇数输入通道为(分别为)+, -差分输入对
;HVDA2C:HVDA 输出取补控制位
; 0: HVDA 为独立的单端输入测量输出
; 1: HVDA 的测量结果为 2 的补码
;AIN23IC:AIN0.2、AIN0.3 输入对配置位
; 0: AIN0.2 和 AIN0.2 为独立的单端输入
; 1: AIN0.2, AIN0.2 为(分别为)+, -差分输入对
;AIN01IC:AIN0.0、AIN0.1 输入对配置位
; 0: AIN0.0 和 AIN0.1 为独立的单端输入
; 1: AIN0.0, AIN0.1 为(分别为)+, -差分输入对
;注:对于被配置成差分输入的通道,ADC0 数据字格式为 2 的补码
;======================================================================
;|AMUX0 配置寄存器| AMX0CF | BAH | - |-| - | - | - | PORT3IC | HVDA2C | AIN23IC | AIN01IC
;------------------------------------------------------------------------------------
; mov AMX0CF, #00000000B
mov AMX0CF, #00h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;BCH---ADC0CF---- ADC0 配置寄存器
;复位值: 11111000
;AD0SC4-0: ADC0 SAR 转换时钟周期控制位
; SAR 转换时钟来源于系统时钟,由下面的方程给出,其中 AD0SC 表示 AD0SC4-0
; 中保持的数值,CLKSAR0 表示所需要的 ADC0 SAR 时钟。
;AMP0GN2-0: ADC0 内部放大器增益(PGA)
; 000: 增益 = 1
; 001: 增益 = 2
; 010: 增益 = 4
; 011: 增益 = 8
; 10x: 增益 = 16
; 11x: 增益 = 0.5
;======================================================================
;| ADC0 配置寄存器| ADC0CF | BCH | - |-| - | - | - | PORT3IC | HVDA2C | AIN23IC | AIN01IC
;------------------------------------------------------------------------------------
; mov ADC0CF, #00000000B
mov ADC0CF, #00h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;E8H---ADC0CN----ADC0 控制寄存器
;复位值: 00000000
;AD0EN:ADC0 使能位
; 0:ADC0 禁止。ADC0 处于低耗停机状态。
; 1:ADC0 使能。ADC0 处于活动状态,并准备转换数据。
;AD0TM:ADC 跟踪方式位
; 0:当 ADC 被使能时,除了转换期间之外一直处于跟踪方式。
; 1:由 ADSTM1-0 定义跟踪方式。
;AD0INT:ADC0 转换结束中断标志
; 该标志必须用软件清’0’。
; 0:从最后一次将该位清 0 后,ADC0 还没有完成一次数据转换。
; 1:ADC 完成了一次数据转换。
;AD0BUSY:ADC0 忙标志位
; 读:
; 0:ADC0 转换结束或当前没有正在进行的数据转换。AD0INT 在 AD0BUSY 的 下降沿被置’1’。
; 1:ADC0 正在进行转换。
; 写:
; 0:无作用
; 1:若 ADSTM1-0=00b 则启动 ADC0 转换。
;AD0CM1-0:ADC0 转换启动方式选择位。
; 如果 AD0TM = 0:
; 00:每次向 AD0BUSY 写 1 时启动 ADC0 转换。
; 01:定时器 3 溢出启动 ADC0 转换。
; 10:CNVSTR0 上升沿启动 ADC0 转换。
; 11:定时器 2 溢出启动 ADC0 转换。 如果 AD0TM = 1:
; 00:向 AD0BUSY 写 1 时启动跟踪,持续 3 个 SAR 时钟,然后进行转换。
; 01:定时器 3 溢出启动跟踪,持续 3 个 SAR 时钟,然后进行转换。
; 10:只有当 CNVSTR0 输入为逻辑低电平时 ADC0 跟踪,在 CNVSTR0 的上升 沿开始转换。
; 11:定时器 2 溢出启动跟踪,持续 3 个 SAR 时钟,然后进行转换。
;AD0WINT:ADC0 窗口比较中断标志。
; 该位必须用软件清 0。
; 0:自该标志被清除后未发生过 ADC0 窗口比较匹配。
; 1:发生了 ADC0 窗口比较匹配。
;AD0LJST:ADC0 数据左对齐选择位。
; 0:ADC0H:ADC0L 寄存器数据右对齐。
; 1:ADC0H:ADC0L 寄存器数据左对齐。
;======================================================================
;|ADC0 控制| ADC0CN| E8H | YE |AD0EN | AD0TM | AD0INT| AD0BUSY |AD0CM1 |AD0CM0 |AD0WINT |AD0LJST
;------------------------------------------------------------------------------------
; mov ADC0CN, #00000000B
mov ADC0CN, #00h
;▲■-- <14> --DAC转换
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;D4H---DAC0CN-------DAC0 控制寄存器
;复位值: 00000000
;DAC0EN:DAC0 使能位
; 0:DAC0 禁止。DAC0 输出引脚被禁止,DAC0 处于低功耗停机方式
; 1:DAC0 使能。DAC0 输出有效;DAC0 处于工作状态。
;位 6-5:未用。读 = 00b;写 = 忽略。
;DAC0MD1-0:DAC0 方式位。
; 00:DAC 输出更新发生在写 DAC0H 时。
; 01:DAC 输出更新发生在定时器 3 溢出时。
; 10:DAC 输出更新发生在定时器 4 溢出时。
; 11:DAC 输出更新发生在定时器 2 溢出时。
;DAC0DF2-0:DAC0 数据格式位:
; 000:DAC0 数据字的高 4 位在 DAC0H[3:0],低字节在 DAC0L 中
; 001:DAC0 数据字的高 5 位在 DAC0H[4:0],低 7 位在 DAC0L[7:1]
; 010:DAC0 数据字的高 6 位在 DAC0H[5:0],低 6 位在 DAC0L[7:2]。
; 011:DAC0 数据字的高 7 位在 DAC0H[6:0],低 5 位在 DAC0L[7:3]。
; 1xx:高有效字节在 DAC0H[7:0],低 4 位在 DAC0L[7:4]。
;======================================================================
;|DAC0 控制寄存器| DAC0CN| D4H | - |DAC0 | - | - | DAC0MD1 |DAC0MD0 | DAC0DF2 | DAC0DF1|DAC0DF0|
;------------------------------------------------------------------------------------
; mov DAC0CN, #00000000B
mov DAC0CN, #00h
;▲■-- <15> --比较器设置
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;9BH---CPT0CN----比较器 0 控制寄存器
;复位值: 00000000
;CP0EN:比较器 0 使能位
; 0:比较器 0 禁止。
; 1:比较器 0 使能。
;CP0OUT:比较器 0 输出状态标志
; 0:电压值 CP0+ < CP0-。
; 1:电压值 CP0+ > CP0-。
;CP0RIF:比较器 0 上升沿中断标志
; 0:自该标志位被清除后,没有发生过比较器 0 上升沿中断。
; 1:自该标志位被清除后,发生了比较器 0 上升沿中断
;CP0FIF:比较器 0 下降沿中断标志
; 0:自该标志位被清除后,没有发生过比较器 0 下降沿中断。
; 1:自该标志位被清除后,发生了比较器 0 下降沿中断
;CP0HYP1-0:比较器 0 正向回差电压控制位
; 00:禁止正向回差电压。
; 01:正向回差电压= 5mV。
; 10:正向回差电压= 10mV。
; 11:正向回差电压= 20mV。
;CP0HYN1-0:比较器 0 负向回差电压控制位
; 00:禁止负向回差电压。
; 01:负向回差电压= 5mV。
; 10:负向回差电压= 10mV。
; 11:负向回差电压= 20mV。
;======================================================================
;|比较器0控制|CPT0CN| 9BH | - |CP0EN |CP0OUT |CP0RIF|CP0FIF|CP0HYP1|CP0HYP0|CP0HYN1|CP0HYN0
;------------------------------------------------------------------------------------
; mov CPT0CN, #00000000B
mov CPT0CN, #00h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;9FH---CPT0CN----比较器 1 控制寄存器
;复位值: 00000000
;CP1EN:比较器 1 使能位
; 0:比较器 0 禁止。
; 1:比较器 0 使能。
;CP1OUT:比较器 1 输出状态标志
; 0:电压值 CP0+ < CP0-。
; 1:电压值 CP0+ > CP0-。
;CP1RIF:比较器 1 上升沿中断标志
; 0:自该标志位被清除后,没有发生过比较器 0 上升沿中断。
; 1:自该标志位被清除后,发生了比较器 0 上升沿中断
;CP1FIF:比较器 1 下降沿中断标志
; 0:自该标志位被清除后,没有发生过比较器 0 下降沿中断。
; 1:自该标志位被清除后,发生了比较器 0 下降沿中断
;CP1HYP1-0:比较器 1 正向回差电压控制位
; 00:禁止正向回差电压。
; 01:正向回差电压= 5mV。
; 10:正向回差电压= 10mV。
; 11:正向回差电压= 20mV。
;CP1HYN1-0:比较器 1 负向回差电压控制位
; 00:禁止负向回差电压。
; 01:负向回差电压= 5mV。
; 10:负向回差电压= 10mV。
; 11:负向回差电压= 20mV。
;======================================================================
;|比较器0控制|CPT1CN| 9FH | - |CP1EN |CP1OUT |CP1RIF|CP1FIF|CP1HYP1|CP1HYP0|CP1HYN1|CP1HYN0
;------------------------------------------------------------------------------------
; mov CPT1CN, #00000000B
mov CPT1CN, #00h
;▲■-- <16> --时钟/电压基准设置
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;CKCON----时钟控制寄存器
;复位值: 00000000
;T3MH:定时器 3 高字节时钟选择。
; 该位选择供给定时器 3 高字节的时钟(如果定时器 3 被配置为两个 8 位定时器)。 定时器 3
; 工作在其他方式时该位被忽略。
; 0:定时器 3 高字节使用 TMR3CN 中的 T3XCLK 位定义的时钟。
; 1:定时器 3 高字节使用系统时钟。
;T3ML:定时器 3 低字节时钟选择。
; 该位选择供给定时器 3 的时钟。如果定时器 3 被配置为两个 8 位定时器,该位 选择供给低
; 8 位定时器的时钟。
; 0:定时器 3 低字节使用 TMR3CN 中的 T3XCLK 位定义的时钟。
; 1:定时器 3 低字节使用系统时钟。
;T2MH:定时器 2 高字节时钟选择。
; 该位选择供给定时器 2 高字节的时钟(如果定时器 2 被配置为两个 8 位定时器)。 定时器 2
; 工作在其他方式时该位被忽略。
; 0:定时器 2 高字节使用 TMR2CN 中的 T2XCLK 位定义的时钟。
; 1:定时器 2 高字节使用系统时钟。
;T2ML:定时器 2 低字节时钟选择。
; 该位选择供给定时器 2 的时钟。如果定时器 2 被配置为两个 8 位定时器,该位 选择供给低 8
; 位定时器的时钟。
; 0:定时器 2 低字节使用 TMR2CN 中的 T2XCLK 位定义的时钟。
; 1:定时器 2 低字节使用系统时钟。
;T1M:定时器 1 时钟选择。
; 该位选择定时器 1 的时钟源。当 C/T1 被设置为逻辑’1’时,T1M 被忽略。
; 0:定时器 1 使用由分频位(SCA1-SAC0)定义的时钟。
; 1:定时器 1 使用系统时钟
;T0M:定时器 0 时钟选择。
; 该位选择定时器 0 的时钟源。当 C/T0 被设置为逻辑’1’时,T0M 被忽略。
; 0:定时器 0 使用由分频位(SCA1-SAC0)定义的时钟。
; 1:定时器 0 使用系统时钟
;SCA1-SCA0:定时器 0/1 分频位
; 如果定时器 0/1 被配置为使用分频时钟,则这些位控制时钟分频数。
; SCA1 SCA0 分频时钟
; 0 0 系统时钟/12
; 0 1 系统时钟/4
; 1 0 系统时钟/48
; 1 1 外部时钟/8
; 注:外部时钟 8 分频与系统时钟同步,在该方式,外
; 部时钟频率必须小于或等于系统时钟频率。
;=================================================================================
;|时钟控制寄存器| CKCON | 8EH | - |T4M | T2M | T1M | T0M | - | - | - |
;-----------------------------------------------------------------------------------------------
; mov CKCON, #x0001000B
mov CKCON, #08h
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
;D1H---REF0CN-------电压基准控制寄存器
;复位值: 00000000
;位 7-5:未用。读 = 0000b,写 = 忽略。
;AD0VRS:ADC0 电压基准选择位
; 0:ADC0 电压基准取自 VREF0 引脚。
; 1:ADC0 电压基准取自 DAC0 输出(仅 C8051F040/2)。
;AD2VRS:ADC2 电压基准选择位(仅 C8051F040/2)
; 0:ADC2 电压基准取自 VREF2 引脚。
; ADC2 电压基准取自 AV+。
;TEMPE:温度传感器使能位
; 0: 内部温度传感器关闭。
; 1: 内部温度传感器工作。
;BIASE:ADC/DAC 偏压发生器使能位(使用 ADC 和 DAC 时该位必须为 1)
; 0: 内部偏压发生器关闭。
; 1: 内部偏压发生器工作
;REFBE:内部电压基准缓冲器使能位
; 0:内部电压基准缓冲器关闭。
; 1:内部电压基准缓冲器工作。内部电压基准输出到 VREF 引脚。
;======================================================================
;|电压基准控制| REF0CN | D1H | - |- | - | - | AD0VRS | AD2VRS | TEMPE | BIASE | REFBE |
;------------------------------------------------------------------------------------
; mov REF0CN, #00000000B
mov REF0CN, #00h
setb tr0
ret
上一篇:Keil C51 Startup.a51我的理解
下一篇:Keli C51学习
推荐阅读最新更新时间:2024-03-16 15:21