📄 initialcpu.c
字号:
#include "REG79.H"
void InitialCPU()
{
WDCON=0x00;
IP0=0x00; //Interrupt Priority0:-,PADC,PBO,PS,PT1,PX1,PT0,PX0
IP0H=0x00; //Interrupt High Priority0:-,PADCH,PBOH,PSH,PT1H,PX1H,PT0H,PX0H
IP1=0x00; //Interrupt Priority1:PCAP,PT2,PPWM,PWDI,PSPI,-,PDB,-
IP1H=0x00; //Interrupt High Priority1:PCAPH,PT2H,PPWMH,PWDIH,PSPIH,-,PDBH,-
/*----------------------------------------------*/
TMOD=0x11; // md=1 (gate,c/t,m1,m0,gate,c/t,m1,m0
TH1 = 0xFD; //timer 1 used as Serial Port
TL1 = 0xFD;
/*---------------------------------------------------------------
Time mode control: TMOD/reset:00000000b
bit7 GATE 门控位为1 时, timer 1 的运行除受TRx 控制外还受n int 控制,当TRx 和n int 均
为1 时time 1开始运行。该位为0 时,定时器的运行只受TRx 的控制
bit6 T C timer 1 工作方式选择:
为0 时以定时器的方式运行;为1 时对TX脚上的高到低电平变化进行计数
bit5 M1 timer 1模式选择位
bit4 M0 timer 1模式选择位
bit3 GATE 门控位为1 时, timer_0 的运行除受TRx 控制外还受n int 控制,
当TRx 和n int 均为1 时timer_0开始运行。
该位为0 时,定时器的运行只受TRx 的控制
bit2 T C timer_0 工作方式选择:
为0 时以定时器的方式运行;为1 时对TX脚上的高到低电平变化进行计数
bit1 M1 timer_0 模式选择位
bit0 M0 timer_0 模式选择位
-----------------------------------------------------------------
| M1| M0 |模式
|-----|-----|----------------------------------------------------
| 0 |0 |模式 0: 8-位定时器,有5 位的预分频。
|-----|-----|----------------------------------------------------
| 0 |1 |模式 1: 16-位定时器,没有5 位的预分频。
|-----|-----|----------------------------------------------------
| 1 |0 |模式 2: 8位从THx 中自动重装定时器
|-----|-----|----------------------------------------------------
| 1 |1 |模式3: (仅适用于T0 )TL0 是受定时器0 控制的8 位定时器/计数器。 TH0 是受
| | |定时器1 控制的8 位定时器/计数器。定时器1 在此方式下不工作。
----------------------------------------------------------------------------*/
TCON=0x51; //tcon=tf1,tr1,tf0,tr0,ie1,it1,ie0,it0
/*-----------------------------------------------------------------
Time control: TCON/reset:00000000b
bit7 TF1 定时器1 溢出标志,软件置位或复位
bit6 TR1 定时器1 启动控制:启动或关闭定时器
bit5 TF0 定时器0 溢出标志;软件置位或复位
bit4 TR0 定时器0 启动控制:启动或关闭定时器
bit3 IE1 外部中断1 标志;当1 int 上出现电平跳变时由硬件置1;
若被设置为下沿触发中断,进入中断服务程序IE1 会自动清除为0。.
bit2 IT1 1 触发方式控制;
1:低电平边沿触发;
0:低电平触发
bit1 IE0 外部中断0 标志;当0 INT 上出现电平跳变时由硬件置1;
若被设置为下沿触发中断,进入中断服务程序IE0会自动清除为0
bit0 IT0 外部中断0 触发方式控制;
1:低电平边沿触发;
0:低电平触发
----------------------------------------------------------------*/
/*-------------------------------------------------------------------------
Clock Control:CKCON/Reset:00000000b
bit7 - 保留
bit6:5 CCDIV.1-0 定时器2 时钟选择:
----------------------------------------
|CCDIV[1] | CCDIV[0] |
|--------------------------------------|
|0 |0 : 定时器2 时钟 = Fosc |
|--------------------------------------|
|0 |1 : 定时器2 时钟= Fosc/4 |
|--------------------------------------|
|1 |0 : 定时器2 时钟= Fosc/16 |
|--------------------------------------|
|1 |1 : 定时器2 时钟= Fosc/32 |
----------------------------------------
bit4 T1M 定时器1 时钟选择:
0: 定时器1 的时钟选择为1/12 系统时钟。
1: 定时器1 的时钟选择为1/4 系统时钟。
bit3 T0M 定时器0 时钟选择:
0: 定时器0 的时钟选择为1/12 系统时钟。
1: 定时器0 的时钟选择为1/4 系统时钟。
bit2:0 - 保留
---------------------------------------------------------------------------*/
SCON = 0x50;
/*---------------------------------------------------------------------------------
Seiral Port Control: SCON/Reset:00000000b
bit7 SM0/FE 串行口0,模式0 控制位或贞错误标志位。PCON特殊功能寄存器中的SMOD0 位决定
该位的功能。下面会描述SM0 的运行功能。当用作贞错误标志时,该位的置位表示一
个无效的停止位。该位必须由软件来清除
bit6 SM1 串行口模式位1
----------------------------------------------------------
|SM0|SM1| 模式 | 说明 | 数据长 |波特率 |
|---|---|-------|-------|-----------|---------------------|
|0 |0 |0 |同步 |8 |时钟的4 或12 分之一 |
|---|---|-------|-------|-----------|---------------------|
|0 |1 |1 |异步 |10 |可变 |
|---|---|-------|-------|-----------|---------------------|
|1 |0 |2 |异步 |11 |时钟的64 或32 分之一 |
|---|---|-------|-------|-----------|---------------------|
|1 |1 |3 |异步 |11 |可变 |
----------------------------------------------------------
bit5 SM2 多机通信控制。将该位置1,则使能模式2 及模式3 下的多机通信功能。在模式2 或3
下,如果SM2置1,那么收到的第九位数据RB8是0 的话,RI 将不会置位。在模式1
下如果SM2置1,那么在没有收到有效的停止位前RI 是不会置位的。在模式0 下,SM2
位控制着串行口的时钟。如果清0,那么串行口的时钟是系统时钟的12 分频。这样系统
就与标准8052 兼容。如果该位置1,那么串行口的时钟是系统时钟的4 分频,这样就
加快了同步通信的速度
bit4 REN 接收使能,置1 时打开串行口接收功能,否则关闭该功能
bit3 TB8 模式2 和3 中要被发送的第九位数据。软件可以根据需求将该位置1 或清0
bit2 RB8 模式2 和3 中接收到的第九位数据。模式1 下,若SM2=0 则RB8是接收到的停止位。
模式0 下该位无意义
bit1 TI 发送中断标志:模式0 下该标志由硬件在发送完8 位数据后置位,而在其他模式下在串
行发送到停止位时开始时置位。该位必须由软件来清除
bit0 RI 接收中断标志:模式0 下该标志由硬件在接收到8 位数据后置位,而在其他模式下在串
行接收到停止位的中间时置位。该位必须由软件来清除
--------------------------------------------------------------------------*/
PCON |= 0x80; //timer 1 used as Serial Port,doubles baud rate.
/*--------------------------------------------------------------------------
Power control:PCON Reset:00XX0000b
bit7 SMOD 1:使串行口在模式1,2,3 下的波特率加倍
bit6 SMOD0 0: SCON.7表示一个帧错误 它是FE(帧错误)标志
1: SCON.7的功能与标准8052 中SCON.7 相同.
bit5 BOF 0: 软件清零
1: 当发生上电复位、降压复位、降压中断时硬件置位。
bit4 POR 0: 软件清零。
1: 当发生上电复位时硬件置位。
bit3 GF1 通用的标志位
bit2 GF0 通用的标志位
bit1 PD 1:系统进入掉电模式;该模式下,所有时钟停止工作,程序也不再执行
bit0 IDL 1:系统进入空闲模式;该模式下,CPU 的时钟停止工作,程序停止运行;但串口、定
时器、中断的时钟没有停止,这些功能模块仍正常运行
--------------------------------------------------------------------------*/
SPCR=0x00;
/*-------------------------------------------------------------------------
SPI control register SPCR/Reset:00000000b
bit7 SSOE 从机选择使能位。SS 输出特性只能在主机模式下通过SSOE 位实现。
0: SS 输入 (With Mode Fault)
1: SS 输出 (No Mode Fault)
----------------------------------------------------------
|DRSS | SSOE 主机模式 | 从机模式 |
|---------------------------------------------------------|
|0 |0 SS 输入( 模式故障) |SS 输入(不受SSOE影响)|
|---------------------------------------------------------|
|0 |1 保留 |SS 输入(不受SSOE影响)|
|---------------------------------------------------------|
|1 |0 SS 通用I/O( 无模式故障) |SS 输入(不受SSOE影响)|
|---------------------------------------------------------|
|1 |1 SS 输出(无模式故障) |SS 输入(不受SSOE影响)|
----------------------------------------------------------
bit6 SPE 外围设备系统串行使能位。
当SPE 置位, SPI 模块功能使能。当MODF 置位,读SPE 总是0。
0: SPI 系统禁止。
1: SPI 系统使能。
bit5 LSBFE LSB – 优先使能:该位不影响MSB 和LSB 在数据寄存器中的位置,
对数据寄存器的读和写总是有MSB的位7。在主机模式,该位的改变将
中止发送的进行并强迫SPI 进入闲置状态。
0: 传送最低位数据
1: 传送最高位数据
bit4 MSTR 主机模式选择位:习惯于接一个由开漏设备驱动的外部上拉电阻。
0:从机模式
1:主机模式
bit3 CPOL 时钟极性位:
当时钟极性位清零并且数据没有在传送,当CPOL 置位,SCK 为高,
主机的SCK 脚有一个稳定的低值状态。
bit2 CPHA 时钟相位位:
时钟相位位, 和CPOL 一起控制主机和从机之间的时钟数据关系,
CPHA 位选择两个不同时中协议中的一个。
bit1 SPR1 SPI 波特率选择位1:
这些位指定SPI 波特率
bit0 SPR0 SPI 波特率选择位0:
这些位指定SPI 波特率
--------------------------------------------------------------------------*/
SPSR=0x00;
/*-----------------------------------------------------------------------
7 SPIF SPI 中断完成标志:
在这个设备和外部设备数据传送完成之后或者新的数据已经收到并且复制到SPDR中,
SPIF 置位。如果SPIF 为高,且ESPI置位,将产生一个串行外围设备中断,SPIF 由软
件清零。
6 WCOL 写冲突位:WCOL位由软件清零
0: 无写冲突
1: 写冲突
5 SPOVF SPI 过载标志:
当在先前收到的字符从SPDR 读出前收到一个新的字符,SPIOVF 置位。一旦该位置位,
SPDR将不能接受新的数据。在写新的数据前必须将其清零。该位由软件清零。
0: 没有过载
1: 过载
4 MODF SPI 模式错误中断状态标志:
由软件写零清除该位
0:无模式故障
1: 模式故障
3 DRSS 从机数据寄存器选择
查阅上面寄存器SPCR 中的表格
2~0 - 保留
---------------------------------------------------------------------*/
AUXR1=0x00; //ADC Enable
/*-----------------------------------------------------------------
AUXR1//reset:00000000b
bit7 KBF 键盘中断标志:
1: 当引脚变低键盘中断功能被允许时,相应的管脚变低后。必须由软件清’0’.
bit6 BOD 欠压检测:
0: 允许欠压检测功能.
1: 禁止欠压检测功能,节省电源.
bit5 BOI 欠压中断:
0: 禁止欠压检测中断功能.
1: 禁止欠压检测引起复位,允许欠压检测功能中断.
bit4 LPBOV 电源欠压检测控制:
0: 当BOD 被允许,无论在正常模式还是在掉店模式,欠压检测功能一直处于打开状态。
1: 当BOD被允许, 当MCU进入掉点模式,BOD 允许内部RC振荡器 (2MHz~0.5MHZ) ,
在1/16 的定时时间内关闭欠压检测电路。
bit3 SRST 软件复位:
1:硬件复位芯片。
bit2 ADCEN
0: 禁止 ADC 电路.
1: 允许ADC 电路.
bit1 RCCLK
0:用CPU 时钟作为ADC 的时钟。
1:用内部RC 时钟作为ADC的时钟。
bit0 DPS Dual 数据 指针 选择
0:选择标准8051 的DPTR.
1:选择DPTR1
--------------------------------------------------*/
// ADCCON=0x07; //select ADC7(P2.4) use for KEY input
IE= 0x82; //EA,EADC,EBO,ES,ET1,EX1,ET0,EX0
EIE =0x00;
/*----------------------------------------------
Interrupt Enable 1 EIE/reset:00000X0Xb
7 ECPTF
0:关闭捕获中断
1:使能捕获中断.
6 ET2
0:关闭定时器2 中断
1:使能定时器2 中断
5 EPWM
0: 当PWM向下计数溢出时,禁止PWM 中断。
1: 当PWM向下计数溢出时,允许PWM 中断。
4 EWDI
0: 禁止看门狗定时器中断.
1: 允许看门狗定时器中断.
3 ESPI
0: 禁止SPI 中断.
1: 允许SPI 中断.
2 - 保留
1 EKB
0: 禁止键盘中断.
1: 允许键盘中断.
0 - 保留
------------------------------------------------*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -