一,微型计算机的结构
微型计算机的模型:
1. 中央处理器(CPU)的组成
运算器 + 控制器
1.1 运算器
- 算术逻辑单元(ALU)
- 累加寄存器(A)
- 寄存器组
- 标志寄存器(F)
1.2 控制器
- 程序控制器(PC)
- 指令寄存器(IR)
- 指令译码器(ID)
- 微操作信号发生器(MOSG)
- 地址寄存器(AR)
- 数据寄存器(DR)
2. 存储器
3.工作过程
二,单片机的基本结构
2.1 IAP15W4K58S4 的基本组成:
2.2 IAP15W4K58S4 的主要性能:
- 增强型 8051 内核
- 58KB Flash 程序存储器
- 4096B 的 SRAM,相当于计算机的内存,可用于保存程序中所用的变量
- 5 个 16位 可自动重装载的定时/计数器(T0,T1,T2,T3,T4)
- 62 根 I/O 口线
- 4 个 全双工异步串行口(UART)
- 1 个 高速同步通信端口(SPI)
- 中断控制系统。5路外部中断,掉电模式可由外部中断低电平触发中断方式
- 8 通道10位高速 ADC
- 6 通道 PWM 和 2通道可编程计数器阵列 (CCP)
- 内部可靠上电复位和硬件看门狗
- 内部集成高精度R/C时钟,常温下可省去外部晶振威廉希尔官方网站
- 具有在 系统可编程/在应用可编程功能(ISP/IAP),无需专用编程器
- 多种封装行形式
2.3 IAP15W4K58S4 的引脚:
DIP40 封装形式
(1)电源和复位引脚
- VCC:接电源 +5V ,IAP15W4K58S4 的工作电压2.5V~5V
- GND:接地
- RST:复位
(2)外接晶体引脚
晶体振荡器M的频率可在 4~48 MHZ 之间选择,典型值 11.0592 MHZ(设计单片机通信系统时,使用这个频率的晶振可以准确的得到9600bit/s,和 1920 bit/s),电容C1,C2 对时钟频率有微调作用,可在5~100PF 之间选择,典型值47pF。
(3)控制和复位引脚
- ALE (与P4.5复用)
当访问外部存储器或者外部扩展的并行I/O口时,ALE(允许地址锁存)的输出用于锁存地址的低位字节。
- RST(与P5.4复用)
当振荡器运行时,在此引脚上出现两个 机器周期的高电平将使单片机复位(单片机内部集成复位威廉希尔官方网站
),该端口默认设为I/O口。
如果需要单片机接上电源就可以复位,则需要使用上电复位威廉希尔官方网站
:
(4)输入/输出(I/O)引脚
IAP15W4K58S4单片机最多有62 根 I/O 口线
P0口(8根):P0.0,P0.1,P0.2,P0.3,P0.4,P0.5,P0.6,P0.7
P1口(8根):P1.0,P1.1,P1.2,P1.3,P1.4,P1.5,P1.6,P1.7
P2口(8根):P2.0,P2.1,P2.2,P2.3,P2.4,P2.5,P2.6,P2.7
P3口(8根):P3.0,P3.1,P3.2,P3.3,P3.4,P3.5,P3.6,P3.7
P4口(8根):P4.0,P4.1,P4.2,P4.3,P4.4,P4.5,P4.6,P4.7
P5口(6根):P5.0,P5.1,P5.2,P5.3,P5.4,P5.5
P6口(8根):P6.0,P6.1,P6.2,P6.3,P6.4,P6.5,P6.6,P6.7
P7口(8根):P7.0,P7.1,P7.2,P7.3,P7.4,P7.5,P7.6,P7.7
(黄色部分只有 LQFP64 封装的IAP15W4K58S4单片机有)
- 这些I/O 口线可设置成 四种模式:
- 准双向口/弱上拉
- 推挽/强上拉
- 输入/高阻
- 开漏模式
- 复位后:准双向口/弱上拉模式
- 每根I/O口线驱动能力均可达到 20mA,但整个芯片最大不得超过 100mA。
- 许多 I/O 口线复用
2.4 存储空间
IAP15W4K58S4 存储空间主要特点:程序存储器和数据存储器的寻址空间是分开的。
片内集成3个物理上相互独立的存储器空间:
- 程序 Flash 存储器(没用作程序存储器的 Flash 存储器可以用做 EEPROM 使用)
- 内部数据存储器
- 拓展数据存储器
2.4.1 程序Flash存储器
- 用于存放 用户程序,数据和表格等信息。
- 58KB —— 0000H~E7FFH
- 复位后,PC 内容为 0000H
- 在程序Flash存储器中有中断地址区,这些特殊的内存单元是中断服务程序的入口地址(中断向量)。
2.4.2 内部数据存储器
即 内部RAM ,共256个单元,通常分为两部分:低128单元(00H~7FH),高128单元(80H~FFH)
(1)内部数据存储器低128单元
[tr]地址范围说明[/tr]
30H~7FH | 数据缓冲区(供用户使用的一般RAM区) |
20H~2FH | 位寻址区(00H~7FH)(也可字节寻址) |
18H~1FH | 工作寄存器3区(R7~R0) |
10H~17H | 工作寄存器2区(R7~R0) |
08H~0FH | 工作寄存器1区(R7~R0) |
00H~07H | 工作寄存器0区(R7~R0) |
- 工作寄存器,也叫通用寄存器。
任意时刻,CPU只能使用其中一组寄存器,正在使用的寄存器组称为“当前寄存器组”,由程序状态字寄存器PSW中的RS1,RS0位的状态组合决定。
- 位寻址区,可位寻址?…
- 用户RAM区,可自由使用
(1)内部数据存储器高128单元和特殊功能寄存器(专用寄存器)
对IAP15W4K58S4来说,80H~FFH既是高128单元,又是特殊功能寄存器的地址,地址空间重叠,但物理上是独立的,用不同的寻址方式加以区分:
- 高128字节的RAM区使用间接寻址访问(一般用于开辟堆栈)
- 特殊功能寄存器使用直接寻址访问
特殊功能寄存器(专用寄存器SFR)
- ① 程序计数器(PC),没有地址,一般不计作专用寄存器
- ② 累加器(ACC)
- ③ B寄存器
- ④ 程序状态字(PSW) [tr]SW位地址D7HD6HD5HD4HD3HD2HD1HD0H[/tr]
- CY(PSW.7)——进位标志位
- AC(PSW.6)——辅助进位标志位
- F0(PSW.5)——用户标志位
- RS1和RS0(PSW.3,PSW.4)——当前寄存器组选择位
- OV(PSW.2)——溢出标志位
- F1(PSW.1)——用户标志位
- P(PSW.0)——奇偶标志位
- ⑤ 数据指针(DPTR)
- ⑥ 堆栈指针(SP)
专用寄存器的字节地址和位地址
特殊功能寄存器中,直接地址可被8整除的寄存器也可以进行位寻址(也可字节寻址)
2.5 并行输入/输出口
2.5.1 IAP15W4K58S4单片机的I/O口
…
2.5.2 IAP15W4K58S4单片机的I/O口的工作模式
每个口的工作模式由 PnM0 和 PnM1 (n=1,2,3,4,5)的相应位控制
[tr]PnM1[7:0]PnM0[7:0]I/O口模式[/tr]
0 | 0 | 准双向口(传统8051单片机I/O口模式),灌电流可达20mA,拉电流为270μA,由于制造误差,实际为270uA~150uA |
0 | 1 | 推挽输入输出(强上拉输出,可达20mA,要加限流电阻,尽量少用) |
1 | 0 | 仅为输入(高阻) |
1 | 1 | 开漏(Open Drain),内部上拉电阻断开,要外加上拉电阻 |
例:P1.7为开漏模式,P1.6为强推挽输入输出模式,P1.4,P1.3,P1.2,P1.1和P1.0为弱上拉模式:
P1M1 = 0xa0; //0xa0=10100000BP1M0 = 0xc0; //0xc0=11000000B IAP15W4K58S4单片机的每个I/O口:
- 在弱上拉时都能承受20mA的灌电流(最好还是使用限流电阻,如1KΩ)
- 在强推挽输出时都能输出20mA的拉电流(也要加限流电阻)。
- 整个芯片的工作电流推荐不要超过90mA。即从MCU-Vcc流入的电流不超过90mA,从MCU-GND流出的电流不超过90mA,整体流入/流出电流都不能超过90mA。
2.5.2 IAP15W4K58S4单片机的I/O口的结构:
(1)准双向口工作模式的结构
(2)推挽输出工作模式的结构
(3)仅为输入(高阻)工作模式的结构
(4)开漏输出工作模式的结构
2.6 时钟威廉希尔官方网站
与复位威廉希尔官方网站
2.6.1 时钟威廉希尔官方网站
与时序…
…
2.6.2 单片机的复位…
…
2.7 IAP15W4K58S4 的时钟(系统时钟)
主时钟可以是内部 R/C 时钟,也可以是外部输入的时钟或外部晶振振荡产生的时钟。
系统时钟是指对主时钟进行分频后CPU,串口,SPI,定时器,CCP/PWM/PCA,ADC的实际工作时钟,用 SYSCLK 表示。
分频相关寄存器:
[tr]寄存器地址D7D6D5D4D3D2D1D0[/tr]
CLK_DIV | 97H | SYSCKO_S1 | SYSCKO_S0 | ADRJ | TX_RX | SYSCLKO_2 | CLKS2 | CLKS1 | CLKS0 |
INT_CLKO | 8FH | - | EX4 | EX3 | EX2 | SYSCKO_S2 | T2CLKO | T1CLKO | T0CLKO |
分频关系:
[tr]CLKS2CLKS1CLKS0系统时钟和主时钟的分频关系[/tr]
0 | 0 | 0 | 系统时钟频率 = 主时钟频率,不分频 |
0 | 0 | 1 | 系统时钟频率 = 主时钟频率/2 |
0 | 1 | 0 | 系统时钟频率 = 主时钟频率/4 |
0 | 1 | 1 | 系统时钟频率 = 主时钟频率/8 |
1 | 0 | 0 | 系统时钟频率 = 主时钟频率/16 |
1 | 0 | 1 | 系统时钟频率 = 主时钟频率/32 |
1 | 1 | 0 | 系统时钟频率 = 主时钟频率/64 |
1 | 1 | 1 | 系统时钟频率 = 主时钟频率/128 |
系统时钟对外输出:
[tr]SYSCKO_S2SYSCKO_S1SYSCKO_S0主时钟的输出频率[/tr]
0 | 0 | 0 | 系统时钟不对外输出 |
0 | 0 | 1 | 输出时钟频率=系统时钟频率 |
0 | 1 | 0 | 输出时钟频率=系统时钟频率/2 |
0 | 1 | 1 | 输出时钟频率=系统时钟频率/4 |
1 | 0 | 0 | 输出时钟频率=系统时钟频率/16 |
注意:??? 串口部分 CLK_DIV 和 定时器章节的 主时钟输出 CLK_DIV, INT_CLKO不一致。
三,Keil C51
1. Keil C51 拓展关键字
bit:位变量声明,声明一个位变量或位类型的函数
所有bit类型的变量都被定位在8050片内RAM 的可位寻址区(20H~2FH),共128位。
所以,某范围内最多声明128个 bit 变量
***it:位变量声明,声明一个可位寻址变量
RAM 中的可位寻址位,或,特殊寄存器中的可寻址位
***it flag0=flag^0;//flag的第0位 sfr:特殊功能寄存器声明,声明一个特殊功能寄存器(8位)
sfr16:特殊功能寄存器声明,声明一个16位的特殊功能寄存器
包含标准8051单片机所有特殊功能寄存器和他们位定义的头文件 reg51.h 。
stc15.h 包含了标准8051单片机寄存器的定义,编程时只需包含这个。
data:存储器类型说明,直接寻址的8051内部数据存储器
bdata:存储器类型说明,可位寻址的8051内部数据存储器
idata:存储器类型说明,间接寻址的8051内部数据存储器
pdata:存储器类型说明,“分页”寻址的8051外部数据存储器
xdata:存储器类型说明,8051外部数据存储器
code:存储器类型说明,8051程序存储器
interrupt:中断函数声明,定义一个中断函数
reentrant:可重入函数声明,定义一个可重入函数
using:寄存器组定义,指定使用8050的工作寄存器的某一组
2.函数
2.1 中断函数
void 函数名(void) interrupt 中断号 [using n]//n为工作寄存器组(共4个),[]表示可省略{ } //---------各个子函数的声明-----------void delay(long delaytime){ while(delaytime>0) delaytime--; //子函数的实现代码}//---------各个中断函数的实现----------void INT0_ISR(void) interrupt 0 //外部中断0服务子函数{ //根据需要填入程序代码}void INT1_ISR(void) interrupt 2 //外部中断1服务子函数{ //根据需要填入程序代码}void INT2_ISR(void) interrupt 10 //外部中断2服务子函数{ //根据需要填入程序代码}void INT3_ISR(void) interrupt 11 //外部中断3服务子函数{ //根据需要填入程序代码}void INT4_ISR(void) interrupt 16 //外部中断4服务子函数{ //根据需要填入程序代码}void T0_ISR(void) interrupt 1 //定时器0中断服务子函数{ //根据需要填入程序代码}void T1_ISR(void) interrupt 3 //定时器1中断服务子函数{ //根据需要填入程序代码}void T2_ISR(void) interrupt 12 //定时器2中断服务子函数{ //根据需要填入程序代码}void T3_ISR(void) interrupt 19 //定时器3中断服务子函数{ //根据需要填入程序代码}void T4_ISR(void) interrupt 20 //定时器4中断服务子函数{ //根据需要填入程序代码}void UART1_ISR(void) interrupt 4 //串口1中断服务子函数{ //根据需要填入程序代码,注意中断请求标志的清零}void UART2_ISR (void) interrupt 8 //串口2中断子函数{ //根据需要填入程序代码,注意中断请求标志的清0}void UART3_ISR (void) interrupt 17 //串口3中断子函数{ //根据需要填入程序代码,注意中断请求标志的清0}void UART4_ISR (void) interrupt 18 //串口4中断子函数{ //根据需要填入程序代码,注意中断请求标志的清0}void SPI_ISR (void) interrupt 9 //SPI中断子函数{ //根据需要填入程序代码,注意中断请求标志的清零}void ADC_ISR (void) interrupt 5 //ADC中断服务子函数{ //根据需要填入程序代码,注意中断请求标志的清零}void LVD_ISR (void) interrupt 6 //低电压检测中断子函数{ //根据需要填入程序代码,注意中断请求标志的清零}void COMP_ISR (void) interrupt 21 //比较器模块中断服务子函数{ //根据需要填入程序代码,注意中断请求标志的清0}void PCA_ISR (void) interrupt 7 //PCA中断子函数{ //根据需要填入程序代码,注意中断请求标志的清零}void PWM_ISR (void) interrupt 22 //PWM模块中断服务子函数{ //根据需要填入程序代码,注意中断请求标志的清0}void PWMFLT_ISR (void) interrupt 23 //PWM异常检测模块中断服务子函数{ //根据需要填入程序代码,注意中断请求标志的清0} 2.2 指定存储模式
small ,compact,large
void fun1(void) small{} 2.3 函数的重入
不可重入的函数,在运行过程中不可被中断
解决函数重入问题:
① 只允许主程序或中断之一调用该函数
#pragma disable ② 说明该函数可重入
(模拟堆栈)
void func (...) reentrant; 注意:
- 通常中断程序使用与主程序不同的工作寄存器组。
- 对可重入函数,在其前面加上开关:#pragma noaregs,以禁止编译器使用绝对寄存器寻址,可生成不依赖于寄存器组的代码。
2.4 库函数
三,中断
3.1 中断源
中断源是指能发出中断请求,引起中断的装置或事件。
IAP15W4K58S4单片机提供21个中断请求源:
- 5个外部中断请求(INT0,INT1…)
- 5个片内定时/计数器溢出中断请求
- 4个片内异步串行口(UART)中断请求
- 1个ADC中断
- 1个低电压检测中断
- 1个PCA中断
- 1个SPI中断
- 1个比较器中断
- 1个PWM中断以及1个PWM异常检测中断。
复位后禁止一切中断。禁止由两级控制组成
3.2 中断结构:
中断总控制
复位后禁止一切中断。禁止由两级控制组成。总控制由IE寄存器最高位EA控制
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
IE | A8H | EA | ELVD | EADC | ES | ET1 | EX1 | ET0 | EX0 | 00000000B |
EA = 1 则总中断允许,还需要看个别中断源的分控制。
3.3 外部中断和定时器中断
3.3.1 中断请求标志
外部中断和定时器中断的请求标志在 定时/计数器 T0,T1 的控制寄存器 TCON 中:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
TCON | 88H | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 | 00000000B |
------外部中断0/1-------
① IT0/1:外部中断 INT0/1 触发方式控制位,可由软件置0/1。
- 0:上升沿和下降沿均可触发外部中断,触发时置位 IE0/1。
- 1:下降沿触发方式,触发时置位 IE0/1。
② IE0/1:外部中断 INT0/1 请求标志。触发外部中断0后使该位位1,以此向 CPU 请求中断。进入中断后硬件自动置0。
------定时/计数器0/1-------
① TR0/1:定时/计数器 T0/1 启动/停止 控制位。
② TF0/1:定时/计数器 T0/1 的溢出中断标志。进入中断后硬件自动置0,也可软件清0。
注意:
- 外部中断0和外部中断1还可以用于将单片机从掉电模式唤醒。
- 外部中断2/3/4 只能下降沿触发,其中断请求标志位对用户不可见。当相应的中断服务程序执行后或EXn=0(n=2,3,4),这些中断请求标志位会自动地被清0。外部中断2/3/4也可以用于将单片机从掉电模式唤醒。
- 定时器2/3/4 的中断请求标志位对用户不可见。当相应的中断服务程序执行后或ET2=0/ET3=0/ET4=0,中断请求标志位会自动地被清0。
3.3.2 中断允许位
EA = 1 且:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
IE | A8H | EA | ELVD | EADC | ES | ET1 | EX1 | ET0 | EX0 | 00000000B |
IE2 | AFH | - | ET4 | ET3 | ES4 | ES3 | ET2 | ESPI | ES2 | X0000000B |
INT_CLKO | 8FH | - | EX4 | EX3 | EX2 | - | T2CLKO | T1CLKO | T0CLKO | X000X000B |
ET1:定时器1中断允许控制位
EX1:外部中断 INT1中断允许控制位
ET0:定时器0中断允许控制位
EX0:外部中断 INT0中断允许控制位
ET4:定时器4中断允许控制位
ET3:定时器3中断允许控制位
ET2:定时器2中断允许控制位
EX4:外部中断 INT4中断允许控制位
EX3:外部中断 INT3中断允许控制位
3.4 串口的中断
3.4.1 中断请求标志
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
SCON | 98H | SM0/FE | SM1 | SM2 | REN | TB8 | RB8 | TI | RI | 00000000B |
S2CON | 9AH | S2SM0 | - | S2SM2 | S2REN | S2TB8 | S2RB8 | S2TI | S2RI | 0X000000B |
S3CON | ACH | S3SM0 | S3ST3 | S3SM2 | S3REN | S3TB8 | S3RB8 | S3TI | S3RI | 0X000000B |
S4CON | 84H | S4SM0 | S4ST4 | S4SM2 | S4REN | S4TB8 | S4RB8 | S4TI | S4RI | 0X000000B |
------串口1/2/3/4控制寄存器 (S2/3/4)SCON 中的标志位-------
① (S2/3/4)RI:串口1/2/3/4接收中断标志。(接收完毕后置1申请中断),也可用于查询。
② (S2/3/4)TI:串口1/2/3/4发送中断标志。(发送完毕后置1申请中断),也可用于查询。
注意:
- 这些中断请求标志都不能自动清0,需中断程序中软件清0。
- 接收和发送中断共用一个中断入口地址,故需软件查询是哪种中断。
- 其余控制位详见 “串口通信”。
3.4.2 中断允许位
EA = 1 且:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
IE | A8H | EA | ELVD | EADC | ES | ET1 | EX1 | ET0 | EX0 | 00000000B |
IE2 | AFH | - | ET4 | ET3 | ES4 | ES3 | ET2 | ESPI | ES2 | X0000000B |
ES:串口1中断允许控制位
ES4:串口4中断允许控制位
ES3:串口3中断允许控制位
ES2:串口2中断允许控制位
3.5 低电压检测中断
3.5.1 中断请求标志
电源控制寄存器 PCON:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
PCON | 87H | SMOD | SMOD0 | LVDF | POF | GF1 | GF0 | FD | IDL | 00110000B |
LVDF:是低电压检测标志位,同事也是低电压检测中断请求标志位。
在正常工作和空闲工作状态时,内部工作电压 Vcc 低于低电压检测门槛电压时 LVDF 自动置1,不管低电压检测中断是否被允许。该位只能软件清0,若清0后还是低于门槛电压,该位又被置1。
3.5.2 中断允许位
EA = 1 且:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
IE | A8H | EA | ELVD | EADC | ES | ET1 | EX1 | ET0 | EX0 | 00000000B |
ELVD:低电压检测允许位。
进入掉电工作状态前,若该位=0,则低电压检测威廉希尔官方网站
不工作。若该位=1,则低于门槛电压后产生低电压检测中断并将MCU 从掉电状态唤醒。
3.6 PCA 的中断
3.6.1 中断请求标志
PCA控制寄存器 CCON :
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
CCON | D8H | CF | CR | - | - | - | - | CCF1 | CCF0 | 00XXXX00B |
① CF:PCA 计数器溢出标志位。
- 当 ECF 置1时,CF标志可用来产生中断。
- 可通过软件/硬件置1,但只能软件清0。
② CCF1/CCF0:PCA 个个模块的中断标志。
- 硬件置1,只能软件清0。
- 中断服务程序中,判断哪个模块产生中断。
3.6.2 中断允许
EA = 1 且:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
CCAPM0 | DAH | - | ECOM0 | CAPP0 | CAPN0 | MAT0 | TOG0 | PWM0 | ECCF0 | X0000000B |
CCAPM1 | DBH | - | ECOM1 | CAPP1 | CAPN1 | MAT1 | TOG1 | PWM1 | ECCF1 | X0000000B |
CMOD | D9H | CIDL | - | - | - | CPS2 | CPS1 | CPS0 | ECF | 0XXX0000B |
ECCFn(n=0,1):使能 CCFn 中断。
ECF:PCA 计数器溢出中断允许控制位。
3.7 SPI 的中断
3.7.1 中断请求标志
SPI 状态寄存器SPSTAT:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
SPSTAT | CDH | SPIF | WCOL | - | - | - | - | - | - | 00XXXXXXB |
SPIF:SPI 传输完成标志。
- 一次传输完成时,SPIF 被置位。
- ESPI=1,EA=1 时,SPIF 置位将产生中断。
- SPI 处于主模式且 SSIG=0 时,若SS 为输入并被驱动为低电平,SPIF 也将置位,表示“模式改变”。
- 需要软件清 0 。
其余位详见“数据通信”。
3.7.2 中断允许
EA = 1 且:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
IE2 | AFH | - | ET4 | ET3 | ES4 | ES3 | ET2 | ESPI | ES2 | X0000000B |
ESPI:SPI 中断允许控制位
3.8 ADC 的中断
3.8.1 中断请求标志
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
ADC_CONTR | BCH | ADC_POWER | SPEED1 | SPEED0 | ASC_FLAG | ADC_START | CHS2 | CHS1 | CHS0 | 00000000B |
ADC_FLAG:A/D 转换结束标志位。
- A/D 转换完成后,ADC_FLAG=1.
- 若允许A/D 转换中断(EADC=1,EA=1),将产生中断。
- 也可软件查询是否转换完成。
- 无论是否中断一定要记得 软件清 0。
3.8.2 中断允许
EA = 1 且:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
IE | A8H | EA | ELVD | EADC | ES | ET1 | EX1 | ET0 | EX0 | 00000000B |
EADC:ADC中断允许控制位。
3.9 PWM 的中断
3.9.1 中断请求标志
PWM 中断标志寄存器 PWMIF 和 PWM 外部异常控制寄存器 PWMFDCR:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
PWMIF | F6H | - | CBIF | C7IF | C6IF | C5IF | C4IF | C3IF | C2IF | X0000000B |
PWMFDCR | F7H | - | - | ENFD | FLTFLIO | EFDI | FDCMP | FDIO | FDIF | XX000000B |
① CBIF:PWM 计数器回0 中断标志位。PWM 计数器回0时硬件置1,申请中断。
② CnIF(n=2~7):第 n 通道的PWM 中断标志位。PWM 发生翻转时硬件置1,申请中断。
③ FDIF:PWM异常检测中断标志。
注意:
3.9.2 中断允许
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
PWMCR | F5H | ENPWM | ECBI | ENC7O | ENC6O | ENC6O | ENC6O | ENC6O | ENC6O | 00000000B |
PWMFDCR | F7H | - | - | ENFD | FLTFLIO | EFDI | FDCMP | FDIO | FDIF | XX000000B |
ECBI:PWM 计数器回 0 中断允许控制位。
EFDI:PWM 异常检测中断允许控制位。
3.10 比较器的中断
3.10.1 中断请求标志
比较控制寄存器 CMPCR1:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
CMPCR1 | E6H | CMPEN | CMPIF | PIE | NIE | PIS | NIS | CMPOE | CMPRES | 00000000B |
CMPIF:比较器中断标志。
- CMPIF=(CMPIF_p||CMPIF_n)
- CMPIF_p:比较器上升沿中断标志,若允许上升沿中断允许位 PIE=1,则申请中断。
- CMPIF_n:比较器下降沿中断标志,若允许下降沿中断允许位 NIE=1,则申请中断。
- 对 CMPIF 写0 后,CMPIF_p 和 CMPIF_n 自动置0
- 需软件清 0。
3.10.2 中断允许
PIE:比较器上升沿中断允许位。
NIE:比较器下降沿中断允许位。
3.11 优先级
中断优先级寄存器:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
IP | B8H | PPCA | PLVD | PADC | PS | PT1 | PX1 | PT0 | PX0 | 00000000B |
IP2 | B5HHH | - | - | - | - | PPWMFD | PPWM | PSPI | PS2 | XXXX0000B |
置1 为高优先级,0为低。
PPCA:PCA
PPLVD:低电压检测
PADC:ADC
PS:串口1
PT1/0:定时器1/0
PX1/0:外部中断 INT1/0
PPWMFD:PWM 异常检测
PPWM:PWM
PSPI:SPI
PS2:串口2
还存在着默认优先级(辅助优先级),即,同时申请中断时,中断号小的优先:
中断号查询
一,微型计算机的结构
微型计算机的模型:
1. 中央处理器(CPU)的组成
运算器 + 控制器
1.1 运算器
- 算术逻辑单元(ALU)
- 累加寄存器(A)
- 寄存器组
- 标志寄存器(F)
1.2 控制器
- 程序控制器(PC)
- 指令寄存器(IR)
- 指令译码器(ID)
- 微操作信号发生器(MOSG)
- 地址寄存器(AR)
- 数据寄存器(DR)
2. 存储器
3.工作过程
二,单片机的基本结构
2.1 IAP15W4K58S4 的基本组成:
2.2 IAP15W4K58S4 的主要性能:
- 增强型 8051 内核
- 58KB Flash 程序存储器
- 4096B 的 SRAM,相当于计算机的内存,可用于保存程序中所用的变量
- 5 个 16位 可自动重装载的定时/计数器(T0,T1,T2,T3,T4)
- 62 根 I/O 口线
- 4 个 全双工异步串行口(UART)
- 1 个 高速同步通信端口(SPI)
- 中断控制系统。5路外部中断,掉电模式可由外部中断低电平触发中断方式
- 8 通道10位高速 ADC
- 6 通道 PWM 和 2通道可编程计数器阵列 (CCP)
- 内部可靠上电复位和硬件看门狗
- 内部集成高精度R/C时钟,常温下可省去外部晶振威廉希尔官方网站
- 具有在 系统可编程/在应用可编程功能(ISP/IAP),无需专用编程器
- 多种封装行形式
2.3 IAP15W4K58S4 的引脚:
DIP40 封装形式
(1)电源和复位引脚
- VCC:接电源 +5V ,IAP15W4K58S4 的工作电压2.5V~5V
- GND:接地
- RST:复位
(2)外接晶体引脚
晶体振荡器M的频率可在 4~48 MHZ 之间选择,典型值 11.0592 MHZ(设计单片机通信系统时,使用这个频率的晶振可以准确的得到9600bit/s,和 1920 bit/s),电容C1,C2 对时钟频率有微调作用,可在5~100PF 之间选择,典型值47pF。
(3)控制和复位引脚
- ALE (与P4.5复用)
当访问外部存储器或者外部扩展的并行I/O口时,ALE(允许地址锁存)的输出用于锁存地址的低位字节。
- RST(与P5.4复用)
当振荡器运行时,在此引脚上出现两个 机器周期的高电平将使单片机复位(单片机内部集成复位威廉希尔官方网站
),该端口默认设为I/O口。
如果需要单片机接上电源就可以复位,则需要使用上电复位威廉希尔官方网站
:
(4)输入/输出(I/O)引脚
IAP15W4K58S4单片机最多有62 根 I/O 口线
P0口(8根):P0.0,P0.1,P0.2,P0.3,P0.4,P0.5,P0.6,P0.7
P1口(8根):P1.0,P1.1,P1.2,P1.3,P1.4,P1.5,P1.6,P1.7
P2口(8根):P2.0,P2.1,P2.2,P2.3,P2.4,P2.5,P2.6,P2.7
P3口(8根):P3.0,P3.1,P3.2,P3.3,P3.4,P3.5,P3.6,P3.7
P4口(8根):P4.0,P4.1,P4.2,P4.3,P4.4,P4.5,P4.6,P4.7
P5口(6根):P5.0,P5.1,P5.2,P5.3,P5.4,P5.5
P6口(8根):P6.0,P6.1,P6.2,P6.3,P6.4,P6.5,P6.6,P6.7
P7口(8根):P7.0,P7.1,P7.2,P7.3,P7.4,P7.5,P7.6,P7.7
(黄色部分只有 LQFP64 封装的IAP15W4K58S4单片机有)
- 这些I/O 口线可设置成 四种模式:
- 准双向口/弱上拉
- 推挽/强上拉
- 输入/高阻
- 开漏模式
- 复位后:准双向口/弱上拉模式
- 每根I/O口线驱动能力均可达到 20mA,但整个芯片最大不得超过 100mA。
- 许多 I/O 口线复用
2.4 存储空间
IAP15W4K58S4 存储空间主要特点:程序存储器和数据存储器的寻址空间是分开的。
片内集成3个物理上相互独立的存储器空间:
- 程序 Flash 存储器(没用作程序存储器的 Flash 存储器可以用做 EEPROM 使用)
- 内部数据存储器
- 拓展数据存储器
2.4.1 程序Flash存储器
- 用于存放 用户程序,数据和表格等信息。
- 58KB —— 0000H~E7FFH
- 复位后,PC 内容为 0000H
- 在程序Flash存储器中有中断地址区,这些特殊的内存单元是中断服务程序的入口地址(中断向量)。
2.4.2 内部数据存储器
即 内部RAM ,共256个单元,通常分为两部分:低128单元(00H~7FH),高128单元(80H~FFH)
(1)内部数据存储器低128单元
[tr]地址范围说明[/tr]
30H~7FH | 数据缓冲区(供用户使用的一般RAM区) |
20H~2FH | 位寻址区(00H~7FH)(也可字节寻址) |
18H~1FH | 工作寄存器3区(R7~R0) |
10H~17H | 工作寄存器2区(R7~R0) |
08H~0FH | 工作寄存器1区(R7~R0) |
00H~07H | 工作寄存器0区(R7~R0) |
- 工作寄存器,也叫通用寄存器。
任意时刻,CPU只能使用其中一组寄存器,正在使用的寄存器组称为“当前寄存器组”,由程序状态字寄存器PSW中的RS1,RS0位的状态组合决定。
- 位寻址区,可位寻址?…
- 用户RAM区,可自由使用
(1)内部数据存储器高128单元和特殊功能寄存器(专用寄存器)
对IAP15W4K58S4来说,80H~FFH既是高128单元,又是特殊功能寄存器的地址,地址空间重叠,但物理上是独立的,用不同的寻址方式加以区分:
- 高128字节的RAM区使用间接寻址访问(一般用于开辟堆栈)
- 特殊功能寄存器使用直接寻址访问
特殊功能寄存器(专用寄存器SFR)
- ① 程序计数器(PC),没有地址,一般不计作专用寄存器
- ② 累加器(ACC)
- ③ B寄存器
- ④ 程序状态字(PSW) [tr]SW位地址D7HD6HD5HD4HD3HD2HD1HD0H[/tr]
- CY(PSW.7)——进位标志位
- AC(PSW.6)——辅助进位标志位
- F0(PSW.5)——用户标志位
- RS1和RS0(PSW.3,PSW.4)——当前寄存器组选择位
- OV(PSW.2)——溢出标志位
- F1(PSW.1)——用户标志位
- P(PSW.0)——奇偶标志位
- ⑤ 数据指针(DPTR)
- ⑥ 堆栈指针(SP)
专用寄存器的字节地址和位地址
特殊功能寄存器中,直接地址可被8整除的寄存器也可以进行位寻址(也可字节寻址)
2.5 并行输入/输出口
2.5.1 IAP15W4K58S4单片机的I/O口
…
2.5.2 IAP15W4K58S4单片机的I/O口的工作模式
每个口的工作模式由 PnM0 和 PnM1 (n=1,2,3,4,5)的相应位控制
[tr]PnM1[7:0]PnM0[7:0]I/O口模式[/tr]
0 | 0 | 准双向口(传统8051单片机I/O口模式),灌电流可达20mA,拉电流为270μA,由于制造误差,实际为270uA~150uA |
0 | 1 | 推挽输入输出(强上拉输出,可达20mA,要加限流电阻,尽量少用) |
1 | 0 | 仅为输入(高阻) |
1 | 1 | 开漏(Open Drain),内部上拉电阻断开,要外加上拉电阻 |
例:P1.7为开漏模式,P1.6为强推挽输入输出模式,P1.4,P1.3,P1.2,P1.1和P1.0为弱上拉模式:
P1M1 = 0xa0; //0xa0=10100000BP1M0 = 0xc0; //0xc0=11000000B IAP15W4K58S4单片机的每个I/O口:
- 在弱上拉时都能承受20mA的灌电流(最好还是使用限流电阻,如1KΩ)
- 在强推挽输出时都能输出20mA的拉电流(也要加限流电阻)。
- 整个芯片的工作电流推荐不要超过90mA。即从MCU-Vcc流入的电流不超过90mA,从MCU-GND流出的电流不超过90mA,整体流入/流出电流都不能超过90mA。
2.5.2 IAP15W4K58S4单片机的I/O口的结构:
(1)准双向口工作模式的结构
(2)推挽输出工作模式的结构
(3)仅为输入(高阻)工作模式的结构
(4)开漏输出工作模式的结构
2.6 时钟威廉希尔官方网站
与复位威廉希尔官方网站
2.6.1 时钟威廉希尔官方网站
与时序…
…
2.6.2 单片机的复位…
…
2.7 IAP15W4K58S4 的时钟(系统时钟)
主时钟可以是内部 R/C 时钟,也可以是外部输入的时钟或外部晶振振荡产生的时钟。
系统时钟是指对主时钟进行分频后CPU,串口,SPI,定时器,CCP/PWM/PCA,ADC的实际工作时钟,用 SYSCLK 表示。
分频相关寄存器:
[tr]寄存器地址D7D6D5D4D3D2D1D0[/tr]
CLK_DIV | 97H | SYSCKO_S1 | SYSCKO_S0 | ADRJ | TX_RX | SYSCLKO_2 | CLKS2 | CLKS1 | CLKS0 |
INT_CLKO | 8FH | - | EX4 | EX3 | EX2 | SYSCKO_S2 | T2CLKO | T1CLKO | T0CLKO |
分频关系:
[tr]CLKS2CLKS1CLKS0系统时钟和主时钟的分频关系[/tr]
0 | 0 | 0 | 系统时钟频率 = 主时钟频率,不分频 |
0 | 0 | 1 | 系统时钟频率 = 主时钟频率/2 |
0 | 1 | 0 | 系统时钟频率 = 主时钟频率/4 |
0 | 1 | 1 | 系统时钟频率 = 主时钟频率/8 |
1 | 0 | 0 | 系统时钟频率 = 主时钟频率/16 |
1 | 0 | 1 | 系统时钟频率 = 主时钟频率/32 |
1 | 1 | 0 | 系统时钟频率 = 主时钟频率/64 |
1 | 1 | 1 | 系统时钟频率 = 主时钟频率/128 |
系统时钟对外输出:
[tr]SYSCKO_S2SYSCKO_S1SYSCKO_S0主时钟的输出频率[/tr]
0 | 0 | 0 | 系统时钟不对外输出 |
0 | 0 | 1 | 输出时钟频率=系统时钟频率 |
0 | 1 | 0 | 输出时钟频率=系统时钟频率/2 |
0 | 1 | 1 | 输出时钟频率=系统时钟频率/4 |
1 | 0 | 0 | 输出时钟频率=系统时钟频率/16 |
注意:??? 串口部分 CLK_DIV 和 定时器章节的 主时钟输出 CLK_DIV, INT_CLKO不一致。
三,Keil C51
1. Keil C51 拓展关键字
bit:位变量声明,声明一个位变量或位类型的函数
所有bit类型的变量都被定位在8050片内RAM 的可位寻址区(20H~2FH),共128位。
所以,某范围内最多声明128个 bit 变量
***it:位变量声明,声明一个可位寻址变量
RAM 中的可位寻址位,或,特殊寄存器中的可寻址位
***it flag0=flag^0;//flag的第0位 sfr:特殊功能寄存器声明,声明一个特殊功能寄存器(8位)
sfr16:特殊功能寄存器声明,声明一个16位的特殊功能寄存器
包含标准8051单片机所有特殊功能寄存器和他们位定义的头文件 reg51.h 。
stc15.h 包含了标准8051单片机寄存器的定义,编程时只需包含这个。
data:存储器类型说明,直接寻址的8051内部数据存储器
bdata:存储器类型说明,可位寻址的8051内部数据存储器
idata:存储器类型说明,间接寻址的8051内部数据存储器
pdata:存储器类型说明,“分页”寻址的8051外部数据存储器
xdata:存储器类型说明,8051外部数据存储器
code:存储器类型说明,8051程序存储器
interrupt:中断函数声明,定义一个中断函数
reentrant:可重入函数声明,定义一个可重入函数
using:寄存器组定义,指定使用8050的工作寄存器的某一组
2.函数
2.1 中断函数
void 函数名(void) interrupt 中断号 [using n]//n为工作寄存器组(共4个),[]表示可省略{ } //---------各个子函数的声明-----------void delay(long delaytime){ while(delaytime>0) delaytime--; //子函数的实现代码}//---------各个中断函数的实现----------void INT0_ISR(void) interrupt 0 //外部中断0服务子函数{ //根据需要填入程序代码}void INT1_ISR(void) interrupt 2 //外部中断1服务子函数{ //根据需要填入程序代码}void INT2_ISR(void) interrupt 10 //外部中断2服务子函数{ //根据需要填入程序代码}void INT3_ISR(void) interrupt 11 //外部中断3服务子函数{ //根据需要填入程序代码}void INT4_ISR(void) interrupt 16 //外部中断4服务子函数{ //根据需要填入程序代码}void T0_ISR(void) interrupt 1 //定时器0中断服务子函数{ //根据需要填入程序代码}void T1_ISR(void) interrupt 3 //定时器1中断服务子函数{ //根据需要填入程序代码}void T2_ISR(void) interrupt 12 //定时器2中断服务子函数{ //根据需要填入程序代码}void T3_ISR(void) interrupt 19 //定时器3中断服务子函数{ //根据需要填入程序代码}void T4_ISR(void) interrupt 20 //定时器4中断服务子函数{ //根据需要填入程序代码}void UART1_ISR(void) interrupt 4 //串口1中断服务子函数{ //根据需要填入程序代码,注意中断请求标志的清零}void UART2_ISR (void) interrupt 8 //串口2中断子函数{ //根据需要填入程序代码,注意中断请求标志的清0}void UART3_ISR (void) interrupt 17 //串口3中断子函数{ //根据需要填入程序代码,注意中断请求标志的清0}void UART4_ISR (void) interrupt 18 //串口4中断子函数{ //根据需要填入程序代码,注意中断请求标志的清0}void SPI_ISR (void) interrupt 9 //SPI中断子函数{ //根据需要填入程序代码,注意中断请求标志的清零}void ADC_ISR (void) interrupt 5 //ADC中断服务子函数{ //根据需要填入程序代码,注意中断请求标志的清零}void LVD_ISR (void) interrupt 6 //低电压检测中断子函数{ //根据需要填入程序代码,注意中断请求标志的清零}void COMP_ISR (void) interrupt 21 //比较器模块中断服务子函数{ //根据需要填入程序代码,注意中断请求标志的清0}void PCA_ISR (void) interrupt 7 //PCA中断子函数{ //根据需要填入程序代码,注意中断请求标志的清零}void PWM_ISR (void) interrupt 22 //PWM模块中断服务子函数{ //根据需要填入程序代码,注意中断请求标志的清0}void PWMFLT_ISR (void) interrupt 23 //PWM异常检测模块中断服务子函数{ //根据需要填入程序代码,注意中断请求标志的清0} 2.2 指定存储模式
small ,compact,large
void fun1(void) small{} 2.3 函数的重入
不可重入的函数,在运行过程中不可被中断
解决函数重入问题:
① 只允许主程序或中断之一调用该函数
#pragma disable ② 说明该函数可重入
(模拟堆栈)
void func (...) reentrant; 注意:
- 通常中断程序使用与主程序不同的工作寄存器组。
- 对可重入函数,在其前面加上开关:#pragma noaregs,以禁止编译器使用绝对寄存器寻址,可生成不依赖于寄存器组的代码。
2.4 库函数
三,中断
3.1 中断源
中断源是指能发出中断请求,引起中断的装置或事件。
IAP15W4K58S4单片机提供21个中断请求源:
- 5个外部中断请求(INT0,INT1…)
- 5个片内定时/计数器溢出中断请求
- 4个片内异步串行口(UART)中断请求
- 1个ADC中断
- 1个低电压检测中断
- 1个PCA中断
- 1个SPI中断
- 1个比较器中断
- 1个PWM中断以及1个PWM异常检测中断。
复位后禁止一切中断。禁止由两级控制组成
3.2 中断结构:
中断总控制
复位后禁止一切中断。禁止由两级控制组成。总控制由IE寄存器最高位EA控制
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
IE | A8H | EA | ELVD | EADC | ES | ET1 | EX1 | ET0 | EX0 | 00000000B |
EA = 1 则总中断允许,还需要看个别中断源的分控制。
3.3 外部中断和定时器中断
3.3.1 中断请求标志
外部中断和定时器中断的请求标志在 定时/计数器 T0,T1 的控制寄存器 TCON 中:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
TCON | 88H | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 | 00000000B |
------外部中断0/1-------
① IT0/1:外部中断 INT0/1 触发方式控制位,可由软件置0/1。
- 0:上升沿和下降沿均可触发外部中断,触发时置位 IE0/1。
- 1:下降沿触发方式,触发时置位 IE0/1。
② IE0/1:外部中断 INT0/1 请求标志。触发外部中断0后使该位位1,以此向 CPU 请求中断。进入中断后硬件自动置0。
------定时/计数器0/1-------
① TR0/1:定时/计数器 T0/1 启动/停止 控制位。
② TF0/1:定时/计数器 T0/1 的溢出中断标志。进入中断后硬件自动置0,也可软件清0。
注意:
- 外部中断0和外部中断1还可以用于将单片机从掉电模式唤醒。
- 外部中断2/3/4 只能下降沿触发,其中断请求标志位对用户不可见。当相应的中断服务程序执行后或EXn=0(n=2,3,4),这些中断请求标志位会自动地被清0。外部中断2/3/4也可以用于将单片机从掉电模式唤醒。
- 定时器2/3/4 的中断请求标志位对用户不可见。当相应的中断服务程序执行后或ET2=0/ET3=0/ET4=0,中断请求标志位会自动地被清0。
3.3.2 中断允许位
EA = 1 且:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
IE | A8H | EA | ELVD | EADC | ES | ET1 | EX1 | ET0 | EX0 | 00000000B |
IE2 | AFH | - | ET4 | ET3 | ES4 | ES3 | ET2 | ESPI | ES2 | X0000000B |
INT_CLKO | 8FH | - | EX4 | EX3 | EX2 | - | T2CLKO | T1CLKO | T0CLKO | X000X000B |
ET1:定时器1中断允许控制位
EX1:外部中断 INT1中断允许控制位
ET0:定时器0中断允许控制位
EX0:外部中断 INT0中断允许控制位
ET4:定时器4中断允许控制位
ET3:定时器3中断允许控制位
ET2:定时器2中断允许控制位
EX4:外部中断 INT4中断允许控制位
EX3:外部中断 INT3中断允许控制位
3.4 串口的中断
3.4.1 中断请求标志
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
SCON | 98H | SM0/FE | SM1 | SM2 | REN | TB8 | RB8 | TI | RI | 00000000B |
S2CON | 9AH | S2SM0 | - | S2SM2 | S2REN | S2TB8 | S2RB8 | S2TI | S2RI | 0X000000B |
S3CON | ACH | S3SM0 | S3ST3 | S3SM2 | S3REN | S3TB8 | S3RB8 | S3TI | S3RI | 0X000000B |
S4CON | 84H | S4SM0 | S4ST4 | S4SM2 | S4REN | S4TB8 | S4RB8 | S4TI | S4RI | 0X000000B |
------串口1/2/3/4控制寄存器 (S2/3/4)SCON 中的标志位-------
① (S2/3/4)RI:串口1/2/3/4接收中断标志。(接收完毕后置1申请中断),也可用于查询。
② (S2/3/4)TI:串口1/2/3/4发送中断标志。(发送完毕后置1申请中断),也可用于查询。
注意:
- 这些中断请求标志都不能自动清0,需中断程序中软件清0。
- 接收和发送中断共用一个中断入口地址,故需软件查询是哪种中断。
- 其余控制位详见 “串口通信”。
3.4.2 中断允许位
EA = 1 且:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
IE | A8H | EA | ELVD | EADC | ES | ET1 | EX1 | ET0 | EX0 | 00000000B |
IE2 | AFH | - | ET4 | ET3 | ES4 | ES3 | ET2 | ESPI | ES2 | X0000000B |
ES:串口1中断允许控制位
ES4:串口4中断允许控制位
ES3:串口3中断允许控制位
ES2:串口2中断允许控制位
3.5 低电压检测中断
3.5.1 中断请求标志
电源控制寄存器 PCON:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
PCON | 87H | SMOD | SMOD0 | LVDF | POF | GF1 | GF0 | FD | IDL | 00110000B |
LVDF:是低电压检测标志位,同事也是低电压检测中断请求标志位。
在正常工作和空闲工作状态时,内部工作电压 Vcc 低于低电压检测门槛电压时 LVDF 自动置1,不管低电压检测中断是否被允许。该位只能软件清0,若清0后还是低于门槛电压,该位又被置1。
3.5.2 中断允许位
EA = 1 且:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
IE | A8H | EA | ELVD | EADC | ES | ET1 | EX1 | ET0 | EX0 | 00000000B |
ELVD:低电压检测允许位。
进入掉电工作状态前,若该位=0,则低电压检测威廉希尔官方网站
不工作。若该位=1,则低于门槛电压后产生低电压检测中断并将MCU 从掉电状态唤醒。
3.6 PCA 的中断
3.6.1 中断请求标志
PCA控制寄存器 CCON :
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
CCON | D8H | CF | CR | - | - | - | - | CCF1 | CCF0 | 00XXXX00B |
① CF:PCA 计数器溢出标志位。
- 当 ECF 置1时,CF标志可用来产生中断。
- 可通过软件/硬件置1,但只能软件清0。
② CCF1/CCF0:PCA 个个模块的中断标志。
- 硬件置1,只能软件清0。
- 中断服务程序中,判断哪个模块产生中断。
3.6.2 中断允许
EA = 1 且:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
CCAPM0 | DAH | - | ECOM0 | CAPP0 | CAPN0 | MAT0 | TOG0 | PWM0 | ECCF0 | X0000000B |
CCAPM1 | DBH | - | ECOM1 | CAPP1 | CAPN1 | MAT1 | TOG1 | PWM1 | ECCF1 | X0000000B |
CMOD | D9H | CIDL | - | - | - | CPS2 | CPS1 | CPS0 | ECF | 0XXX0000B |
ECCFn(n=0,1):使能 CCFn 中断。
ECF:PCA 计数器溢出中断允许控制位。
3.7 SPI 的中断
3.7.1 中断请求标志
SPI 状态寄存器SPSTAT:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
SPSTAT | CDH | SPIF | WCOL | - | - | - | - | - | - | 00XXXXXXB |
SPIF:SPI 传输完成标志。
- 一次传输完成时,SPIF 被置位。
- ESPI=1,EA=1 时,SPIF 置位将产生中断。
- SPI 处于主模式且 SSIG=0 时,若SS 为输入并被驱动为低电平,SPIF 也将置位,表示“模式改变”。
- 需要软件清 0 。
其余位详见“数据通信”。
3.7.2 中断允许
EA = 1 且:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
IE2 | AFH | - | ET4 | ET3 | ES4 | ES3 | ET2 | ESPI | ES2 | X0000000B |
ESPI:SPI 中断允许控制位
3.8 ADC 的中断
3.8.1 中断请求标志
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
ADC_CONTR | BCH | ADC_POWER | SPEED1 | SPEED0 | ASC_FLAG | ADC_START | CHS2 | CHS1 | CHS0 | 00000000B |
ADC_FLAG:A/D 转换结束标志位。
- A/D 转换完成后,ADC_FLAG=1.
- 若允许A/D 转换中断(EADC=1,EA=1),将产生中断。
- 也可软件查询是否转换完成。
- 无论是否中断一定要记得 软件清 0。
3.8.2 中断允许
EA = 1 且:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
IE | A8H | EA | ELVD | EADC | ES | ET1 | EX1 | ET0 | EX0 | 00000000B |
EADC:ADC中断允许控制位。
3.9 PWM 的中断
3.9.1 中断请求标志
PWM 中断标志寄存器 PWMIF 和 PWM 外部异常控制寄存器 PWMFDCR:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
PWMIF | F6H | - | CBIF | C7IF | C6IF | C5IF | C4IF | C3IF | C2IF | X0000000B |
PWMFDCR | F7H | - | - | ENFD | FLTFLIO | EFDI | FDCMP | FDIO | FDIF | XX000000B |
① CBIF:PWM 计数器回0 中断标志位。PWM 计数器回0时硬件置1,申请中断。
② CnIF(n=2~7):第 n 通道的PWM 中断标志位。PWM 发生翻转时硬件置1,申请中断。
③ FDIF:PWM异常检测中断标志。
注意:
3.9.2 中断允许
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
PWMCR | F5H | ENPWM | ECBI | ENC7O | ENC6O | ENC6O | ENC6O | ENC6O | ENC6O | 00000000B |
PWMFDCR | F7H | - | - | ENFD | FLTFLIO | EFDI | FDCMP | FDIO | FDIF | XX000000B |
ECBI:PWM 计数器回 0 中断允许控制位。
EFDI:PWM 异常检测中断允许控制位。
3.10 比较器的中断
3.10.1 中断请求标志
比较控制寄存器 CMPCR1:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
CMPCR1 | E6H | CMPEN | CMPIF | PIE | NIE | PIS | NIS | CMPOE | CMPRES | 00000000B |
CMPIF:比较器中断标志。
- CMPIF=(CMPIF_p||CMPIF_n)
- CMPIF_p:比较器上升沿中断标志,若允许上升沿中断允许位 PIE=1,则申请中断。
- CMPIF_n:比较器下降沿中断标志,若允许下降沿中断允许位 NIE=1,则申请中断。
- 对 CMPIF 写0 后,CMPIF_p 和 CMPIF_n 自动置0
- 需软件清 0。
3.10.2 中断允许
PIE:比较器上升沿中断允许位。
NIE:比较器下降沿中断允许位。
3.11 优先级
中断优先级寄存器:
[tr]寄存器地址D7D6D5D4D3D2D1D0复位值[/tr]
IP | B8H | PPCA | PLVD | PADC | PS | PT1 | PX1 | PT0 | PX0 | 00000000B |
IP2 | B5HHH | - | - | - | - | PPWMFD | PPWM | PSPI | PS2 | XXXX0000B |
置1 为高优先级,0为低。
PPCA:PCA
PPLVD:低电压检测
PADC:ADC
PS:串口1
PT1/0:定时器1/0
PX1/0:外部中断 INT1/0
PPWMFD:PWM 异常检测
PPWM:PWM
PSPI:SPI
PS2:串口2
还存在着默认优先级(辅助优先级),即,同时申请中断时,中断号小的优先:
中断号查询
举报