(1)“STC”代表的含义是不能在应用中访问程序存储器,但设置了可单独访问的数据 Flash 区域。
(2)F :工作电源为5V。
(3)2k:片内 RAM 的容量是 2K。
(4)60:片内程序存储器容量为60KB。
(5)S2:含有两个串行口。
(1)在8051的内核基础上进行功能扩展与性能改进。
(1)重点注意B0的P:奇偶标志位。
注意:累加器ACC和AC辅助进位标志位不是同一个东西。累加器ACC是一个8bit的寄存器,而AC辅助进位标志位是1bit的存储在PSW中的位。
(1)片内基本RAM分为低128字节和高128字节。
(2)低128字节分为:
<1>4个工作寄存器组,共32字节,00H~1FH。
<2>位寻址区,共16字节,20H~2FH。
<3>通用RAM,共80字节,30H~7FH。
(3)高128字节地址与特殊功能寄存器地址相同,为了区分采用不同的寻址方式。
<1>高128字节RAM只能采用寄存器间接寻址方式。指令为:
MOV A, @Ri ; 从外部RAM读取数据到A
<2>特殊功能寄存器只能直接寻址,指令为:
MOV A,direct;
(1)准双向口、推挽输出、仅输入、开漏模式。
(1)先让端口置为高电平。
(1)能。
(2)根据LED的工作电压、工作电流以及工作电源来进行计算。
R=(Vcc-Vz)/I
(1)不能。
(2)通过特殊功能寄存器AUXR中的EXTRAM进行选择,默认时为0,选择片内扩展RAM,为1时选择片外扩展RAM。
(1)一些简写的含义:
<1>A:累加器ACC,又记为A。注意和程序状态标志寄存器PSW的bit7的AC区分。
<2>B:专门用于乘法和除法运算设置的寄存器,用于存放于乘法和除法运算的操作数和运算结果。
<3>DPTR:数据指针,由DPL和DPH组成,用于存放16位地址,进而堆16位地址的程序存储器和扩展RAM进行访问。
<4>C:程序状态标志寄存器PSW的bit7,进位位CY。
寻址方式 | 寻址空间 |
---|---|
立即寻址 | 程序存储器 |
寄存器寻址 | 工作寄存器组、 A、 B、 DPTR、 C |
直接寻址 | 基本RAM的低128字节RAM、特殊功能寄存器、位寻址区 |
寄存器间接寻址 | 低 128 字节、高128字节RAM 、扩展RAM |
变址寻址 | 程序存储器 |
( 1) 设置一张转移指令表,对应各分支设置一条转移指令,通过转移指令转到各分支程序程序的首地址处;
(2)将转移指令表的首址送给 DPTR,对应分支号在分支表中的偏移地址送给累加器A;
(3)执行 JMP @A+DPTR,首先根据分支号转到该分支在转移指令表的首地址处,通过执行该分支的转移指令转到该分支程序首地址处,即执行该分支程序。
(1)MOVC A,@a+PC:下一指令首址的后 256 字节程序空间;
<1>PC指向下一条指令的首地址
<2>A是一个8bit的累加器,共256个值。
<3>因此这里可访问下一指令首址的后 256 字节程序空间。
(2)MOVC A,@A+DPTR:整个 64K 程序空间。
<1>因为DPTR是数据指针,有16位,可以访问整个64K的程序空间
MOV R0, #30H ; 将立即数30,存入寄存器R0
MOV A, @R0 ; 将地址30H处的5AH,存入累加器A
MOV R1, A ; 将累加器A中的5AH,存入R1
MOV B, R1 ; 将R1中的5AH,存入寄存器B
MOV @R1, P1 ; 读取P1端口的7FH,存入5AH地址处
MOV A, P1 ; 读取P1端口的7FH,存入累加器A
MOV 40H, #20H ; 将立即数20H,存入地址40H处
MOV 30H, 40H ; 将地址40H处的数据20H,存入地址30H处
存储单元 | 内容 |
---|---|
R0 | 30H |
R1 | 5AH |
A | 7FH |
B | 5AH |
P1 | 7FH |
30H | 20H |
40H | 20H |
5AH | 7FH |
MOV A, #30H ; 将立即数30H,存入累加器A
MOV B, #0AFH ; 将立即数0AFH,存入寄存器B
MOV R0, #31H ; 将立即数31H,存入寄存器R0
MOV 30H, #87H ; 将立即数87H,存入地址30H
XCH A, R0 ; 将寄存器A的30H,和寄存器R0的31H,数据交换
XCHD A, @R0 ;将寄存器A的低4位1,和寄存器R0的低四位0,数据交换
XCH A, B ; 寄存器A的30H,和寄存器B的0AFH,数据交换
SWAP A ; 将累加器A的高4位0AH,和低四位0FH,数据交换
存储单元 | 内容 |
---|---|
A | FAH |
B | 30H |
30H | 87H |
R0 | 31H |
MOV SP, #5FH ; 将立即数5FH,存入堆栈指针SP
MOV A, #54H ; 将立即数54H,存入累加器A
MOV B, #78H ; 将立即数78H,存入寄存器B
PUSH ACC ; 将堆栈指针SP自增1,变为60H。累加器A的内容54H,存入60H处
PUSH B ; 将堆栈指针SP自增1,变为61H。寄存器B的内容78H,存入61H处
MOV A, B ; 将寄存器B的内容78H,存入累加器A
MOV B, #00H ;将立即数00H,存入寄存器B
POP ACC ; 将堆栈指针SP内容78H,存入累加器A。堆栈指针SP自减1,变为60H
POP B ; 将堆栈指针SP内容54H,存入寄存器B。堆栈指针SP自减1,变为5FH
存储单元 | 内容 |
---|---|
A | 78H |
B | 54H |
SP | 5FH |
MOV 34H, #10H ; 将立即数10H,存入地址34H
MOV R0, #13H ; 将立即数13H,存入寄存器R0
MOV A, 34H ; 将立即数34H,存入累加器A
ADD A, R0 ; 将寄存器R0内容13H,和累加器A中的内容34H,相加得到47H存入累加器A
MOV R1, #34H ; 将立即数34H,存入寄存器R1
ADD A, @R1 ; 将地址34H的内容10H,和累加器A中的内容47H,相加得到57H存入累加器A
CLR C ; 清除CY位
ADDC A, #60H ; 将立即数60H,和累加器A中的内容25H,相加得到85H存入累加器A
MOV 20H, @R0 ; 将33H地址处的内容20H,存入地址20H处
ADDC A, 20H ; 将20H地址处的内容20H,和累加器A中的内容85H,相加得到A5H存入累加器A
MOV 33H, A ; 将累加器A中的内容A5H存入地址33H处
最终33H 单元的内容为A5H
MOV 20H, #25H ;将立即数25H,存入地址20H处
MOV A, #43H ;将立即数43H,存入累加器A
MOV R0, #20H ;将立即数20H,存入寄存器R0
MOV R2, #4BH ;将立即数4BH,存入寄存器R2
ANL A, R2 ;将寄存器R2的内容4BH(0100 1011B),和累加器A的中内容43H(0100 0011B),相与,得到43H(0100 0011B)存入累加器A
ORL A, @R0 ;将地址20H的内容25H(0010 0101B),和累加器A的中内容43H(0100 0011B),相或,得到67H(0110 0111B)存入累加器A
SWAP A ;将累加器A的高4位6H,与累加器A的低4位7H交换,得到76H存入累加器A
CPL A ;将累加器中的76H(0111 0110B),按位取反得到8AH(1000 1001B)存入累加器A
XRL A, #0FH ;将立即数0FH(0000 1111B),和累加器A中的8AH(1000 1001B),异或得到86H(1000 0110B)存入累加器A
ORL 20H, A ;将累加器A中的86H(1000 0110B),和20H地址处的25H(0010 0101B),相或,得到0A7H(1010 0111B)存入地址20H处
MOV A , R1
MOV R3, A
MOV A , #30H
MOV R0, @A
MOV DPTR , #0100H
MOVX A , @DPTR
MOV 20H , A
MOV DPTR , #0200H
MOVX A , @DPTR
MOV 20H , A
MOV DPTR , #0200H
MOVX A , @DPTR
MOV DPTR , #0030H
MOVX @DPTR , A
MOV DPTR , #2000H
MOVX A , @DPTR
MOV DPTR , #0030H
MOVX @DPTR , A
MOV DPTR , #0200H
MOVX A , @DPTR
MOV DPTR , #0201H
MOVX @DPTR , A
MOV A , 50H
MOV 51H , A
(1)伪指令不会产生机器指令码
(1)EQU可以定义汇编符号,只能先定义后使用。
(2)DATA主要用于定义数据,可以先使用后定义。
(1)
<1>DB:存储字节。
<2>DW:定义存储字。
<3>DS:定义存储空间。
(2)
ORG 2000H ; 程序从2000H地址开始
DS 10 ; 预留10字节空间
DB 20,100 ; 存入20,100
DB 'W','Q' ;存入字符W和Q的ASCII码
(1)程序设计题,所有寄存器,地址直接无法直接交换数据,必须通过累加器A中转!!!
MOV DPTR , #0300H ;
MOV R0 , #30H ; 将数据 30H的存入R0寄存器
MOV R1 , #10H ; 将数据 10H的存入R1寄存器
LOOP :
MOV A,@R0
MOVX @DATP , A
INC DPTR ; 数据指针DPTR数据自增
INC R0 ; 寄存器R0数据自增
DJNC R1 , LOOP
(1)如下为汇编码,但是因为汇编码比较晦涩,所以我还增加了C语言代码进行理解
MOV R0 , #20H ; 将数据 20H的存入R0寄存器,表示地址
MOV R1 , #30H ; 将数据 30H的存入R1寄存器,用于表示循环30H次
MOV 50H, #00H ; 将50H地址处的数据清零
LOOP1:
CJNE @R0 , #00H , LOOP2 ; 如果R0地址的值不为0,进行跳转
INC 50H ; 如果R0地址的值为0,50H地址处数据自增
LOOP2:
INC R0
DJNC R1 , LOOP1
SJMP $ ; 死循环
(2)C 语言代码如下
int main()
{
uint8_t* R0 = 20H;
uint8_t R1 = 30H;
(uint8_t*)50H = 0;
do
{
if(*R0 != 0)
{
((uint8_t*)50H)++;
}
R0++;
}while(--R1);
}
(1)画出硬件电路图:
(1)中断、中断源、中断优先级、中断嵌套。
(1)中断过程包括中断请求、 中断响应 、 中断服务 与中断返回等4个工作过程。
(1)引起CPU中断的根源或原因,成为中断源。
(2)STC15F2K60S2 有14个中断源。
(1)一般记住前五个即可。
(1)CPU面向I/O口的服务方式包括 查询 、** 中断** 与DMA通道等3种方式
(2)中断过程包括中断请求、 中断响应 、 中断服务 与中断返回等4个工作过程。
(3)中断服务方式中, CPU与I/O设备是 并行 工作的。
(4)根据中断请求能否被CPU响应,可分为非屏蔽中断和 可屏蔽中断 两种类型。 STC15F2K60S2单片机的所有中断都属于 可屏蔽中断。
(5)若要求T0中断,除对ET0置1外,还需对 EA 置1。
(6)STC15F2K60S2单片机的中断优先等级分为个优先等级,当处于同一个中断优先级时,前5个中断的自然优先顺序由高到低是外部中断0 、 T0中断、 外部中断1 、 T1中断 、串行口1中断。
(7)外部中断0中断请求信号输入引脚是 P3.2 ,外部中断1中断请求信号输入引脚是 P3.3 。外部中断0、外部中断1的触发方式由 下降沿触发和双边沿触发两种类型。当IT0=1时,外部中断0的触发方式是 下降沿触发 。
(8) 外部中断2中断请求信号输入引脚是 P3.6 ,外部中断3中断请求信号输入引脚是 P3.7 ,外部中断4中断请求信号输入引脚是 P3.0 。外部中断2、外部中断3、外部中断4的中断触发方式只有1种类型,属于 下降沿 触发方式。
(9)外部中断0、外部中断1、外部中断2、外部中断3、外部中断4中断源的中断请求标志,在中断响应后相应的中断请求标志 会 自动清零。
(10)串行口1的中断包括 串行发送 和 串行接收 两个中断源,对应两个中断请求标志,串行口1的中断请求标志在中断响应后 不会 自动清零。
(1) 可使CPU与外设并行工作,提高CPU的工作效率;
(2)可实时响应外部设备的请求服务。
(1)两个
(2)外部中断0,T0中断,外部中断1,T1中断,串口1中断。
(1)方式0是一个16位自动重装载定时/计数器。
(2)方式2是一个8位自动重装载定时/计数器。
ORG 0000H
LJMP MAIN
ORG 001BH
LJMP Timer_ISR
MAIN:
MOV R3 , #10 ;设置50ms计数循初值
MOV TOMD,#00H ; 设置定时器1为方式0
MOV TH1 , #3CH ; 设置50ms定时器初值
MOV TL1 , #0B0H
MOV R2 , #07H ;设置左移次数
MOV P1 , #0FEH ;设置信号灯显示(左移)的起始状态值
MOV A , #0FEH ;设置信号灯显示(左移)的起始状态值
CLR 00H ;设置左、右移标志位,为0左移,为1右移
SETP TR1 ; 启动T1定时器
SJMP $ ;死循环
Timer_ISR:
DJNZ R3, Exit_T1_ISR ; 定时时间到,执行移步操作,否则中断结束
MOV R3 , #10
JB 00H , Right_Shift ; 判断左、右控制
RL A ; 左移控制
MOV P1 , A
DJNZ R2,Exit_T1_ISR ;判断左移流程是否结束,如果结束进入右移控制
SETB 00H ; 置为左、右移控制标志
MOV R2 , #07H ; 重新设置移位次数
SJMP Exit_T1_ISR
Right_Shift:
RR A ;右移控制
MOV P1,A
DJNZ R2,Exit_T1_ISR
CLR 00H
MOV R2,#07H
Exit_T1_ISR:
RET1
END
(1)串行通讯的一字节一字节的发送数据
(2)波特率计算公式
(1) 相同点:字符帧格式是一样的。
(2) 不同点:波特率发生器不同。
STC15F2K60S2单片机ADC模块的参考电压源(VREF)就是输入工作电源 Vcc,无专门ADC参考电压输入通道。如果 Vcc不稳定,如电池的供电系统中,电压常常在 5.3~4.2V 之间漂移,则可以在8路A/D 转换通道的任一通道上接一基准电源 (如1.25V 基准电压),以此计算出此时的工作电压 Vcc,再计算其他输入通道的模拟输入电压。
(1)STC15F2K60S2有8通道,10位的ADC。
(1) A/D转换电路按转换原理一般分为 并行比较 、** 逐次逼近比较**与 双积分 等3种类型。
(2)在A/D转换电路中,转换位数越大,说明A/D转换电路的转换精度越 高。
(3)10位A/D转换器中, VREF为5V。当模拟输入电压为3V时,转换后对应的数字量为 (3/5)2^10 = 614
(4)8位A/D转换器中, VREF为5V。转换后获得的数字量为7FH,请问对应的模拟输入电压是 5 (7FH / 2^8)= 2.5V。
(5)STC15F2K60S2单片机内部集成了 8 通道 10 位的A/D转换器,转换速度可达到 300 KHz。
(6)STC15F2K60S2单片机A/D转换模块转换的参考电压VREF是 电源电压。
(7)STC15F2K60S2单片机A/D转换模块的中断向量地址是 002BH ,中断号是5。
(1)STC15F2K60S2单片机A/D转换模块中转换电路的类型是 逐次逼近型
(2)STC15F2K60S2单片机A/D转换模块的8路模拟输入通道是在 P1 口
(3)当P1ASF=35H时,说明 P1.5、 P1.4、 P1.2、 P1.0 可用作A/D转换的模拟信号输入通道
(4) 当ADC_CONTR=83H时, STC15F2K60S2单片机的A/D模块选择了 P1.3 为当前模拟信号输入通道
(5)