单片机 > 单片机程序设计 > 详情

C8051F020单片机初始化程序和编译步骤

发布时间:2025-10-27 发布时间:
|

一、编程步骤:
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,
; 必须

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
89C51单片机数码管显示