单片微机原理P2:80C51外部中断与定时器系统
SETB IT1
SETB EX1
SETB PX1 ;设定外部中断1为高级中断
SETB EA
IT1 = ;
EX1 = ;
PX1 = ;
EA = ;
LOOP:
JB IE0, EVENT_OCCUR:
LJMP LOOP
EVENT_OCCUR:
;这里相当于可以是中断处理程序
CLR IE0 ;记得清掉IE0的状态
LJMP LOOP
MOV TMOD, #00000001B
MOV TH0, #0ECH
MOV TL0, #78H
SETB ET0
SETB TR0
SETB EA
TMOD = 0x01;
TH0 = 0xEC;
TL0 = 0x78;
ET0 = ;
TR0 = ;
EA = ;
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
MOV IP, #014H ; PS:PT1:PX1:PT0:PX0 = 10100(INT1高级中断,串口高级中断)
SETB IT1 ;外部中断下降沿触发
SETB EX1 ;允许外部中断1
SETB ET1 ;允许定时器中断1
SETB ES ;打开串口中断
SETB EA
END ;写汇编程序千万不要忘记写END
int main()
{
IP = 0x14;
IT1 = ;
EX1 = ;
ET1 = ;
ES = ;
EA = ; return ;
}
解:方式0:2^13 - (6*10^6 * 10 *10^-3 )/12 = 3192 -> TH0(063H) TL0(018H)(注意TH0放高8位,TL0放低5位)。方式1:2^16 - (6*10^6 * 10 *10^-3 )/12 = 60536 -> TH0(0ECH) TL0(078H)方式2:2^8 - (6*10^6 * 10 *10^-3 )/12 < 0 (溢出不能设置)
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP EVENT_OCCUR
ORG 0100H
MAIN:
MOV R0, #00H ;设定队列初值0 MOV P1, #01H
MOV TMOD, #00000001B
MOV TH0, #0ECH
MOV TL0, #78H
SETB ET0
SETB TR0
SETB EA
AJMP $
EVENT_OCCUR:
CLR EA
PUSH ACC ;保护现场,虽然在这一题没必要
INC R0
CJNE R0, #, NEXT_EVENT
RL A
MOV P1, A
MOV R0, #00H NEXT_EVENT:
MOV TH0, #0ECH ;一定要记得重设初值
MOV TL0, #78H POP ACC ;恢复现场
RETI
END
_CODE_SEGMENT:
ORG 0000H
LJMP START
ORG 000BH
LJMP BUTTON_HASED_PUSHED
ORG 001BH
LJMP EVENTLOOP_OCCUR
ORG 0100H
START:
;crystal oscillator frequency is 12MHZ ;Register 0 is uesd to log the number pushing actions
MOV R0,#00H ;register 1 is uesd to log the microsecond event times
MOV R1,#00H MOV TH0,#0FFH
MOV TL0,#0FFH MOV TH1,#0D8H
MOV TL1,#0F0H MOV TMOD,#00010101B ;we must make time interrupt 1 is the advance interrupt
MOV IP,#02H SETB ET0
SETB TR0 SETB ET1
SETB TR1 SETB EA
LCALL DISPLAY_DIGITAL_NUM AJMP $
BUTTON_HASED_PUSHED:
INC R0
UPDATE_DIGITL_NUM:
LCALL DISPLAY_DIGITAL_NUM MOV TH0,#0FFH
MOV TL0,#0FFH RETI
EVENTLOOP_OCCUR:
PUSH ACC INC R1
CJNE R1,#,NEXT_EVENT MOV R0,#00H
LCALL DISPLAY_DIGITAL_NUM
MOV R1,#00H NEXT_EVENT:
MOV TH1,#0D8H
MOV TL1,#0F0H POP ACC
RETI
DISPLAY_DIGITAL_NUM:
CLR EA
PUSH ACC MOV A, R0
MOV DPTR, #DIGITAL_NUM
MOVC A, @A + DPTR
MOV P2, A POP ACC
SETB EA
RET
_DATA_SEGMENT:
DIGITAL_NUM:
DB 0C0H, 0F9H, 0A4H,0B0H,99H,92H,82H,0F8H,00H,90H
DB 88H, 83H, 0C6H, 0A1H, 86H, 8EH
END
#include<reg51.h>
#define FinalOuccr 200 unsigned char const digitalNumsSet[]
= {0xC0, 0xF9, 0xA4, 0xB0,
0x99, 0x92, 0x82, 0xF8,
0x00, 0x90, 0x88, 0x83,
0xC6, 0xA1, 0x86, 0x8E}; enum StarterTime{ TH0_Start = 0xFF,
TL0_Start = 0xFF,
TH1_Start = 0xD8,
TL1_Start = 0xF0}; //-----------------------------------------------------
void updateDigitalNumber(unsigned char const digitalNum); static int eventOccurTimes = , BtnPushedTimes = ; void ButtonPushed()interrupt using //中断1(定时器0中断),使用寄存器组0
{
BtnPushedTimes++;
updateDigitalNumber(digitalNumsSet[BtnPushedTimes]); TH0 = TH0_Start;
TL0 = TL0_Start;
} void EventOccur()interrupt using //中断3(定时器1中断),使用寄存器组1
{
eventOccurTimes++;
if(eventOccurTimes == FinalOuccr)
{
BtnPushedTimes = ;
updateDigitalNumber(digitalNumsSet[BtnPushedTimes]);
eventOccurTimes = ;
}
TH1 = TH1_Start;
TL1 = TL1_Start;
} int main()
{
TH0 = TH0_Start;
TL0 = TL0_Start; TH1 = TH1_Start;
TL1 = TL1_Start; TMOD = 0x15;
TCON = 0x50;
IP = 0X02;
ET0 = ;
ET1 = ;
EA = ; while(); return ;
} void updateDigitalNumber(unsigned char const digitalNum)
{
P2 = digitalNum;
}
单片微机原理P2:80C51外部中断与定时器系统的更多相关文章
- 单片微机原理P0:80C51结构原理
本来我真的不想让51的东西出现在我的博客上的,因为51这种东西真的太low了,学了最多就所谓的垃圾科创利用一下,但是想一下这门课我也要考试,还是写一点东西顺便放博客上吧. 这一系列主要参考<单片 ...
- 单片微机原理P1:80C51指令系统和编程方法
0. 寻址方式 寻址方式在汇编中是很重要的,汇编所有的操作都是和和内存或者寄存器打交道的,在80C51里面一共7种寻址方式. 1. 立即寻址: 这个没什么好说的,就是往寄存器或者内存里面写立即数, ...
- 十天学会单片机Day1点亮数码管(数码管、外部中断、定时器中断)
1.引脚定义 P3口各引脚第二功能定义 标号 引脚 第二功能 说明 P3.0 10 RXD 串行输入口 P3.1 11 TXD 串行输出口 P3.2 12 INT0(上划线) 外部中断0 P3.3 1 ...
- 单片微机原理P3:80C51外部拓展系统
外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC. 0. IO接口电路概念与存储器拓展 1. 为什 ...
- 单片微机原理P4:80C51串口与串行总线拓展
0. 串口通讯 0. 串口通讯的数据传输方式:单工(单向传输数据),半双工(非同时双向传输),全双工(同时,双向传输) 1. 根据通信方式的不同又分为同步通讯和异步通讯. 同步通讯:所有设备都使用同一 ...
- ATmega8仿真——外部中断的学习
前面我们学习了ATmega8的I/O口作为通用数字输入/输出口来用时对LED数码管控制和扫描按键的应用: 但ATmega8多数的I/O口都是复用口,除了作为通用数字I/O使用,还有其第二功能,这里我们 ...
- STM32 外部中断详解(原理+配置代码)
本文介绍了STM32基于标准外设库的外部中断配置,以及基于参考手册如何更加寄存器配置外部中断 文章目录 1 前言 2 STM32的外部中断 3 中断服务函数的映射关系 4 外部中断的配置 5 寄存器的 ...
- Cortex-M3学习日志(三)-- 外部中断0
无论是哪款单片机应该都有对应的中断的功能,中断在嵌入式系统的地位毋庸置疑.LPC1768微处理器包括4个外部中断,分别是EINT0.EINT1.EINT2.EINT3对应的引脚分别是P2.10~P2. ...
- 嵌入式外部中断控制编程方法论—比較CC2541(51核)和S5PV210(ARM核)
这是一篇阐述怎样对嵌入式SOC外部中断进行控制编程的方法论文章.希望读者理解本篇文章后.能够具备对市场上全部已经面世和将来面世的嵌入式芯片的外部中断进行控制编程的能力. 笔者原创的技术分享一直都恪守下 ...
随机推荐
- 再写FFT模板
没什么好说的,今天又考了FFT(虽然不用FFT也能过)但是确实有忘了怎么写FFT了,于是乎只有重新写一遍FFT模板练一下手了.第一部分普通FFT,第二部分数论FFT,记一下模数2^23*7*17+1 ...
- codeforces 388B Fox and Minimal path
这个题目的突破口就是固定最短长度,然后以二进制的形式分层: 最后把需要的曾连起来: #include<cstdio> #include<cstring> #define max ...
- 用Firefly创建第一个工程
原地址:http://blog.csdn.net/uxqclm/article/details/10382097 安装完成之后,在python script包中就存在 firefly-admin的工具 ...
- ZOJ 3609 Modular Inverse
点我看题目 题意 : 这个题是求逆元的,怎么说呢,题目看着很别扭....就是给你a和m,让你求一个最小的x满足a-1≡x (mod m).或者ax≡1 (mod m).通俗点说呢,就是找一个最小的x, ...
- WPF中的MatrixTransform
原文:WPF中的MatrixTransform WPF中的MatrixTransform ...
- 133. Clone Graph
题目: Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. ...
- SQL Server中时间段查询
/****** Script for SelectTopNRows command from SSMS ******/ select * from dbo.VehicleData20100901 wh ...
- hdu1501Zipper(记忆化搜索)
http://acm.hdu.edu.cn/showproblem.php?pid=1501 搜了下记忆化搜索是嘛 然后就看到这个题了 不过一不小心看到代码了 代码又那么短 一不小心给记住了 然后看了 ...
- Hadoop中的各种排序
本篇博客是金子在学习hadoop过程中的笔记的整理,不论看别人写的怎么好,还是自己边学边做笔记最好了. 1:shuffle阶段的排序(部分排序) shuffle阶段的排序可以理解成两部分,一个是对sp ...
- Hibernate: org.hibernate.exception.SQLGrammarException: could not insert: 错误
最近在学习Java Web,今天刚接触Hibernate.学习的书籍是<轻量级Java EE企业应用实战(第3版)>.书中367页5.2.2中给予的Hibernate例子中的代码运行有以下 ...