佛科院单片机原理4——中断系统、定时/计数器及串行通信
第一章 中断
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 0000HLJMP MAINORG 000BHSJMP TIM0ORG 0030HMAIN:MOV TMOD,#01HMOV TH0,#0D8H ;10msMOV TL0,#0F0HSETB ET0SETB EASETB TR0LOOP1:SJMP LOOP1TIM0:;重装载初值MOV TH0,#0D8HMOV TL0,#0F0H;累加计数INC R0;判断是否大于20msCJNE R0,#2,SIGN1;大于CPL P1.0SIGN1:;判断是否大于1sCJNE R0,#100,SIGN2;大于CPL P1.0MOV R0,#00HSIGN2:RETIEND
第三章 串行通信
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 0000HLJMP MAINORG 0023HLJMP UARTORG 0030HMAIN:MOV SP,#70HMOV TMOD,#20HMOV TH1,#230MOV TL1,#230MOV SCON,#50HSETB TR1SETB ESSETB EALJMP $ORG 0100HUART:JNB RI,RXCLR RIMOV R0,SBUFRX:RETIEND