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

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

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

2011-02-15 12:20:06| 分类:| 标签:|字号大中小订阅

C8051F020编程步骤

一、编程步骤:

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)

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

编译原理作业参考答案

第1章引言 1、解释下列各词 源语言:编写源程序的语言(基本符号,关键字),各种程序设计语言都可以作为源语言。 源程序: 用接近自然语言(数学语言)的源语言(基本符号,关键字)编写的程序,它是翻译程序处理的对象。 目标程序: 目标程序是源程序经过翻译程序加工最后得到的程序。目标程序 (结果程序)一般可由计算机直接执行。 低级语言:机器语言和汇编语言。 高级语言:是人们根据描述实际问题的需要而设计的一个记号系统。如同自然语言(接近数学语言和工程语言)一样,语言的基本单位是语句,由符号组和一组用来组织它们成为有确定意义的组合规则。 翻译程序: 能够把某一种语言程序(源语言程序)改变成另一种语言程序(目标语言程序),后者与前者在逻辑上是等价的。其中包括:编译程序,解释程序,汇编程序。 编译程序: 把输入的源程序翻译成等价的目标程序(汇编语言或机器语言), 然后再执行目标程序(先编译后执行),执行翻译工作的程序称为编译程序。 解释程序: 以该语言写的源程序作为输入,但不产生目标程序。按源程序中语句动态顺序逐句的边解释边执行的过程,完成翻译工作的程序称为解释程序。 2、什么叫“遍”? 指对源程序或源程序的中间形式(如单词,中间代码)从头到尾扫描一次,并作相应的加工处理,称为一遍。 3、简述编译程序的基本过程的任务。 编译程序的工作是指从输入源程序开始到输出目标程序为止的整个过程,整个过程可以划分5个阶段。 词法分析:输入源程序,进行词法分析,输出单词符号。 语法分析:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位,并判断输入串是否构成语法正确的“程序”。 中间代码生成:按照语义规则把语法分析器归约(或推导)出的语法单位翻译成一定形式的中间代码。 优化:对中间代码进行优化处理。 目标代码生成:把中间代码翻译成目标语言程序。 4、编译程序与解释程序的区别? 编译程序生成目标程序后,再执行目标程序;然而解释程序不生成目标程序,边解释边执行。 5、有人认为编译程序的五个组成部分缺一不可,这种看法正确吗? 编译程序的5个阶段中,词法分析,语法分析,语义分析和代码生成生成是必须完成的。而中间代码生成和代码优化并不是必不可少的。优化的目的是为了提高目标程序的质量,没有这一部分工作,仍然能够得到目标代码。 6、编译程序的分类 目前基本分为:诊断编译程序,优化编译程序,交叉编译程序,可变目标编译程序。

编译程序和解释程序

编译程序和解释程序 程序设计语言处理系统是系统软件中的一大类,它随被处理的语言及其处理方法和处理过程的不同而不同。任何一个语言处理系统通常都包括一个编译程序,它把一种语言的程序翻译成等价的另一种语言的程序。被翻译的语言和程序分别称为源语言和源程序,而翻译生成的语言和程序分别称为目标语言和目标程序,按照不同的翻译处理方法,翻译程序可分为以下三类: ⑴从汇编语言到及其语言的翻译程序,称为汇编程序。 ⑵按源程序中语句的执行顺序,逐条翻译并立即执行相关功能的处理程序、称为解释程序。 ⑶从高级语言到汇编语言(或机器语言)的翻译程序,称为编译语言。 除了翻译程序外,语言处理系统通常还包括连接程序(将多个分别编译或汇编过的目标程序和库文件进行组合)和装入程序(将目标程序装入内存并启动执行)等。 由于汇编语言的指令与机器语言指令大体上保持一一对应关系,因而汇编程序较为简单,一下只对解释程序和编译程序做简单说明。 1、解释程序 解释程序对源程序进行翻译的方法相当于两种自然语言间的口译。解释程序对源程序的语句从头到尾逐句扫描、逐句翻译、并且翻译一句执行一句,因而这种翻译方式并不形成机器语言形式的目标程序。 解释程序的优点是实现算法简单,且易于在解释过程中灵活方便地插入所需要的修改和测试措施;其缺点是运行效率低。例如,对于源程序中需要多次重复执行的语句,解释程序将要反复的取出、翻译和执行它们。根据这些特点,解释程序通常适合于以交互方式工作的、或在测试状态下运行的、或运行时间与解释时间差不多的程序。 2、编译程序 编译程序对源程序进行解释的方法相当于笔译。在编译程序的执行过程中,要对源程序扫描一遍或几遍,最终形成一个可在具体计算机上执行的目标程序。编译程序的实现算法较为复杂,但通过编译程序的处理可以产生高效运行的目标程序,并把它保存在磁盘上,以备多次执行。因此,编译程序更适合于翻译那些规模大、结构复杂、运行时间长的大的应用程序。

51单片机密码锁制作的程序和流程图

51单片码锁制作的程序和流程图(很详细) 一、基本组成: 单片机小系统+4*4矩阵键盘+1602显示+DC电机 基本电路: 键盘和和显示 键盘接P1口,液晶的电源的开、关通过P2.7口控制 电机(控制口P2.4) 二、基本功能描述: 1.验证密码、修改密码 a)锁的初始密码是123456(密码最长为10位,最短为1位)。 2.恢复初始密码 a)系统可以恢复初始密码,否则一旦忘记密码而又不能恢复初始密码,该锁就永远打不开。但是又不能让用户自行修改密码,否则其他人也可以恢复该初始密码,使得锁的安全性大大下降。

3.使系统进入低功耗状态 a)在实际使用中,锁只有在开门时才被使用。因而在大多数的时间里,应该让锁进入休眠状态、以降低功耗,这使系统进入掉电状态,可以大大降低系统功耗。 b)同时将LCD背光灯关闭 4.DC电机模拟开锁动作。 a)DC电机启动时解除开锁把手的锁定,允许通过把手开锁。DC电机不直接开锁,使得DC电机的功率不用太大,系统的组成和维护将变得简单,功耗也降了下来。 三、密码锁特点说明: 1.0 输入将被以字符形式输入,最长为10位。 超过10位时系统将自动截取前10位、但不作密码长度溢出提示。 2.0 开锁10秒后不允许更改密码、并提示修改超时_进入初始态,需要重新输入密码方可再次修改密码。 3.0 系统未使用存储器存储密码故掉电后密码自动恢复为初始密码。 4.0 若2分钟无任何操作,系统自动进入省电模式运行,同时关闭液晶显示,以节省电力。 5.0 输入密码正确后、电机允许开锁时间为5秒, 5秒后需要再次输入密码才可以再次开锁。 6.0 修改密码键和恢复初始密码键最好置于室。 这是Proteus仿真结果: 输入密码123456: 显示结果: 密码正确时电机启动、电机将持续5秒:

单片机原理与应用及C51程序设计(第三版)(1、2、3、4、7章课后习题答案)

第一章: 1. 给出下列有符号数的原码、反码和补码(假设计算机字长为8位)。 +45 -89 -6 +112 答:【+45】原=00101101,【+45】反=00101101,【+45】补=00101101 【-89】原=11011001,【-89】反=10100110,【-89】补=10100111 【-6】原=10000110,【-6】反=11111001,【-6】补=11111010 【+112】原=01110000,【+112】反=01110000,【+112】补=01110000 2. 指明下列字符在计算机内部的表示形式。 AsENdfJFmdsv120 答:41H 73H 45H 4EH 64H 66H 4AH 46H 6DH 64H 73H 76H 31H 32H 30H 3.何谓微型计算机硬件?它由哪几部分组成?并简述各部分的作用。 答:微型计算机硬件由中央处理器、存储器、输入/输出设备和系统总线等组成,中央处理器由运算器和控制器组成,是微型计算机运算和控制中心。存储器是用来存放程序和数据的记忆装置。输人设备是向计算机输人原始数据和程序的装置。输出设备是计算机向外界输出信息的装置。I/O接口电路是外部设备和微型机之间传送信息的部件。总线是连接多个设备或功能部件的一簇公共信号线,它是计算机各组成部件之间信息交换的通道。微型计算机的各大功能部件通过总线相连。 4.简述8086CPU的内部结构。 答:8086微处理器的内部分为两个部分:执行单元(EU)和总线接口单元(BIU)。执行部件由运算器(ALU)、通用寄存器、标志寄存器和EU控制系统等组成。EU从BIU的指令队列中获得指令,然后执行该指令,完成指今所规定的操作。总线接口部件BIU由段寄存器、指令指针寄存器、地址形成逻辑、总线控制逻辑和指令队列等组成。总线接口部件负责从内部存储器的指定区域中取出指令送到指令队列中去排队。 5.何谓总线?总线按功能可分为哪几种? 答:总线是连接多个设备或功能部件的一簇公共信号线,它是计算机各组成部件之间信息交换的通道。总线功能来划分又可分为地址总线(Address Bus)、数据总线(Date Bus)和控制总线(Control Bus)三类。 6.内部存储器由哪几部分组成? 答:包括随机存储器(RAM)和只读存储器(ROM)。 7.简述8086中的存储器管理? 答:8086把1M空间分成若干块(称为“逻辑段”),各个逻辑段之间可在实际存储空间中完全分开,也可以部分重叠,甚至可以完全重叠。每个逻辑段容量不超过64K字节,这样就可用16位寄存器提供地址访问。一个存储单元的地址可由段基址和偏移地址组成,这个地址我们称为逻辑地址,一般表示为“段基址:偏移地址”。而1M存储空间中的20位地址称为物理地址。逻辑地址是程序中使用的地址,物理地址是访问存储器的实际地址。 物理地址=段基址×16 + 段内偏移地址 8.什么是接口电路?接口电路有何功能? 答:I/O接口电路是外部设备和微型机之间传送信息的部件。接口电路主要功能。(1) 数据的寄存和缓冲功能。(2) 信号转换功能。(3) 设备选择功能。(4) 外设的控制和监测功能。(5) 中断或DMA管理功能。(6) 可编程功能。 9.外部设备与CPU之间的数据传送方式常见有几种?各有什么特点? 答:外部设备与微机之间的信息传送传送方式一般有无条件传送方式、查询传送方式、中断控制方式等。无条件传送方式是指CPU直接和外部设备之间进行数据传送。查询传送方式又称为条件传送方式,是指CPU通过查询I/O设备的状态决定是否进行数据传输的方式。中断是一种使CPU暂停正在执行的程序而转去处理特殊事件的操作。即当外设的输入数据准备好,或输出设备可以接收数据时,便主动向CPU发出中断请求,CPU可中断正在执行的程序,转去执行为外设服务的操作,服务完毕,CPU再继续执行原来的程序。 10.什么是单片机? 答:单片机是把微型计算机中的微处理器、存储器、I/O接口、定时器/计数器、串行接口、中断系统等电路集成到一个集成电路芯片上形成的微型计算机。因而被称为单片微型计算机,简称为单片机。 11.和一般微型计算机相比,单片机有何特点? 答:主要特点如下: 1) 在存储器结构上,单片机的存储器采用哈佛(Harvard)结构 2) 在芯片引脚上,大部分采用分时复用技术 3) 在内部资源访问上,采用特殊功能寄存器(SFR)的形式

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

C8051F020单片机初始化程序和编译步骤 2011-02-15 12:20:06| 分类:默认分类 | 标签: |字号大中小订阅 C8051F020编程步骤 一、编程步骤: 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) https://www.360docs.net/doc/4a14285908.html,/ 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

编译和解释的区别

编译和解释的区别 编译和解释的区别在哪?编译器是把源程序的每一条语句都编译成机器语言,并保存成 二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快; 而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运 行速度是不如编译后的程序运行的快的. 这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的 形式) 一、低级语言与高级语言 最初的计算机程序都是用0和1的序列表示的,程序员直接使用的是机器指令,无需 翻译,从纸带打孔输入即可执行得到结果。后来为了方便记忆,就将用0、1序列表示的机器指令都用符号助记,这些与机器指令一一对应的助记符就成了汇编指令,从而诞生了汇编语言。无论是机器指令还是汇编指令都是面向机器的,统称为低级语言。因为是针对特定机器的机器指令的助记符,所以汇编语言是无法独立于机器(特定的CPU体系结构)的。但汇 编语言也是要经过翻译成机器指令才能执行的,所以也有将运行在一种机器上的汇编语言翻译成运行在另一种机器上的机器指令的方法,那就是交叉汇编技术。 高级语言是从人类的逻辑思维角度出发的计算机语言,抽象程度大大提高,需要经过 编译成特定机器上的目标代码才能执行,一条高级语言的语句往往需要若干条机器指令来完成。高级语言独立于机器的特性是靠编译器为不同机器生成不同的目标代码(或机器指令)来实现的。那具体的说,要将高级语言编译到什么程度呢,这又跟编译的技术有关了,既可以编译成直接可执行的目标代码,也可以编译成一种中间表示,然后拿到不同的机器和系统上去执行,这种情况通常又需要支撑环境,比如解释器或虚拟机的支持,Java程序编译成bytecode,再由不同平台上的虚拟机执行就是很好的例子。所以,说高级语言不依赖于机器,是指在不同的机器或平台上高级语言的程序本身不变,而通过编译器编译得到的目标代码去适应不同的机器。从这个意义上来说,通过交叉汇编,一些汇编程序也可以获得不同机器之间的可移植性,但这种途径获得的移植性远远不如高级语言来的方便和实用性大。 二、编译与解释 编译是将源程序翻译成可执行的目标代码,翻译与执行是分开的;而解释是对源程序的翻译与执行一次性完成,不生成可存储的目标代码。这只是表象,二者背后的最大区别是:对解释执行而言,程序运行时的控制权在解释器而不在用户程序;对编译执行而言,运行时 的控制权在用户程序。 解释具有良好的动态特性和可移植性,比如在解释执行时可以动态改变变量的类型、 对程序进行修改以及在程序中插入良好的调试诊断信息等,而将解释器移植到不同的系统上,则程序不用改动就可以在移植了解释器的系统上运行。同时解释器也有很大的缺点,比如执行效率低,占用空间大,因为不仅要给用户程序分配空间,解释器本身也占用了宝贵的系统资源。 编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时 计算机可以直接以机器语言来运行此程序,速度很快; 而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运 行速度是不如编译后的程序运行的快的.

51单片机密码锁制作的程序和流程图

51单片机密码锁制作的程序和流程图(很详细) 一、基本组成: 单片机小系统+4*4矩阵键盘+1602显示+DC电机 基本电路: 键盘和和显示 键盘接P1口,液晶的电源的开、关通过P2.7口控制 电机(控制口P2.4) 二、基本功能描述: 1.验证密码、修改密码 a)锁的初始密码是123456(密码最长为10位,最短为1位)。 2.恢复初始密码 a)系统可以恢复初始密码,否则一旦忘记密码而又不能恢复初始密码,该锁就永远打不开。但是又不能让用户自行修改密码,否则其他人也可以恢复该初始密码,使得锁的安全性大大下降。

3.使系统进入低功耗状态 a)在实际使用中,锁只有在开门时才被使用。因而在大多数的时间里,应该让锁进入休眠状态、以降低功耗,这使系统进入掉电状态,可以大大降低系统功耗。 b)同时将LCD背光灯关闭 4.DC电机模拟开锁动作。 a)DC电机启动时解除开锁把手的锁定,允许通过把手开锁。DC电机不直接开锁,使得DC电机的功率不用太大,系统的组成和维护将变得简单,功耗也降了下来。 三、密码锁特点说明: 1.0 输入将被以字符形式输入,最长为10位。 超过10位时系统将自动截取前10位、但不作密码长度溢出提示。 2.0 开锁10秒后不允许更改密码、并提示修改超时_进入初始态,需要重新输入密码方可再次修改密码。 3.0 系统未使用存储器存储密码故掉电后密码自动恢复为初始密码。 4.0 若2分钟内无任何操作,系统自动进入省电模式运行,同时关闭液晶显示,以节省电力。 5.0 输入密码正确后、电机允许开锁时间为5秒, 5秒后需要再次输入密码才可以再次开锁。 6.0 修改密码键和恢复初始密码键最好置于室内。 这是Proteus仿真结果: 输入密码123456: 显示结果: 密码正确时电机启动、电机将持续5秒:

单片机串口初始化

单片机串口初始化:TMOD=0X20; TH1=0Xfd; TL1=0xfd; PCON=0x00;

TR1=1; SCON=0x50; EA=0; 模数转换子程序: MOV R0,#30H ;设立数据存储区指针 MOV R2, #08H ;设置 2 路采样计数值 SETB IT0 ;设置外部中断 0 为边沿触发方式SETB EA ;CPU 开放中断 SETB EX0 ;允许外部中断 0 中断 MOV DPTR,#FEF8H ;送入地址并指向 IN0 LOOP: MOVX @DPTR, A ;启动 A/D 转换,A 的值无意义HERE: SJMP HERE ;等待中断 中断服务程序: MOVX A, @DPTR ;读取转换后的数字量 MOV @R0, A ;存入片内RAM 单元 INC DPTR ;指向下一模拟通道 INC RO ;指向下一个数据存储单元DJNZ R2, INT0 ;8 路未转换完,则继续 CLR EA ;已转换完,则关中断 CLR EX0 ;禁止外部中断 0 中断 RETI ;中断返回 INT0: MOVX @DPTR, A ;再次启动 A/D 转换 RETI ;中断返回 判断比较子程序: CLR C ;清进位位 MOV A, 30H ;取气体传感器值 SUBB A,#90H ;与阀值比较 JNC BAOJIN ;超过值转报警 发送 AT 命令子程序:

for (i=0;i<4;i++) {hh=&doc0[0] ;发送 ATE0 SBUF=doc0[i]; while(TI==0);TI=0; delay(); for (j=0;j<4;j++) { while(RI==0);RI=0 ;接收 OK mnk[j]=SBUF; if ((mnk[j]^0x4b)==0) { hh=mnk[j]; break;}

编译原理第二版课后习答案

《编译原理》课后习题答案第一章 第 1 章引论 第 1 题 解释下列术语: (1)编译程序 (2)源程序 (3)目标程序 (4)编译程序的前端 (5)后端 (6)遍 答案: (1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。 (2)源程序:源语言编写的程序称为源程序。 (3)目标程序:目标语言书写的程序称为目标程序。 (4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶 段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符 号表管理等工作。 (5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。 (6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。 第 2 题 一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程 序的总体结构图。 答案: 一个典型的编译程序通常包含 8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。其各部分的主要功能简述如下。 词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机表达形式。 语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。 语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。 中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式 的中间语言代码,如三元式或四元式。 中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。 目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。 表格管理程序:负责建立、填写和查找等一系列表格工作。表格的作用是记录源程序的 各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。可以说整个编译过程就是造表、查表的工作过程。需要指出的是,这里的“表格管理程序”并不意味着它就是一个独立的表格管理模块,而是指编译程序具有的表格管理功能。 错误处理程序:处理和校正源程序中存在的词法、语法和语义错误。当编译程序发现源

单片机C语言(非常通俗易懂)

单片机C语言(非常通俗易懂) (一) 相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚, 更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。简称为:单片微型计算机或单片机 (Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、实时控制、通信、家电等方面。不过这一切都没 什么关系,因为我(当然也包括任何人)都是从不知道转变成知道的,再转变成精通的。现在我只想把我学习单片机的经历,详细地讲叙给大 家听听,可能有些大虾会笑话我,想:那么简单的东西还在这里卖弄。但是你错了,我只是把我个人学习的经历讲述一遍而已,仅仅对那些想 学习单片机,但又找不到好方法或者途径的朋友,提供一个帮助,使他们在学习过程中,尽量少走些弯路而已! 首先,你必须有学习单片机的热情,不是说今天去图书馆看了一个下午关于单片机的书,而明天玩上半天,后天就不知道那个本书在讲什 么东西了。还是先说说我吧,我从大二的第一个学期期末的时候才开始接触单片机,但在这之前,正如上面所说的:我知道有种芯片叫单片机, 但是具体长成什么样子,却一点也不知道!看到这里很多朋友一定会忍不住发笑。嘿嘿,你可千万别笑,有些大四毕业的人也同样不知道单片 机长成什么样子呢!而我对单片机的痴迷更是常人所不能想象的地步,大二的期末考试,我全放弃了复习,每当室友拿着书在埋头复习的时候, 我却捧着自己从图书馆借的单片机书在那看,虽然有很多不懂,但是我还是坚持了下来,当时我就想过,为了单片机值不值得我这样去付出, 或许这也是在一些三流学校的好处吧,考试挂科后,明年开学交上几十元一门的补考费,应该大部分都能过了。于是,我横下一条心,坚持看 我的单片机书和资料。 当你明白了单片机是这么一回事的时候,显而易见的问题出来了:我要选择那种语言为单片机编写程序呢?这个问题,困扰了我好久。具 体选择C51还是A51呢?汇编在我们大二之前并没有开过课,虽然看着人家的讲解,很容易明白单片机的每一时刻的具体工作情况,但是一合上 书或者资料,自己却什么也不知道了,根本不用说自己写程序了。于是,我最终还是决定学C51,毕竟C51和我们课上讲的C语言,有些类似, 编程的思想可以说是相通的。而且C51还有更大的优点就是编写大程序时的优越性更不言而喻,当然在那时,我并没有想的那么深远,C51的特 点,还是在后来的实践过程中,渐渐体会到的!朋友如果你选择了C51,那么请继续往下看,如果你选择了A51,那么你可以不要看了!因为下面讲 的全是C方面的,完全在浪费你的时间! 呵呵 ^_^ 第二,既然你想学好单片机,你必须得舍得花钱,如果不买些芯片回来自己动手焊焊拆拆的(但是在后期会介绍给大家一个很好用的硬件 仿真软件,并不需要你用实验板和仿真器了,直接在你的PC上完成,但是软件毕竟是软件,从某个特定的意义上来说是并不能代替硬件的),即使

编译原理练习题参考答案

一、填空题: 1-01.编译程序的工作过程一般可以划分为词法分析,语法分析,语义分析,之间代码生成,代码优化等几个基本阶段,同时还会伴有表格处理和出错处理 . 1-02.若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序 ,则其翻译程序称为编译程序. 1-03.编译方式与解释方式的根本区别在于是否生成目标代码 . 1-04.翻译程序是这样一种程序,它能够将用甲语言书写的程序转换成与其等价的用乙语言书写的程 序 . 1-05.对编译程序而言,输入数据是源程序 ,输出结果是目标程序 . 1-06.如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段: 编译阶段和运行阶段 .如果编译程序生成的目标程序是汇编语言程序,则源程序的执行分为三个阶段: 编译阶段 , 汇编阶段和运行阶段 . 1-07.若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序。 1-08.一个典型的编译程序中,不仅包括词法分析、语法分析、中间代码生成、代码优化、目标代码生成等五个部分,还应包括表格处理和出错处理。其中,词法分析器用于识别单词。 1-09.编译方式与解释方式的根本区别为是否生成目标代码。 2-01.所谓最右推导是指:任何一步α β都是对α中最右非终结符进行替换的。 2-02.一个上下文无关文法所含四个组成部分是一组终结符号、一组非终结符号、一个开始符号、一组产生式。 2-03.产生式是用于定义语法成分的一种书写规则。 2-04.设G[S]是给定文法,则由文法G所定义的语言L(G)可描述为:L(G)={x│S x,x∈V T*} 。 2-05.设G是一个给定的文法,S是文法的开始符号,如果S x (其中x∈V*),则称x是文法的一个句型。 2-06.设G是一个给定的文法,S是文法的开始符号,如果S x(其中x∈V T*),则称x是文法的一个句子。 3-01.扫描器的任务是从源程序中识别出一个个单词符号。 4-01.语法分析最常用的两类方法是自上而下和自下而上分析法。 4-02.语法分析的任务是识别给定的终极符串是否为给定文法的句子。 4-03.递归下降法不允许任一非终极符是直接左递归的。 4-04.自顶向下的语法分析方法的关键是如何选择候选式的问题。 4-05.递归下降分析法是自顶向上分析方法。 4-06.自顶向下的语法分析方法的基本思想是:从文法的开始符号开始,根据给定的输入串并按照文法的产生式一步一步的向下进行直接推导,试图推导出文法的句子,使之与给定的输入串匹配。 5-01.自底向上的语法分析方法的基本思想是:从给定的终极符串开始,根据文法的规则一步一步的向上进行直接归约,试图归约到文法的开始符号。 5-02.自底向上的语法分析方法的基本思想是:从输入串入手,利用文法的产生式一步一步地向上进行直接归约,力求归约到文法的开始符号。

51单片机中断系统编程

51单片机中断系统编程 51单片机中断系统编程 上传的图片 抱歉,您所在的组无权下载附件,请注册或登陆中断是指如下过程(如下图所示):CPU 与外设同时工作,CPU执行主程序,外设做准备工作。当外设准备好时向CPU发中断请求信 号,若条件满足,则CPU终止主程序的执行,转去执行中断服务程序。在中断服务程序中 CPU与外设交换信息,待中断服务程序执行完后,CPU再返回刚才终止的主程序继续执行。 5.3.1 中断系统 MCS-51单片机提供了5个固定的可屏蔽中断源,3个在片内,2个在片外,它们在程序存储 器中各有固定的中断入口地址,由此进入中断服务程序。5个中断源的符号、名称及产生 的条件如下。 ? INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起。 ? INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起。 ? T0:定时器/计数器0中断,由T0计数溢出引起。 ? T1:定时器/计数器l中断,由T1计数溢出引起。 ? TI/RI:串行I/O中断,串行端口完成一帧字符发送/接收后引起。 中断源有两级中断优先级,可形成中断嵌套。两个特殊功能寄存器用于中断控制和条件设 置。整个中断系统的结构框图如图所示。 上传的图片 抱歉,您所在的组无权下载附件,请注册或登陆 中断系统结构框图 2 中断系统的控制寄存器 中断系统有两个控制寄存器(IE和IP),它们分别用来设定各个中断源的打开/关闭和中

断优先级。此外,在TCON中另有4位用于选择引起外部中断的条件并作为标志位。 (1)中断允许寄存器IE IE在特殊功能寄存器中,字节地址为A8H,位地址(由低位到高位)分别是A8H-AFH。IE 用 来打开或关断各中断源的中断请求,基本格式如下: 上传的图片 抱歉,您所在的组无权下载附件,请注册或登陆 ? EA:全局中断允许位。EA=0,禁止一切中断;EA=1,打开全局中断控制,此时,由各 个中断控制位确定相应中断的打开或关闭。 ? ×:无效位。 ? ES:串行I/O中断允许位。ES=1,允许串行I/O中断;ES=0,禁止串行I/O中断。 ? ETl;定时器/计数器T1中断允许位。ETl=1,允许T1中断;ETl=0,禁止T1中断。 ? EXl:外部中断l中断允许位。EXl=1,允许外部中断1中断;EXl=0,禁止外部中断1中 断。 ? ET0:定时器/计数器T0中断允许位。ET0=1,允许T0中断;ET0=0,禁止TO中断。 ? EX0:外部中断0中断允许位。EX0=1,允许外部中断0中断;EX0=0,禁止外部中断0中 断。 (2)中断优先级寄存器IP IP在特殊功能寄存器中,字节地址为B8H,位地址(由低位到高位)分别是B8H一BFH。 MCS-51单片机的中断分为两个优先级,IP用来设定各个中断源属于两级中断中的哪一级, 其基本格式如下: 上传的图片

MCS-51单片机实用子程序库

《MCS-51单片机实用子程序库(96年版)》 周航慈 目前已有若干版本的子程序库公开发表,它们各有特色。笔者在1988年也编制了两个子程序库(定点子程序库和浮点子程序库),并在相容性、透明性、容错性和算法优化方 面作了一些工作。本程序库中的开平方算法为笔者研究的快速逼近算法,它能达到牛顿迭代法同样的精度,而速度加快二十倍左右,超过双字节定点除法的速度。经过八年来全国广大用户的实际使用,反馈了不少信息,陆续扩充了一些新的子程序,纠正了一些隐含错误,成为现在这个最新版本。 本子程序库对《单片机应用程序设计技术》一书附录中的子程序库作了重大修订:(1)按当前流行的以 IBM PC 为主机的开发系统对汇编语言的规定,将原子程序库的标号和位地址进行了调整,读者不必再进行修改,便可直接使用。 (2)对浮点运算子程序库进行了进一步的测试和优化,对十进制浮点数和二进制浮点数的相互转换子程序进行了彻底改写,提高了运算精度和可靠性。 (3)新增添了若干个浮点子程序(传送、比较、清零、判零等),使编写数据处理 程序的工作变得更简单直观。 在使用说明中开列了最主要的几项:标号、入口条件、出口信息、影响资源、堆栈 需求,各项目的意义请参阅《单片机应用程序设计技术》第六章 6.3.7 节的内容。程序 清单中开列了四个栏目:标号、指令、操作数、注释。为方便读者理解,注释尽力详细。 子程序库的使用方法如下: 1.将子程序库全部内容链接在应用程序之后,统一编译即可。优点是简单方便,缺点是程序太长,大量无关子程序也包含在其中。 2.仅将子程序库中的有关部分内容链接在应用程序之后,统一编译即可。有些子程序需要调用一些低级子程序,这些低级子程序也应该包含在内。优点是程序紧凑,缺点是需要对子程序库进行仔细删节。 (一)MCS-51定点运算子程序库及其使用说明 定点运算子程序库文件名为DQ51.ASM,为便于使用,先将有关约定说明如下: 1.多字节定点操作数:用[R0]或[R1]来表示存放在由R0或R1指示的连续单元中的数据。地址小的单元存放数据的高字节。例如:[R0]=123456H,若(R0)=30H,则(30H)=12H,(31H)=34H,(32H)=56H。 2.运算精度:单次定点运算精度为结果最低位的当量值。 3.工作区:数据工作区固定在PSW、A、B、R2~R7,用户只要不在工作区中存放无 关的或非消耗性的信息,程序就具有较好的透明性。

编译与解释的区别

计算机并不能直接地接受和执行用高级语言编写的源程序,源程序在输入计算机时,通过"翻译程序"翻译成机器语言形式的目标程序,计算机才能识别和执行。这种"翻译"通常有两种方式,即编译方式和解释方式。编译方式是指利用事先编好的一个称为编译程序的机器语言程序,作为系统软件存放在计算机内,当用户将高级语言编写的源程序输入计算机后,编译程序便把源程序整个地翻译成用机器语言表示的与之等价的目标程序,然后计算机再执行该目标程序,以完成源程序要处理的运算并取得结果。解释方式是指源程序进入计算机后,解释程序边扫描边解释,逐句输入逐句翻译,计算机一句句执行,并不产生目标程序。如PASCAL、FORTRAN、COBOL等高级语言执行编译方式;BASIC语言则以执行解释方式为主;而PASCAL、C语言是能书写编译程序的高级程序设计语言。 编译程序、解释程序、汇编程序是3种语言处理程序。其区别主要为:汇编程序(为低级服务)是将汇编语言书写的源程序翻译成由机器指令和其他信息组成的目标程序。解释程序(为高级服务)直接执行源程序或源程序的内部形式,一般是读一句源程序,翻译一句,执行一句,不产生目标代码,如BASIC解释程序。编译程序(为高级服务)是将高级语言书写的源程序翻译成与之等价的低级语言的目标程序。编译程序与解释程序最大的区别之一在于前者生成目标代码,而后者不生成;此外,前者产生的目标代码的执行速度比解释程序的执行速度要快;后者人机交互好,适于初学者使用。用COBOL、FORTRAN等语言编写的程序考虑到执行速度一般都是编译执行。 解释:程序运行时,取一条指令,将其换化为机器指令,再执行这条机器指令。编译:程序运行时之前,将程序的把有代码编译为机器代码,再运行这个程序。计算机并不能直接地接受和执行用高级语言编写的源程序,源程序在输入计算机时,通过"翻译程序"翻译成机器语言形式的目标程序,计算机才能识别和执行。这种"翻译"通常有两种方式,即编译方式和解释方式。 编译方式是指利用事先编好的一个称为编译程序的机器语言程序,作为系统软件存放在计算机内,当用户将高级语言编写的源程序输入计算机后,编译程序便把源程序整个地翻译成用机器语言表示的与之等价的目标程序,然后计算机再执行该目标程序,以完成源程序要处理的运算并取得结果。 解释方式是指源程序进入计算机后,解释程序边扫描边解释,逐句输入逐句翻译,计算机一句句执行,并不产生目标程序。如PASCAL、FORTRAN、COBOL等高级语言执行编译方式;BASIC语言则以执行解释方式为主;而PASCAL、C 语言是能书写编译程序的高级程序设计语言。 简单的说,编译就是全文翻译,全部翻译完才执行。解释就相当于同声翻译,边翻译边执行。

51单片机C语言入门教程详细解说

单片机c语言入门 相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚, 更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。简称为:单片微型计算机或单片机 (Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、实时控制、通信、家电等方面。不过这一切都没 什么关系,因为我(当然也包括任何人)都是从不知道转变成知道的,再转变成精通的。现在我只想把我学习单片机的经历,详细地讲叙给大 家听听,可能有些大虾会笑话我,想:那么简单的东西还在这里卖弄。但是你错了,我只是把我个人学习的经历讲述一遍而已,仅仅对那些想 学习单片机,但又找不到好方法或者途径的朋友,提供一个帮助,使他们在学习过程中,尽量少走些弯路而已! 首先,你必须有学习单片机的热情,不是说今天去图书馆看了一个下午关于单片机的书,而明天玩上半天,后天就不知道那个本书在讲什 么东西了。还是先说说我吧,我从大二的第一个学期期末的时候才开始接触单片机,但在这之前,正如上面所说的:我知道有种芯片叫单片机, 但是具体长成什么样子,却一点也不知道!看到这里很多朋友一定会忍不住发笑。嘿嘿,你可千万别笑,有些大四毕业的人也同样不知道单片 机长成什么样子呢!而我对单片机的痴迷更是常人所不能想象的地步,大二的期末考试,我全放弃了复习,每当室友拿着书在埋头复习的时候, 我却捧着自己从图书馆借的单片机书在那看,虽然有很多不懂,但是我还是坚持了下来,当时我就想过,为了单片机值不值得我这样去付出, 或许这也是在一些三流学校的好处吧,考试挂科后,明年开学交上几十元一门的补考费,应该大部分都能过了。于是,我横下一条心,坚持看 我的单片机书和资料。 当你明白了单片机是这么一回事的时候,显而易见的问题出来了:我要选择那种语言为单片机编写程序呢?这个问题,困扰了我好久。具 体选择C51还是A51呢?汇编在我们大二之前并没有开过课,虽然看着人家的讲解,很容易明白单片机的每一时刻的具体工作情况,但是一合上 书或者资料,自己却什么也不知道了,根本不用说自己写程序了。于是,我最终还是决定学C51,毕竟C51和我们课上讲的C语言,有些类似, 编程的思想可以说是相通的。而且C51还有更大的优点就是编写大程序时的优越性更不言而喻,当然在那时,我并没有想的那么深远,C51的特 点,还是在后来的实践过程中,渐渐体会到的!朋友如果你选择了C51,那么请继续往下看,如果你选择了A51,那么你可以不要看了!因为下面讲 的全是C方面的,完全在浪费你的时间! 呵呵^_^ 第二,既然你想学好单片机,你必须得舍得花钱,如果不买些芯片回来自己动手焊焊拆拆的(但是在后期会介绍给大家一个很好用的硬件 仿真软件,并不需要你用实验板和仿真器了,直接在你的PC上完成,但是软件毕竟是软件,从某个特定的意义上来说是并不能代替硬件的),即使

解释程序和编译程序

A、解释程序 所谓解释程序是高级语言翻译程序的一种,它将源语言(如BASIC)书写的源程序作为输入,解释一句后就提交计算机执行一句,并不形成目标程序。就像外语翻译中的“口译”一样,说一句翻一句,不产生全文的翻译文本。这种工作方式非常适合于人通过终端设备与计算机会话,如在终端上打一条命令或语句,解释程序就立即将此语句解释成一条或几条指令并提交硬件立即执行且将执行结果反映到终端,从终端把命令打入后,就能立即得到计算结果。这的确是很方便的,很适合于一些小型机的计算问题。但解释程序执行速度很慢,例如源程序中出现循环,则解释程序也重复地解释并提交执行这一组语句,这就造成很大浪费。 B、编译程序 这是一类很重要的语言处理程序,它把高级语言(如FORTRAN、COBOL、Pascal、C等)源程序作为输入,进行翻译转换,产生出机器语言的目标程序,然后再让计算机去执行这个目标程序,得到计算结果。 编译程序工作时,先分析,后综合,从而得到目标程序。所谓分析,是指词法分析和语法分析;所谓综合是指代码优化,存储分配和代码生成。为了完成这些分析综合任务,编译程序采用对源程序进行多次扫描的办法,每次扫描集中完成一项或几项任务,也有一项任务分散到几次扫描去完成的。下面举一个四遍扫描的例子:第一遍扫描做词法分析;第二遍扫描做语法分析;第三遍扫描做代码优化和存储分配;第四遍扫描做代码生成。 值得一提的是,大多数的编译程序直接产生机器语言的目标代码,形成可执行的目标文件,但也有的编译程序则先产生汇编语言一级的符号代码文件,然后再调用汇编程序进行翻译加工处理,最后产生可执行的机器语言目标文件。 在实际应用中,对于需要经常使用的有大量计算的大型题目,采用招待速度较快的编译型的高级语言较好,虽然编译过程本身较为复杂,但一旦形成目标文件,以后可多次使用。相反,对于小型题目或计算简单不太费机时的题目,则多选用解释型的会话式高级语言,如BASIC,这样可以大大缩短编程及调试的时

单片机流程图

单片机总流程图

主函数程序 #include #include #define uchar unsigned char #define uint unsigned int #define OSC_FREQ 12000000 #define __10ms (65536 - OSC_FREQ/(12000000/9970)) #define COM8255 XBYTE[0XFFF3] #define PA8255 XBYTE[0XFFF0] #define PB8255 XBYTE[0XFFF1] #define PC8255 XBYTE[0XFFF2] uchar code tab[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6}; uchar code dis_HELLO[]={0x89,0x86,0xc7,0xc7}; uchar code dis_op51[]={0xc0,0x8c,0x92,0xf9}; uchar code dis_code[]={0xcf,0xa4,0xcf,0xa4}; uchar ucCnt_10ms=99; uchar i=0; uchar J=0; uchar n=0; uchar led1; uchar led2; sbit P2_4=P2^4; sbit P3_7=P3^7; sbit P1_0=P1^0; sbit P1_1=P1^1; sbit P1_2=P1^2; void Disp_op51 (); void Disp_HELLO(); void Set_Init_Xint(); void Set_Init_Timer(); void Disp_t(); void DelayX1ms(uint count); void Disp_8255(); void main() { for(;;) { Set_Init_Xint(); Set_Init_Timer(); Disp_8255(); //ucCnt_10ms =99; //ucLed1 = 6; //ucLed2 = 8;

相关文档
最新文档