单片微机原理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外部中断进行控制编程的方法论文章.希望读者理解本篇文章后.能够具备对市场上全部已经面世和将来面世的嵌入式芯片的外部中断进行控制编程的能力. 笔者原创的技术分享一直都恪守下 ...
随机推荐
- DOS下文件操作命令
文件名是由文件路径和文件名称合起来的,如C:\DOS\COMMAND.COM. DIR 显示文件和文件夹(目录). 用法:DIR [文件名] [选项] 它有很多选项,如/A表示显示所有文件(即包括带隐 ...
- Elasticsearch强大的聚合功能Facet
在常规数据库中,我们都知道有一个sql就是group,分组.如果主表只有对应的一个列记录的分组的ID,那么还好统计,比如说每本书book表,有一个分类catId,记录是属于哪一类的书,那么直接按照ca ...
- Mongodb使用总结
学习Mongodb已经有半年多了,为啥学习它,工作需要啊.好了,废话不说,总结在实际项目应用中的几点问题. 学习总结 首先,mongodb基本上既照顾到了sql某些语法,又有nosql的许多优点.入门 ...
- 【转载】Java 升级到jdk7后DbVisualizer 6 启动空指针的处理方案
将JDK从6升级到了7(或从其他电脑移植DBV文件夹后),每当启动DbVisualizer 6的时候都会报空指针异常 在官网上找到了相关的方案,如下: In the DbVisualizer inst ...
- shell脚本中>/dev/null的含义
shell脚本中>/dev/null的含义 shell脚本中有段使用sqlplus的部分: sqlplus ${user_id} <<! >/dev/null spool sp ...
- ECSHOP安装或使用中提示Strict Standards: Non-static method cls_image:
随着ECSHOP的不断发展,越来越多的人成为了ECSHOP的忠实粉丝.由于每个人的服务器环境和配置都不完全相同,所以ECSHOP也接二连三的爆出了各种各样的错误信息.相信不少新手朋友在ECSHOP安装 ...
- 通过jQuery或ScriptManager以Ajax方式访问服务
1.客户端和服务端 服务端对外提供服务时,可以通过handler或者webservice.handler比较轻便,但是难以对外公开,只有程序员自己知道它到底做了些什么工作.webservice可以将服 ...
- Android 国际化字符串资源,各语言目录表及从字符串资源文件读字符方法
字符串国际化 只要在 res 目录下 建对应语言的 values 目录即可. res下values是所有资源(包括字符串资源)的默认目录,如果没有特指资源目录或找不到某资源时,就用它. 如values ...
- 存储过程系列之调试存储过程 SQL Server 2005
在数据库中直接调试 在数据库中直接调试是调试SQL Server 2005的存储过程的最简单的方法. 在Visual Stuido的IDE中你可以选择单步执行存储过程,然后就可以一条语句一条语句地单 ...
- MySQL 授权详解
(1)确认一下3306是否对外开放,mysql默认状态下是不开放对外访问功能的.查看的办法如下: 1 2 3 4 5 6 7 netstat -an | grep 3306 tcp 0 ...