第一章 中断
1.1 对中断的理解
https://blog.csdn.net/weixin_63568691/article/details/128498447
第二章 定时器
2.1 对定时器的理解:
其实不管定时器的内部结构,其实功能就跟我们的闹钟的定时功能一样,到预设的时间就会提示我们。
2.2 使用定时器的步骤
- 初始化定时器
(1)配置定时器模式:TMOD(一般为模式1)
(2)根据定时时间设置定时器初值:THx,TLx(x指的是具体的定时器)
定时器初值计算
(3)开启中断,包括定时器中断ETx和总中断EA
(4)开启计数TRx
2. 编写中断服务函数
(1)在中断入口地址区间设置跳转指令,跳转到中断服务函数处
(2)编写中断服务函数注意压栈保护主函数用到的寄存器数据,出栈再弹出
为什么在中断入口地址区间设置跳转指令?因为两个相邻的中断入口地址之间只有8个字节的空间,完全不够编写中断服务函数,所以将中断服务函数编写在其他地方,而让中断入口地址真正地成为一个入口
2.3应用
2.3.1软件的安装
https://download.csdn.net/download/weixin_63568691/87668952
2.3.2题目一
利用定时/计数器TO从P1.0输出周期为1s,脉宽为20ms的正脉冲信号,晶振频率为12MHz。试设计程序。
ORG 0000H
LJMP MAIN
ORG 000BH
SJMP TIM0
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#0D8H ;10ms
MOV TL0,#0F0H
SETB ET0
SETB EA
SETB TR0
LOOP1:
SJMP LOOP1
TIM0:
;重装载初值
MOV TH0,#0D8H
MOV TL0,#0F0H
;累加计数
INC R0
;判断是否大于20ms
CJNE R0,#2,SIGN1
;大于
CPL P1.0
SIGN1:
;判断是否大于1s
CJNE R0,#100,SIGN2
;大于
CPL P1.0
MOV R0,#00H
SIGN2:
RETI
END
第三章 串行通信
3.1 串口通信的理解:
https://blog.csdn.net/weixin_63568691/article/details/128274778
3.2 串行通信步骤:
- 定时器初始化(一般为模式2,不用开中断)
定时器初值计算:波特率 = 2 *(SMOD)/ 32 * 溢出率
溢出率 = (256 - 初值)* 12 / 晶振频率
假设晶振频率为12MHZ,SMOD=0时即初值 = 256 - (10^6 / 波特率 / 32)
- 串口初始化:
(1)设置模式:SCON(一般为模式1)
(2)开启中断:ES,EA
3.3 应用
串口接口工作于方式1,波特率为1200bps,晶振频率为12MHZ,初始化结束后打开串口接口使其处于准备接受状态
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP UART
ORG 0030H
MAIN:
MOV SP,#70H
MOV TMOD,#20H
MOV TH1,#230
MOV TL1,#230
MOV SCON,#50H
SETB TR1
SETB ES
SETB EA
LJMP $
ORG 0100H
UART:
JNB RI,RX
CLR RI
MOV R0,SBUF
RX:
RETI
END