bodu.com

电子/电气工程师博客

正文 更多文章

C8051F020单片机初始化程序

                                                 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

分享到:

上一篇:简单、友好的按键处理程序设计

下一篇:论学问---培根

评论 (0条) 发表评论

抢沙发,第一个发表评论
验证码